问题
I can't imagine how to verify if the cart has some products inside, or not. I just need to allow ONE product for the checkout.
Here is the code used in class-wc-cart.php to prevent products to be added if THE SAME product is already in the cart, and I'm sure should be pretty similar, but I'm missing some WP variables to define any kind of product. I tried also with this code, but it doesn't work in functions.php (no, I'm not using child themes).
if ( $product_data->is_sold_individually() ) {
$in_cart_quantity = $cart_item_key ? $this->cart_contents[ $cart_item_key ]['quantity'] : 0;
// If it's greater than 0, it's already in the cart
if ( $in_cart_quantity > 0 ) {
wc_add_notice( sprintf(
'<a href="%s" class="button wc-forward">%s</a> %s',
$this->get_cart_url(),
__( 'View Cart', 'woocommerce' ),
sprintf( __( 'You cannot add another "%s" to your cart.', 'woocommerce' ), $product_data->get_title() )
), 'error' );
return false;
}
}
Thank you.
回答1:
Don't make changes directly in woocommerce core file because when you update plugin, might your code lost.
Add following code into functions.php and it will add only one product into cart:
add_filter( 'woocommerce_add_to_cart_validation', 'woocommerce_add_cart_item_data_custom' );
function woocommerce_add_cart_item_data_custom( $cart_item_data ) {
global $woocommerce;
if($woocommerce->cart->cart_contents_count > 0){
wc_add_notice(
__( 'You cannot add another product to your cart.', 'woocommerce' ));
return false;
}
}
回答2:
There is a filter/hook that runs before an item is added to the cart as each product goes through validation before it is added.
So when validating a product, we can check if the item if there are already items in the cart and clears those (if the current item is able to be added) and adds an error message.
/**
* When an item is added to the cart, remove other products
*/
function so_27030769_maybe_empty_cart( $valid, $product_id, $quantity ) {
if( ! empty ( WC()->cart->get_cart() ) && $valid ){
WC()->cart->empty_cart();
wc_add_notice( 'Whoa hold up. You can only have 1 item in your cart', 'error' );
}
return $valid;
}
add_filter( 'woocommerce_add_to_cart_validation', 'so_27030769_maybe_empty_cart', 10, 3 );
来源:https://stackoverflow.com/questions/27030769/checkout-with-a-single-product-verify-if-any-product-is-in-the-cart-and-give-e