Prevent gift cards from counting towards the Free Shipping amount

Some stores will offer Free Shipping once a certain amount has been spent.

You can prevent the purchase of a gift cards from counting towards the order total when calculating free shipping. Follow these steps:

1. Download the free Code Snippets plugin: https://wordpress.org/plugins/code-snippets/
2. Create a Snippet with the following code:

function woocommerce_cart_get_subtotal_minus_giftcards( $subtotal ) {
  $giftcard_subtotal = 0;

  foreach( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
    $product = wc_get_product( $cart_item['product_id'] );
    if ( is_a( $product, 'WC_Product_PW_Gift_Card' ) ) {
      $giftcard_subtotal += $cart_item['line_subtotal'];
    }
  }

  $subtotal -= $giftcard_subtotal;

  return $subtotal;
}

function free_shipping_recalculation( $is_available, $package, $wc_shipping_method ) {
  if ( true === $is_available ) {
    remove_filter( 'woocommerce_shipping_free_shipping_is_available', 'free_shipping_recalculation', 10, 3 );
    add_filter( 'woocommerce_cart_get_subtotal', 'woocommerce_cart_get_subtotal_minus_giftcards' );

    $is_available = $wc_shipping_method->is_available( $package );

    add_filter( 'woocommerce_shipping_free_shipping_is_available', 'free_shipping_recalculation', 10, 3 );
    remove_filter( 'woocommerce_cart_get_subtotal', 'custom_woocommerce_cart_get_subtotal' );
  }

  return $is_available;
}
add_filter( 'woocommerce_shipping_free_shipping_is_available', 'free_shipping_recalculation', 10, 3 );
Skip to content