WooCommerce — очистить текущую корзину при событии добавления в корзину

#php #wordpress #woocommerce

#php #wordpress #woocommerce

Вопрос:

Итак, я продаю цифровой продукт с помощью WooCommerce, но у меня нет страницы магазина или чего-то еще, у меня просто есть большая кнопка CTA на моей целевой странице, которая добавляет указанный идентификатор продукта в корзину и переходит на страницу оформления заказа по щелчку.

Но, допустим, пользователь хочет вернуться на целевую страницу, чтобы что-то перепроверить и завершить процесс оформления заказа, тогда количество товара становится 2, и они не могут редактировать корзину, потому что я удалил все страницы магазина, кроме оформления заказа.

Итак, мне нужно написать функцию hook / filter, которая сообщает WC очистить текущую корзину перед добавлением нового товара в корзину, но у меня также есть этот плагин upsell, который продвигает мои товары upsell в событии отправки заказа прямо перед оплатой.

Как вы можете видеть, мне нужно проверить идентификатор продукта, чтобы моя функция не опустошала корзину, если это распродаваемый продукт, что было бы чем-то вроде примера ниже, в псевдокоде;

 add_filter('woocommerce_add_to_cart_validation', function(...$filterArgs){
    (int) $productID; // ID of the product being added to cart
    (int) $upsellProductID; // ID of the Upsell product 
    (bool) $isCartEmpty; // check if the current cart is empty or not 

    if($productID !== $upsellProductID amp;amp; $isCartEmpty) {
        emptyCartFunctionOfWooCommerce();

        return $cartVariableFromFilterArgs
    }
});
 

Я еще не владею WP-хуками, так что у вас есть идеи, как я могу это сделать? Большое вам спасибо.

РЕДАКТИРОВАТЬ: я просто сделал это без проверки идентификатора, и это не мешало функции Upsell. Если у кого-то такая же проблема, вы можете использовать что-то вроде приведенного ниже кода.

 // This will empty the current cart before adding the product to the cart.    
add_filter( 'woocommerce_add_to_cart_validation', function($passed, $product_id, $quantity){
    if (!WC()->cart->is_empty()) {
        WC()->cart->empty_cart();
    }

    return $passed;   
}, 20, 3 );
 

Ответ №1:

Отредактируйте товар, перейдите в раздел Инвентарь и выберите «Продается по отдельности» «Включите это, чтобы разрешить покупку только одного из этих товаров в одном заказе». Это остановит покупателей, добавляющих в корзину более 1 такого товара.

Как только вы это сделаете, измените свою кнопку на <a> тег.

<a href="yourdomain.com/cart/?add-to-cart=35407">Buy Now</a>

Это должно привести вас на страницу корзины и добавить товар в корзину, но ограничить его до 1.

Комментарии:

1. Я только что попробовал, но потом он вообще не переходит на страницу оформления заказа, клиент застревает на целевой странице

2. Какой HTML-код вы использовали для кнопки?

3. Это так; <метод формы =»ОПУБЛИКОВАТЬ» действие =»?добавить в корзину = 35407″ данные-количество =»1″ данные-product_id=»35407″> <тип ввода =»электронная почта»> <тип ввода =»отправить»> </form>

4. О, я ожидал, что это будет тег <a> … что произойдет, если вы перейдете к yourdomain.com/cart/?add-to-cart=35407 Я внес изменения в свой ответ выше.

5. Ну, это не имеет значения, это также работает с тегом <a>, и при отправке он добавляет товар в корзину. Я все равно исправил проблему, спасибо за вашу помощь