私はカート内に特別な商品カテゴリ 'cat_x'が追加された商品がある場合、以下のコードを使用して他のWooCommerce商品カテゴリアイテムをカートから削除しています通知。コードはthis threadから来て、ちょうどうまく機能:同じ商品カテゴリのカートアイテムを制限する
add_action('woocommerce_check_cart_items', 'checking_cart_items');
function checking_cart_items() {
$special = false;
$catx = 'cat_x';
$number_of_items = sizeof(WC()->cart->get_cart());
if ($number_of_items > 0) {
// Loop through all cart products
foreach (WC()->cart->get_cart() as $cart_item_key => $values) {
$item = $values['data'];
$item_id = $item->id;
// detecting if 'cat_x' item is in cart
if (has_term($catx, 'product_cat', $item_id)) {
if (!$special)
$special = true;
}
}
// Re-loop through all cart products
foreach (WC()->cart->get_cart() as $cart_item_key => $values) {
$item = $values['data'];
$item_id = $item->id;
if ($special) // there is a 'cat_x' item in cart
{
if ($number_of_items == 1) { // only one 'cat_x' item in cart
if (empty($notice))
$notice = '1';
}
if ($number_of_items >= 2) { // 'cat_x' item + other categories items in cart
// removing other categories items from cart
if (!has_term($catx, 'product_cat', $item_id)) {
WC()->cart->remove_cart_item($cart_item_key); // removing item from cart
if (empty($notice) || $notice == '1')
$notice = '2';
}
}
} else { // Only other categories items
if (empty($notice))
$notice = '3';
}
}
// Firing notices
if ($notice == '1') { // message for an 'cat_x' item only (alone)
wc_add_notice(sprintf('<p class="woocommerce-error">bla bla bla one category X item in the cart</p>'), 'success');
} elseif ($notice == '2') { // message for an 'cat_x' item and other ones => removed other ones
wc_add_notice(sprintf('<p class="woocommerce-error">bla bla bla ther is already category X in the cart => Other category items has been removed</p>'), 'error');
} elseif ($notice == '3') { // message for other categories items (if needed)
wc_add_notice(sprintf('<p class="woocommerce-error">bla bla bla NOT category X in the cart</p>'), 'success');
}
}
}
は、カテゴリの配列でも動作しますhas_termは()、私はそのコードにカテゴリの配列を設定するために、一つのカテゴリの代わりにしようとした条件付き機能を持っています。 しかし、それは動作していません。
しかし、私のニーズは変わっています。顧客がさまざまなカテゴリのカートアイテムを選択できるようにすることはできません。したがって、カートには常に同じ商品カテゴリの商品が必要です。
お願いします。
ありがとうございました。
ありがとう、このソリューションは完璧に動作します。 –