限制Woocommerce中的购物车数量

时间:2017-09-01 19:48:02

标签: php wordpress woocommerce cart product-quantity

我正在使用Woocommerce并需要以下内容:

  1. 由于产品销往其他国家,而该国家的海关仅允许总数为6,因此我需要阻止客户订购超过6件商品(产品)。

  2. 6是项目或产品的总和。客户可订购1件产品,数量为6件或2件产品,每件3件。海关只允许总数为6。

  3. 如果购物车中有超过6件商品,则会出现警告并阻止客户继续结帐。

  4. 是否可以将购物车商品限制为6并在超出此限额时显示消息?

2 个答案:

答案 0 :(得分:9)

如果要限制购物车项目,则需要检查和控制2个操作:

  • 将产品添加到购物车时(在商店页面和产品页面中)
  • 在购物车页面中更新数量时

使用隐藏在 woocommerce_add_to_cart_validation 过滤器挂钩中的自定义功能,您可以将购物车项目限制为最多6个,并在超出此限制时显示自定义消息:

// Checking and validating when products are added to cart
add_filter( 'woocommerce_add_to_cart_validation', 'only_six_items_allowed_add_to_cart', 10, 3 );

function only_six_items_allowed_add_to_cart( $passed, $product_id, $quantity ) {

    $cart_items_count = WC()->cart->get_cart_contents_count();
    $total_count = $cart_items_count + $quantity;

    if( $cart_items_count >= 6 || $total_count > 6 ){
        // Set to false
        $passed = false;
        // Display a message
         wc_add_notice( __( "You can’t have more than 6 items in cart", "woocommerce" ), "error" );
    }
    return $passed;
}

使用隐藏在 woocommerce_update_cart_validation 过滤器挂钩中的自定义功能,您可以控制购物车商品数量更新到您的6购物车商品限制,并在此限制为时显示自定义消息超出:

// Checking and validating when updating cart item quantities when products are added to cart
add_filter( 'woocommerce_update_cart_validation', 'only_six_items_allowed_cart_update', 10, 4 );
function only_six_items_allowed_cart_update( $passed, $cart_item_key, $values, $updated_quantity ) {

    $cart_items_count = WC()->cart->get_cart_contents_count();
    $original_quantity = $values['quantity'];
    $total_count = $cart_items_count - $original_quantity + $updated_quantity;

    if( $cart_items_count > 6 || $total_count > 6 ){
        // Set to false
        $passed = false;
        // Display a message
         wc_add_notice( __( "You can’t have more than 6 items in cart", "woocommerce" ), "error" );
    }
    return $passed;
}

代码放在活动子主题(或主题)的function.php文件中,或者放在任何插件文件中。

此代码经过测试并正常运行

答案 1 :(得分:3)

您可以在验证要添加到购物车的产品时添加其他验证参数。 woocommerce_add_to_cart_validation期望返回truefalse值,具体取决于产品是否可以添加到购物车中:

/**
 * When an item is added to the cart, check total cart quantity
 */
function so_21363268_limit_cart_quantity( $valid, $product_id, $quantity ) {

    $max_allowed = 6;
    $current_cart_count = WC()->cart->get_cart_contents_count();

    if( ( $current_cart_count > $max_allowed || $current_cart_count + $quantity > $max_allowed ) && $valid ){
        wc_add_notice( sprint( __( 'Whoa hold up. You can only have %d items in your cart', 'your-plugin-textdomain' ), $max ), 'error' );
        $valid = false;
    }

    return $valid;

}
add_filter( 'woocommerce_add_to_cart_validation', 'so_21363268_limit_cart_quantity', 10, 3 );