У меня есть магазин wordpress, где я продаю цифровые продукты.
Что должна делать функция:
- Пользователь нажимает кнопку «Добавить в корзину».
- Функция проверяет, находится ли товар уже в корзине.
- Если да: перенаправить пользователя на страницу оформления заказа без добавления продукта в корзину (чтобы количество не изменилось, оно останется на 1) .
- Если нет: перенаправить на кассу и добавить товар в корзину (количество меняется от 0 до 1).
Как выглядит функция:
add_filter('woocommerce_add_to_cart_validation', 'my_validation_handler', 10, 2);
function my_validation_handler($is_valid, $product_id) {
$url = WC()->cart->get_checkout_url();
foreach(WC()->cart->get_cart() as $cart_item_key => $values) {
if ($values['data']->id == $product_id) {
$url = WC()->cart->get_checkout_url();
wp_redirect($url);
exit();
}
else {
return $is_valid;
}
}
}
Что происходит:
Когда я реализую код в functions. php моей дочерней темы: (У меня уже есть продукт в корзина) Я снова нажимаю кнопку добавления в корзину, но ничего не происходит.
Если корзина пуста, то же самое, ничего не происходит, ничего не перезагружается, я все еще нахожусь на странице продуктов.
Важная деталь:
Я знаю, что есть встроенная функция WooCommerce (продается отдельно). Но у меня есть страница с настраиваемыми товарами, и я не хочу, чтобы появлялось сообщение "вы уже добавили это в корзину".
Поскольку я перенаправляю посетителей веб-сайта, товар все еще находится там иногда из их последний визит. И решение с истекающим сроком действия сеанса также не совсем то, что я ищу.