2017-04-05 14 views
1

特定の商品がショッピングカートに入っていれば、送料無料でお届けします。私はそれがカート内の唯一のアイテムであれば動作するメソッドを持っていますが、カートに何かを追加するとすぐには機能しません。この製品には送料無料の送料が含まれています。 tl; drカートに他のアイテムを追加しても、これを動作させる方法を教えてください。Woocommerce配送クラスがカートに入っている場合は、全ての商品用の送料無料

出典:特定のクラス

if (! class_exists('WC_Enable_Free_Shipping')) : 
class WC_Enable_Free_Shipping { 
    protected static $instance = null; 
    private function __construct() { 
     // add our check 
     add_filter('woocommerce_shipping_free_shipping_is_available', array($this, 'patricks_enable_free_shipping'), 20); 
    } 
    /** 
    * Enable free shipping for orders with products that have the free-shipping shipping class slug 
    */ 
    public function patricks_enable_free_shipping($is_available) { 
     global $woocommerce; 
     // set the shipping classes that are eligible 
     $eligible = array('free-shipping'); 
     // get cart contents 
     $cart_items = $woocommerce->cart->get_cart(); 
     // loop through the items checking to make sure they all have the right class 
     foreach ($cart_items as $key => $item) { 
      if (! in_array($item['data']->get_shipping_class(), $eligible)) { 
       // this item doesn't have the right class. return default availability 
       return $is_available; 
      } 
     } 
     // nothing out of the ordinary return true 
     return true; 
    } 
    /** 
    * Return an instance of this class. 
    */ 
    public static function get_instance() { 
     // If the single instance hasn't been set, set it now. 
     if (null == self::$instance) { 
      self::$instance = new self; 
     } 
     return self::$instance; 
    } 
} 
add_action('init', array('WC_Enable_Free_Shipping', 'get_instance'), 0); 
endif; 

ためhttps://www.speakinginbytes.com/2014/12/enable-free-shipping-per-product/

送料無料、送料無料は

function my_hide_shipping_when_free_is_available($rates) { 
    $free = array(); 
    foreach ($rates as $rate_id => $rate) { 
     if ('free_shipping' === $rate->method_id) { 
      $free[ $rate_id ] = $rate; 
      break; 
     } 
    } 
    return ! empty($free) ? $free : $rates; 
} 
add_filter('woocommerce_package_rates', 'my_hide_shipping_when_free_is_available', 100); 

答えて

0

利用可能な場合、他の配送方法を非表示にあなたは "woocommerce_available_shipping_method" フックを試すことができます。このコードはあなたを助けます:

add_filter('woocommerce_available_shipping_methods', 'custom_shipping_methods'); 
function custom_shipping_methods($available_methods) { 

    // Check your cart product's logic here 
    foreach (WC()->cart->cart_contents AS $item) { 

     // If something in cart then just keep free shipping in available method 
     // That logic goes here 
    } 

    // return available methods 
    return $available_methods; 
} 
関連する問題