Очистите корзину перед добавлением в корзину в Woocommerce
Я использую WP Job manager с подписками на Woo.
Теперь:
Изначально я выбрал пакет (подписка woo)
Затем я добавил все детали.
- Но не представил его.
- Вернулся на сайт, поэтому для повторной покупки мне нужно выбрать пакет. Поэтому я выбрал пакет, заполнил данные и перешел к платежному пакету.
- Теперь в моей корзине присутствуют обе упаковки (то есть та, которую я выбрал, не покупая сначала время и недавнее)
- Как это можно исправить, чтобы последний выбранный был в корзине, а более ранний был удален, как только был выбран последний.
Я попробовал это Woocommerce Удалить все товары из корзины и добавить текущий товар в корзину , но это не помогло.
2
Author: LoicTheAztec, 2018-03-20
1 answers
Обновлено (2 разных варианта):
Вам следует попробовать следующее:
add_filter( 'woocommerce_add_to_cart_validation', 'remove_cart_item_before_add_to_cart', 20, 3 );
function remove_cart_item_before_add_to_cart( $passed, $product_id, $quantity ) {
if( ! WC()->cart->is_empty())
WC()->cart->empty_cart();
return $passed;
}
Код входит в function.php файл вашей активной дочерней темы (или темы). Протестировано и работает как с ajax-добавлением в корзину, так и с обычным добавлением в корзину...
Или вы можете использовать другой, который сохранит в корзине последний добавленный товар:
// Keep only last cart item
add_action( 'woocommerce_before_calculate_totals', 'keep_only_last_cart_item', 30, 1 );
function keep_only_last_cart_item( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
return;
$cart_items = $cart->get_cart();
if( count($cart_items) > 1 ){
$cart_item_keys = array_keys( $cart_items );
$cart->remove_cart_item( reset($cart_item_keys) );
}
}
Код входит в function.php файл вашей активной дочерней темы (или темы). Протестировано и работает
2
Author: LoicTheAztec, 2018-10-01 10:02:52