Изменение цен на товары в корзине в Woocommerce 3
Я пытаюсь изменить цену товара в корзине, используя следующую функцию:
add_action( 'woocommerce_before_shipping_calculator', 'add_custom_price'
);
function add_custom_price( $cart_object ) {
foreach ( $cart_object->cart_contents as $key => $value ) {
$value['data']->price = 400;
}
}
Он работал правильно в WooCommerce версии 2.6.x, но больше не работал в версии 3.0+
Как я могу заставить его работать в WooCommerce версии 3.0+?
Спасибо.
2 answers
Обновление ( Сентябрь 2018)
С WooCommerce версии 3.0+ вам нужно:
- Для использования
woocommerce_before_calculate_totals
вместо этого крюк. - Для использования wc_cart
get_cart()
метод вместо - Для использования wc_продукт
set_price()
метод вместо
Вот код:
add_action( 'woocommerce_before_calculate_totals', 'add_custom_price', 20, 1);
function add_custom_price( $cart_obj ) {
// This is necessary for WC 3.0+
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
// Avoiding hook repetition (when using price calculations for example)
if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
return;
// Loop through cart items
foreach ( $cart_obj->get_cart() as $cart_item ) {
$cart_item['data']->set_price( 40 );
}
}
Код входит в function.php файл вашей активной дочерней темы (или темы) или также в любом плагине файл.
Этот код протестирован и работает.
Примечание: вы можете увеличить приоритет подключения с
20
чтобы1000
( или даже2000
) при использовании нескольких конкретных плагинов или других настроек.
Связанные:
- Установите цену товара в корзине из скрытого поля ввода пользовательская цена в Woocommerce 3
- Изменение цены товара в корзине на основе пользовательских данных корзины в WooCommerce
- Установите конкретную цену товара условно на странице и корзине одного товара Woocommerce
- Добавьте поле выбора, которое изменит цену в простых продуктах Woocommerce
С версией WooCommerce 3.2.6 ответ @LoicTheAztec работает для меня, если я увеличу приоритет до 1000.
add_action( 'woocommerce_before_calculate_totals', 'add_custom_price', 1000, 1);
Я попробовал значения приоритета 10
,99
и 999
но цена и общая сумма в моей корзине не изменились (хотя я смог подтвердить с помощью get_price()
, что set_price()
фактически установил цену товара.
У меня есть пользовательский крючок, который добавляет плату в мою корзину, и я использую сторонний плагин, который добавляет атрибуты продукта. Я подозреваю, что эти WooCommerce "дополнения" вводят задержки, которые требуют, чтобы я отложил свое пользовательское действие.