#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>, и при отправке он добавляет товар в корзину. Я все равно исправил проблему, спасибо за вашу помощь