Очистите корзину перед добавлением в корзину в Woocommerce


Я использую WP Job manager с подписками на Woo.

Теперь:

  1. Изначально я выбрал пакет (подписка woo)

  2. Затем я добавил все детали.

  3. Но не представил его.
  4. Вернулся на сайт, поэтому для повторной покупки мне нужно выбрать пакет. Поэтому я выбрал пакет, заполнил данные и перешел к платежному пакету.
  5. Теперь в моей корзине присутствуют обе упаковки (то есть та, которую я выбрал, не покупая сначала время и недавнее)
  6. Как это можно исправить, чтобы последний выбранный был в корзине, а более ранний был удален, как только был выбран последний.

Я попробовал это Woocommerce Удалить все товары из корзины и добавить текущий товар в корзину , но это не помогло.

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