2013-12-18 3 views
0

Я работаю над плагином для woocommerce и наткнулся на крючок «woocommerce_variation_price_html», который позволяет вам зависнуть от цены вариаций на отдельных продуктах. Поэтому создана быстрая функция для тестирования и воспроизведения:hook в woocommerce_variation_price_html wordpress

add_action('woocommerce_variation_price_html' , 'wholesale_variation_price'); 
function wholesale_variation_price($term){ 

return ''; 

} 

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

Так я тогда сделал следующее:

add_action('woocommerce_variation_price_html' , 'wholesale_variation_price'); 
function wholesale_variation_price($term){ 

$var_price = get_post_meta(get_the_id(), '_my_price', true); 

return $var_price; 

} 

Это по какой-то причине не работает? Кто-нибудь имел опыт работы с этим крюком в woocommerce? На этом крюке нет документации.

Любая помощь была бы принята с благодарностью!

+0

Этот крючок не предназначен для уточнения цены. Этот используется для формирования выходных данных. Это только изменяет цену, которую видит пользователь. Не фактическая цена, используемая в корзине/порядке. Также проверьте, возвращает ли get_post_meta значение. – ViszinisA

+0

Да, я хотел бы просто форматировать выход, цена на корзину/заказ уже позаботилась. post_meta возвращает значение. – danyo

ответ

3

Как уже было указано, что вы можете прочитать here о фильтрах для HTML. Возможно, у вас есть Цена продажи для вариации? Затем в ссылке вы увидите, что имеется всего 4 фильтра. Для: цена, цена продажи, бесплатно и без цены.

Этот код работает

add_filter('woocommerce_variation_sale_price_html', 'my_html', 10, 2); 
add_filter('woocommerce_variation_price_html', 'my_html', 10, 2); 
function my_html($price, $variation) { 
    return woocommerce_price(5); 
} 

Кроме того, это один тоже работает. Это позволяет изменять все варианты. Читайте в коде here

add_filter('woocommerce_available_variation', 'my_variation', 10, 3); 
function my_variation($data, $product, $variation) { 
    $data['price_html'] = woocommerce_price(6); 
    return $data; 
} 

Скриншоты:

Первый пример

example of first filter

Второй пример

example of second filter

работает как Magic!

P.S. вы можете видеть такие цены на скриншотах, потому что у меня есть дизайн, который показывает их так.


EDIT 2016-09-10

Версия 2.6+

Как woocommerce_price осуждается в 2.6, то использовать wc_price для новых версий.

+0

Я не знал, что существует функция woocommerce_price()! Как я могу получить конкретный идентификатор изменения в этой функции? Мне нужно получить настраиваемое поле – danyo

+0

Я обновил свой пост. Я все испортил. Вторая функция зафиксирована. Также в обоих случаях у вас есть переменная $ вариация [или w/e, которую вы выберете, чтобы назвать ее]. В первой функции используется вторая (2.) переменная. А во второй функции у вас есть третья (3.) переменная для вариации. – ViszinisA

+0

благодарит за обновление! так как бы я нацелился на конкретное meta_value _my_price для каждого варианта? – danyo

0

Изучив исходный код WooCommerce, я вижу, что woocommerce_variation_price_html - это фильтр, а не действие. Я не знаю, как вам удалось заставить ваш образец кода работать так ... странно.

Попробуйте это:

function wholesale_variation_price($price, $product) { 
    $var_price = get_post_meta($product->variation_id, '_my_price', true); 
    return $var_price; 
} 
add_filter('woocommerce_variation_price_html', 'wholesale_variation_price', 10, 2) 
+0

Думаю, имеет тот же результат, что и add_action, насколько я могу видеть? Что работает, но только обновляет цену 1 пункта из выпадающего списка. – danyo

+0

Я только что проверил, и функция WordPress 'add_action' использует функцию' add_filter', поэтому 'add_action' - это в основном просто псевдоним, и они имеют одинаковое поведение. –

1
// Display Price For Variable Product With Same Variations Prices 
add_filter('woocommerce_available_variation', function ($value, $object = null, $variation = null) { 
if ($value['price_html'] == '') { 
    $value['price_html'] = '<span class="price">' . $variation->get_price_html() . '</span>'; 
} 
return $value;}, 10, 3); 
Смежные вопросы