Я хотел бы остановить любого клиента, продвигающегося к выписке, если у них нет определенной категории товаров в корзине. Я также хотел бы сообщить им сообщение об ошибке, что им нужно добавить определенный продукт. Я нашел код, но не могу работать. Я добавил его как фрагмент кода в мою установку Wordpress, но, увы, он не работает, и нет сообщений об ошибках, даже если у меня включена отладка. Вот код, который я нашел в Github, которые могут нуждаться в модификации для того, чтобы это работало:Разрешить проверку только в том случае, если товар обязательной категории находится в корзине
function sv_wc_prevent_checkout_for_category() {
// set the slug of the category for which we disallow checkout
$category = 'sibling';
// get the product category
$product_cat = get_term_by('slug', $category, 'product_cat');
// sanity check to prevent fatals if the term doesn't exist
if (is_wp_error($product_cat)) {
return;
}
$category_name = '<a href="' . get_term_link($category, 'product_cat') . '">' . $product_cat->name . '</a>';
// check if this category is the only thing in the cart
if (sv_wc_is_category_alone_in_cart($category)) {
// render a notice to explain why checkout is blocked
wc_add_notice(sprintf('Hi there! Looks like your cart only contains products from the %1$s category – you must purchase a product from another category to check out.', $category_name), 'error');
}
}
add_action('woocommerce_check_cart_items', 'sv_wc_prevent_checkout_for_category');
/**
* Checks if a cart contains exclusively products in a given category
*
* @param string $category the slug of the product category
* @return bool - true if the cart only contains the given category
*/
function sv_wc_is_category_alone_in_cart($category) {
// check each cart item for our category
foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item) {
// if a product is not in our category, bail out since we know the category is not alone
if (! has_term($category, 'product_cat', $cart_item['data']->id)) {
return false;
}
}
// if we're here, all items in the cart are in our category
return true;
}
Поэтому я ищу, чтобы остановить проверку (с сообщением об ошибке), если категория «родственный» является единственным в корзине. У меня есть «стандартная» категория, которая должна быть в корзине, прежде чем клиент отправит ее в кассу. Надеюсь, это имеет смысл.
Loic! Фантастика! Это работает. Огромное спасибо. –