允许继续在 Woocommerce 中结帐非混合定义的产品类别
Allow proceed to checkout for non mixed defined product categories in Woocommerce
在 woocommerce 中,当购物车商品来自混合产品类别时,我试图避免继续结帐……以下代码大部分按我的预期工作:
function sv_wc_prevent_checkout_for_category() {
// set the slug of the category that cannot be mixed from other categories
$category = 'test';
// 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;
}
if ( sv_wc_is_category_alone_in_cart( $category ) ) {
//Proceed to checkout
}
else { // otherwise post a notice to explain why checkout is blocked
wc_add_notice( sprintf( 'hi there! looks like your cart contains products from PREORDER and ONHAND categories, in order to proceed go to cart and dont mixed it.', $category_name ), 'error' ); }
}
add_action( 'woocommerce_check_cart_items', 'sv_wc_prevent_checkout_for_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;
}
但我遇到了一个问题:当购物车仅包含来自其他产品类别的商品时,它不允许继续结帐并显示错误消息。
继续:
- 如果购物车包含 "TEST" 产品类别:允许 "proceed to checkout"(工作)
- 如果购物车项目包含混合产品类别("TEST" 和其他):不允许 "proceed to checkout" 并显示错误消息(有效)
- 如果购物车仅包含其他产品类别(没有 "TEST" 产品类别):不允许 "proceed to checkout" 并显示错误消息(不工作 )
我怎样才能让它适用于其他产品类别,允许"proceed to checkout"?
感谢任何帮助。
尝试以下代码,不允许将您的 "test" 定义的产品类别与其他产品类别混合,显示错误通知并避免结帐:
add_action( 'woocommerce_check_cart_items', 'prevent_checkout_product_category_based' );
function prevent_checkout_product_category_based() {
// HERE set the product category slug
$category = 'test';
$found = $other = false; // Initializing variables
// Loop through cart items
foreach ( WC()->cart->get_cart() as $cart_item ) {
// checking for the specific product category
$term_slugs = wp_get_post_terms( $cart_item['product_id'], 'product_cat', array('fields' => 'slugs') );
if( in_array($category, $term_slugs) ) {
$found = true; // Targeted product category found
}
elseif( ! in_array($category, $term_slugs) && sizeof($term_slugs) > 0 ){
$other = true; // Other product categories found
}
}
// If the targeted product category is mixed with other product categories
if ( $found && $other ) {
// Display an error notice and avoid checkout
wc_add_notice( __( "The cart contains products from PREORDER and ONHAND categories and can't be mixed together, to allow checkout." ), 'error' );
}
}
代码进入您的活动子主题(或活动主题)的 function.php 文件。已测试并有效。
在 woocommerce 中,当购物车商品来自混合产品类别时,我试图避免继续结帐……以下代码大部分按我的预期工作:
function sv_wc_prevent_checkout_for_category() {
// set the slug of the category that cannot be mixed from other categories
$category = 'test';
// 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;
}
if ( sv_wc_is_category_alone_in_cart( $category ) ) {
//Proceed to checkout
}
else { // otherwise post a notice to explain why checkout is blocked
wc_add_notice( sprintf( 'hi there! looks like your cart contains products from PREORDER and ONHAND categories, in order to proceed go to cart and dont mixed it.', $category_name ), 'error' ); }
}
add_action( 'woocommerce_check_cart_items', 'sv_wc_prevent_checkout_for_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;
}
但我遇到了一个问题:当购物车仅包含来自其他产品类别的商品时,它不允许继续结帐并显示错误消息。
继续:
- 如果购物车包含 "TEST" 产品类别:允许 "proceed to checkout"(工作)
- 如果购物车项目包含混合产品类别("TEST" 和其他):不允许 "proceed to checkout" 并显示错误消息(有效)
- 如果购物车仅包含其他产品类别(没有 "TEST" 产品类别):不允许 "proceed to checkout" 并显示错误消息(不工作 )
我怎样才能让它适用于其他产品类别,允许"proceed to checkout"?
感谢任何帮助。
尝试以下代码,不允许将您的 "test" 定义的产品类别与其他产品类别混合,显示错误通知并避免结帐:
add_action( 'woocommerce_check_cart_items', 'prevent_checkout_product_category_based' );
function prevent_checkout_product_category_based() {
// HERE set the product category slug
$category = 'test';
$found = $other = false; // Initializing variables
// Loop through cart items
foreach ( WC()->cart->get_cart() as $cart_item ) {
// checking for the specific product category
$term_slugs = wp_get_post_terms( $cart_item['product_id'], 'product_cat', array('fields' => 'slugs') );
if( in_array($category, $term_slugs) ) {
$found = true; // Targeted product category found
}
elseif( ! in_array($category, $term_slugs) && sizeof($term_slugs) > 0 ){
$other = true; // Other product categories found
}
}
// If the targeted product category is mixed with other product categories
if ( $found && $other ) {
// Display an error notice and avoid checkout
wc_add_notice( __( "The cart contains products from PREORDER and ONHAND categories and can't be mixed together, to allow checkout." ), 'error' );
}
}
代码进入您的活动子主题(或活动主题)的 function.php 文件。已测试并有效。