Last active
February 1, 2024 12:32
-
-
Save viniciusrtf/b49403b5f87dcd7699c1 to your computer and use it in GitHub Desktop.
WooCommerce Hook: Empty cart before adding a new product to cart WITHOUT throwing woocommerce_cart_is_empty
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Hook: Empty cart before adding a new product to cart WITHOUT throwing woocommerce_cart_is_empty | |
*/ | |
add_action ('woocommerce_add_to_cart', 'lenura_empty_cart_before_add', 0); | |
function lenura_empty_cart_before_add() { | |
global $woocommerce; | |
// Get 'product_id' and 'quantity' for the current woocommerce_add_to_cart operation | |
if (isset($_GET["add-to-cart"])) { | |
$prodId = (int)$_GET["add-to-cart"]; | |
} else if (isset($_POST["add-to-cart"])) { | |
$prodId = (int)$_POST["add-to-cart"]; | |
} else { | |
$prodId = null; | |
} | |
if (isset($_GET["quantity"])) { | |
$prodQty = (int)$_GET["quantity"] ; | |
} else if (isset($_POST["quantity"])) { | |
$prodQty = (int)$_POST["quantity"]; | |
} else { | |
$prodQty = 1; | |
} | |
error_log('prodID: ' . $prodId); // FIXME | |
error_log('prodQty: ' . $prodQty); // FIXME | |
// If cart is empty | |
if ($woocommerce->cart->get_cart_contents_count() == 0) { | |
// Simply add the product (nothing to do here) | |
// If cart is NOT empty | |
} else { | |
$cartQty = $woocommerce->cart->get_cart_item_quantities(); | |
$cartItems = $woocommerce->cart->cart_contents; | |
// Check if desired product is in cart already | |
if (array_key_exists($prodId,$cartQty)) { | |
// Then first adjust its quantity | |
foreach ($cartItems as $k => $v) { | |
if ($cartItems[$k]['product_id'] == $prodId) { | |
$woocommerce->cart->set_quantity($k,$prodQty); | |
} | |
} | |
// And only after that, set other products to zero quantity | |
foreach ($cartItems as $k => $v) { | |
if ($cartItems[$k]['product_id'] != $prodId) { | |
$woocommerce->cart->set_quantity($k,'0'); | |
} | |
} | |
} | |
} | |
} | |
?> |
Please how do I install this plugin, or to add this code.
I downloaded the zip file, went to my plugin page and click add new, upload, install. But I got the following error...
Unpacking the package…
Installing the plugin…
The package could not be installed. No valid plugins were found.
Plugin install failed.
please help me out.
Thanks a lot!
great post!!! thanks
Excellent. Thanks alot
This is an extremely old code snippet (10+ years old). Be careful.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Thank you! This is perfect. We use the /checkout/?add-to-cart=123 links for one-click checkout for our clients. However, if their order fails for whatever reason or they simply decide to abandon the cart only to get back to it later, they'll usually just click once again the /checkout/?add-to-cart=123 button to start all over effectively adding additional copy to their cart. Surprisingly, many of them never notice additional product in the cart until they receive the 'Order is complete' email. This is a perfect solution for us as it prevents this from happening. Thanks a bunch! We installed this as a simple plugin and it's working flawlessly.