当我在购物车中添加了特殊产品类别“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( '
bla bla bla one category X item in the cart
' ), 'success' );} elseif ( $notice == '2' ) { // message for an 'cat_x' item and other ones => removed other ones
wc_add_notice( sprintf( '
bla bla bla ther is already category X in the cart => Other category items has been removed
' ), 'error' );} elseif ( $notice == '3' ) { // message for other categories items (if needed)
wc_add_notice( sprintf( '
bla bla bla NOT category X in the cart
' ), 'success' );}
}
}
条件函数has_term()是否也适用于类别数组,我尝试过而不是使用一个类别来设置该代码中的类别数组.但它不起作用.
但是,我的需求已经改变:我不想让顾客有可能选择不同类别的购物车商品.因此购物车必须始终包含来自同一产品类别的商品.
有什么帮助吗?
谢谢.