Created
October 1, 2019 13:20
-
-
Save ncyhere/3a74bbca84f15a981c5f334b32f6f089 to your computer and use it in GitHub Desktop.
Remove conditionally Woocommerce cart items based on a specific product
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
// Remove conditionally cart items based on a specific product (item) | |
add_action( 'woocommerce_before_calculate_totals', 'remove_cart_items_conditionally', 10, 1 ); | |
function remove_cart_items_conditionally( $cart ) { | |
// HERE define your specific product ID | |
$specific_product_id = 37; | |
if ( is_admin() && ! defined( 'DOING_AJAX' ) ) | |
return; | |
$cart_items = $cart->get_cart(); // Cart items array | |
$items_count = count($cart_items); // Different cart items count | |
// Continue if cart has at least 2 different cart items | |
if ( $items_count < 2 ) | |
return; | |
$last_item = end($cart_items); // Last cart item data array | |
$is_last_item = false; // Initializing | |
// Check if the specific product is the last added item | |
if ( in_array($specific_product_id, array( $last_item['product_id'], $last_item['variation_id'] ) ) ) { | |
$is_last_item = true; | |
} | |
// Loop through cart items | |
foreach ( $cart_items as $cart_item_key => $cart_item ) { | |
// Remove all others cart items when specific product ID is the last added to cart | |
if ( ! in_array($specific_product_id, array( $cart_item['product_id'], $cart_item['variation_id'] ) ) && $is_last_item ) { | |
$cart->remove_cart_item( $cart_item_key ); | |
} | |
// Remove the specific item when its is not the last added to cart | |
elseif ( in_array($specific_product_id, array( $cart_item['product_id'], $cart_item['variation_id'] ) ) && ! $is_last_item ) { | |
$cart->remove_cart_item( $cart_item_key ); | |
} | |
} | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment