Skip to content

Instantly share code, notes, and snippets.

  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
What would you like to do?
Remove WooCommerce checkout add-ons if all products in cart are in a category
<?php // only copy if needed
// Remove add-ons if all products in the cart are in the "Gift box" category (and thus gift-wrapped already)
function sv_remove_checkout_add_ons_for_giftboxes() {
if ( function_exists( 'wc_checkout_add_ons' ) ) {
// holds checks for all products in cart to see if they're in our category
$category_checks = array();
// check each cart item for our category
foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
$product = $cart_item['data'];
// replace 'gift_box' with your category's slug
$product_in_cat = has_term( 'gift_box', 'product_cat', $product->id );
array_push( $category_checks, $product_in_cat );
// if all items are in this category, remove the checkout add-ons
if ( ! in_array( false, $category_checks, true ) ) {
// get the add-ons current position so we know where to remove them from
$position = apply_filters( 'wc_checkout_add_ons_position', get_option( 'wc_checkout_add_ons_position', 'woocommerce_checkout_after_customer_details' ) );
remove_action( $position, array( wc_checkout_add_ons()->get_frontend_instance(), 'render_add_ons' ), 20 );
add_action( 'woocommerce_before_checkout_form', 'sv_remove_checkout_add_ons_for_giftboxes' );
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment