在 Woocommerce 中一次只允许购物车中的一个产品类别
Allow only one product category in cart at once in Woocommerce
我如何将 Woocommerce 购物车配置为一次只允许其中一种产品类别?
以下代码将允许仅将来自一个产品类别的项目添加到购物车,避免添加到购物车并显示自定义通知:
add_filter( 'woocommerce_add_to_cart_validation', 'only_one_product_category_allowed', 20, 3 );
function only_one_product_category_allowed( $passed, $product_id, $quantity) {
// Getting the product categories term slugs in an array for the current product
$term_slugs = wp_get_post_terms( $product_id, 'product_cat', array('fields' => 'slugs') );
// Loop through cart items
foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item ){
// Check if the product category of the current product don't match with a cart item
if( ! has_term( $term_slugs, 'product_cat', $cart_item['product_id'] ) ){
// Displaying a custom notice
wc_add_notice( __('Only items from one product category are allowed in cart'), 'error' );
// Avoid add to cart
return false; // exit
}
}
return $passed;
}
代码进入活动子主题(或活动主题)的 function.php 文件。已测试并有效。
添加 (更新) - 相同但仅适用于 父产品类别:
add_filter( 'woocommerce_add_to_cart_validation', 'only_one_product_category_allowed', 20, 3 );
function only_one_product_category_allowed( $passed, $product_id, $quantity) {
$parent_term_ids = $item_parent_term_ids = array(); // Initializing
// Loop through the current product category terms to get only parent main category term
foreach( get_the_terms( $product_id, 'product_cat' ) as $term ){
if( $term->parent > 0 ){
$parent_term_ids[] = $term->parent; // Set the parent product category
}
}
// Loop through cart items
foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item ){
// Loop through the cart item product category terms to get only parent main category term
foreach( get_the_terms( $cart_item['product_id'], 'product_cat' ) as $term ){
if( $term->parent > 0 ){
$item_parent_term_ids[] = $term->parent; // Set the parent product category
}
}
// Check if parent product categories don't match
if( ! array_intersect( $parent_term_ids, $item_parent_term_ids ) ){
// Displaying a custom notice
wc_add_notice( __('Only items from one product category are allowed in cart'), 'error' );
// Avoid add to cart
return false; // exit
}
}
return $passed;
}
代码进入活动子主题(或活动主题)的 function.php 文件。已测试并有效。
我如何将 Woocommerce 购物车配置为一次只允许其中一种产品类别?
以下代码将允许仅将来自一个产品类别的项目添加到购物车,避免添加到购物车并显示自定义通知:
add_filter( 'woocommerce_add_to_cart_validation', 'only_one_product_category_allowed', 20, 3 );
function only_one_product_category_allowed( $passed, $product_id, $quantity) {
// Getting the product categories term slugs in an array for the current product
$term_slugs = wp_get_post_terms( $product_id, 'product_cat', array('fields' => 'slugs') );
// Loop through cart items
foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item ){
// Check if the product category of the current product don't match with a cart item
if( ! has_term( $term_slugs, 'product_cat', $cart_item['product_id'] ) ){
// Displaying a custom notice
wc_add_notice( __('Only items from one product category are allowed in cart'), 'error' );
// Avoid add to cart
return false; // exit
}
}
return $passed;
}
代码进入活动子主题(或活动主题)的 function.php 文件。已测试并有效。
添加 (更新) - 相同但仅适用于 父产品类别:
add_filter( 'woocommerce_add_to_cart_validation', 'only_one_product_category_allowed', 20, 3 );
function only_one_product_category_allowed( $passed, $product_id, $quantity) {
$parent_term_ids = $item_parent_term_ids = array(); // Initializing
// Loop through the current product category terms to get only parent main category term
foreach( get_the_terms( $product_id, 'product_cat' ) as $term ){
if( $term->parent > 0 ){
$parent_term_ids[] = $term->parent; // Set the parent product category
}
}
// Loop through cart items
foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item ){
// Loop through the cart item product category terms to get only parent main category term
foreach( get_the_terms( $cart_item['product_id'], 'product_cat' ) as $term ){
if( $term->parent > 0 ){
$item_parent_term_ids[] = $term->parent; // Set the parent product category
}
}
// Check if parent product categories don't match
if( ! array_intersect( $parent_term_ids, $item_parent_term_ids ) ){
// Displaying a custom notice
wc_add_notice( __('Only items from one product category are allowed in cart'), 'error' );
// Avoid add to cart
return false; // exit
}
}
return $passed;
}
代码进入活动子主题(或活动主题)的 function.php 文件。已测试并有效。