Php 仅允许在Woocommerce 3中购买一件物品

Php 仅允许在Woocommerce 3中购买一件物品,php,wordpress,woocommerce,cart,checkout,Php,Wordpress,Woocommerce,Cart,Checkout,在WooCommerce中是否有阻止购买多个项目的措施,或者阻止将多个项目添加到购物车中 我有不同的产品,但我想只允许每个结帐一个项目 我试图搜索解决方案,但这些现有解决方案无法正常工作,比如说,当用户未登录并将一个项目添加到购物车中,然后前往结帐并登录购物车时,以前在客户登录时添加的一个项目也加起来就是刚才添加的一个客户,现在购物车中有两种产品,这是一个问题,我使用的代码不能正常工作 function woo_custom_add_to_cart( $cart_item_data ) { gl

在WooCommerce中是否有阻止购买多个项目的措施,或者阻止将多个项目添加到购物车中

我有不同的产品,但我想只允许每个结帐一个项目

我试图搜索解决方案,但这些现有解决方案无法正常工作,比如说,当用户未登录并将一个项目添加到购物车中,然后前往结帐并登录购物车时,以前在客户登录时添加的一个项目也加起来就是刚才添加的一个客户,现在购物车中有两种产品,这是一个问题,我使用的代码不能正常工作

function woo_custom_add_to_cart( $cart_item_data ) {
global $woocommerce;
$woocommerce->cart->empty_cart();
return $cart_item_data;
}
add_filter( 'woocommerce_add_cart_item_data', 'woo_custom_add_to_cart' );
更新(如您评论中所述,使用第二种备选方案)

下面的代码将“添加到购物车”限制为添加多个购物车时显示错误消息的唯一项目。第二个功能将检查购物车项目,避免结帐,并在有多个项目时添加错误消息:

// Allowing adding only one unique item to cart and displaying an error message
add_filter( 'woocommerce_add_to_cart_validation', 'add_to_cart_validation', 10, 1 );
function add_to_cart_validation( $passed ) {
    if( ! WC()->cart->is_empty() ){
        wc_add_notice( __("You can add only one item to cart", "woocommerce" ), 'error' );
        $passed = false;
    }
    return $passed;
}

// Avoiding checkout when there is more than one item and displaying an error message
add_action( 'woocommerce_check_cart_items', 'check_cart_items' ); // Cart and Checkout
function check_cart_items() {
    if( sizeof( WC()->cart->get_cart() ) > 1 ){
        // Display an error message
        wc_add_notice( __("More than one items in cart is not allowed to checkout", "woocommece"), 'error' );
    }
}
代码进入活动子主题(或活动主题)的functions.php文件。测试和工作


1)尝试将第二个项目添加到购物车时:

2)如果购物车中有多个商品:

3)并且在签出时您将得到一个带有相同错误通知的空白页面:


要仅允许一个购物车项目删除在任何情况下都有效的任何其他项目,请执行以下操作:

// Removing on add to cart if an item is already in cart
add_filter( 'woocommerce_add_cart_item_data', 'remove_before_add_to_cart' );
function remove_before_add_to_cart( $cart_item_data ) {
    WC()->cart->empty_cart();
    return $cart_item_data;
}

// Removing one item on cart item check if there is more than 1 item in cart
add_action( 'template_redirect', 'checking_cart_items' ); // Cart and Checkout
function checking_cart_items() {
    if( sizeof( WC()->cart->get_cart() ) > 1 ){
        $cart_items_keys = array_keys(WC()->cart->get_cart());
        WC()->cart->remove_cart_item($cart_items_keys[0]);
    }
}

代码进入活动子主题(或活动主题)的functions.php文件。已测试并正常工作。

谢谢您的回复,但我不想在客户添加商品时显示任何我想要的消息,这将替换上一个商品,然后将客户重定向到购物车,即使有两个商品,也会自动删除上一个。@tatifox我在回答的末尾添加了一个更新,这将在不显示错误通知的情况下完成操作。