4

Я создаю пользовательские целевые страницы для продуктов в WooCommerce, и я хотел бы получить цену продукта между прочим, чтобы отображать их на целевой странице.Использование wc_get_product() с переменной PHP для идентификатора продукта

Каждой целевая страница имеет несколько настраиваемых полей, которые позволяют WP администратору добавить в контенте для целевой страницы, а также идентификатор продукта, который затем будет использоваться для создания цены продукта, Checkout 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> 

Update

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

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

ответ

1

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

Я использую расширенные пользовательские поля, чтобы добавить пользовательские поля в конец, и я использовал ACF the_field(), чтобы создать свою переменную. Это неправильное использование этой функции, поскольку она предназначена для отображения поля (в основном это используется эхом php).Для работы с этими настраиваемое поле Вам необходимо использовать АКФ get_field(), который является use it to store a value, echo a value and interact with a value.

После того, как я перешел к настройке моего $ courseID этого ..

$courseID = get_field('course_id'); 

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

+0

Хо да !!! это было так очевидно, что я не видел этого на этот раз ... Я уже отвечаю с ACF get_field()/the_field() ... Это очень распространенная ошибка. – LoicTheAztec

4

Update related to your recent comment. The 2 ways to explore:

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> 

На этот раз вам нужно отобразить цену с помощью одного или другого решения.


Update: May be Also you need to convert $courseID to an integer variable.

Потому что вам нужно использовать переменную $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> 

Это должно работать.

+0

Я должен был упомянуть, что я пробовал это уже без '' '' и генерирует ошибку для вызова не-объекта. 'Неустранимая ошибка: вызовите функцию-член get_regular_price() на не-объект в ...' –

+0

Спасибо за вашу помощь! Я бы не смог устранить другие варианты без него. Очень признателен! –

1

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

$courseID = the_field('course_id'); 
$product = get_product($courseID); 
+0

Использование старой функции 'get_product();' функция по-прежнему не работает при удалении кавычек. Смотрите мой ответ на @LoicTheAztec ниже –

0

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

$_product = wc_get_product(id); 

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

 Смежные вопросы

  • Нет связанных вопросов^_^