wordpress — Использование wc_get_product () с переменной PHP для идентификатора продукта

Я создаю пользовательские целевые страницы для продуктов в WooCommerce, и я хотел бы получить цену продукта среди прочего, чтобы отобразить их на целевой странице.

Каждая целевая страница имеет несколько настраиваемых полей, которые позволяют WP Admin добавлять контент, как для целевой страницы, так и для идентификатора продукта, который затем будет использоваться для определения цены продукта, URL-адреса оформления заказа и т. Д.

Я не могу получить wc_get_product(); работать с моим настраиваемым полем или переменной, созданной из этого. Это работает только тогда, когда я использую прямой идентификатор. Я думаю, что есть кое-что, что я не понимаю о том, как переменные работают в PHP. Вот мой код

<?php

//Gets the course ID from the custom field entered by user
$courseID = the_field('course_id');

// This line is where the problem is...
$_product = wc_get_product('$courseID');

// If I replace the line above with this line
// $_product = wc_get_product('7217');
//  everything works great, but that does not let
// each landing page function based on the custom fields where the user determines
// the product ID they are selling on that landing page.// Get's the price of the product
$course_price = $_product->get_regular_price();

// Output the Course price
?>  <span class="coursePrice">$<?php echo $course_price;?></span>

Обновить

Я получаю следующую ошибку, используя wc_get_product( $courseID ); или же get_product( $courseID );:

Fatal error: Call to a member function get_regular_price() on a non-object in ...

5

Решение

Обновить связанные с вашим последним комментарием. 2 способа изучения:

1) Вместо вас следует попытаться использовать для получения объекта продукта (избегая ошибки):

$courseID = the_field('course_id');

// Optionally try this (uncommenting)
// $courseID = (int)$courseID;

// Get an instance of the product object
$_product = new WC_Product($courseID);

2) Или, если это не работает, вы должны попытаться использовать get_post_meta() функция, чтобы получить цену продукта (или любые метаданные продукта) сюда:

<?php
//Gets the course ID from the custom field entered by user
$courseID = the_field('course_id');

// Get the product price (from this course ID):
$course_price = get_post_meta($courseID, '_regular_price', true);

// Output the Course price
?>  <span class="coursePrice">$<?php echo $course_price;?></span>

На этот раз вы должны отобразить цену с тем или иным решением.


Обновить: Также может потребоваться преобразовать $ courseID в целочисленную переменную.

Потому что вам нужно использовать вашу переменную $courseID внутри wc_get_product() (без 2 ') функционируем так:

<?php

//Gets the course ID from the custom field entered by user
$courseID = the_field('course_id');

// Optionally try this (uncommenting)
// $courseID = (int)$courseID;

// Here
$_product = wc_get_product( $courseID );

$course_price = $_product->get_regular_price();

// Output the Course price
?>  <span class="coursePrice">$<?php echo $course_price;?></span>

Это должно работать сейчас.

4

Другие решения

Вы можете попробовать это:

$courseID = the_field('course_id');
$product = get_product( $courseID );
1

Я разобрался с ответом после прохождения возможных маршрутов решения, которые @LoicTheAztec предоставил в своем ответе. Ничто из этого не сработало, и поэтому я предположил, что что-то еще произошло.

Я использую Advanced Custom Fields для добавления пользовательских полей в бэкэнд, и я использовал ACF the_field() для того, чтобы создать мою переменную. Это неправильное использование этой функции, так как она предназначена для отображения поля (в основном это эхо php). Для работы с этими настраиваемыми полями необходимо использовать ACf get_field() который должен используйте его для хранения значения, вывода значения и взаимодействия со значением.

Однажды я переключился на установку своего $ courseID на это ..

$courseID = get_field('course_id');

Все работало Мой код работал, и все подходы к коду @ LoicTheAztec также работали.

1

Вы также можете использовать этот метод

$_product = wc_get_product( id );

Официальные API-документы: wc_get_product

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector