2016-06-16 8 views
0

私はすべての手がかりを探していますが、今まで見つかったことは動作しません。 の商品が配送クラスに含まれている場合は、配送方法を隠したいと思っています。私はカートにクラスがあるかどうかを隠す方法を見つけました。それを調整して私のために働かせることはできません。配送クラス "Cannabis"がカートにない場合、カートがローカル配送を隠すように誰でもこれを変更できますか?配送方法が表示されない場合配送方法を隠す

// Hides other shipping methods if cannabis is in cart 
add_filter('woocommerce_package_rates',  'hide_shipping_method_when_shipping_class_product_is_in_cart', 10, 2); 

function hide_shipping_method_when_shipping_class_product_is_in_cart($available_shipping_methods, $package) 
{ 

    // Shipping class IDs that need the method removed 

    $shipping_class_ids = array(
     31   
    ); 
    $shipping_services_to_hide = array(
     'wf_shipping_usps:D_PRIORITY_MAIL', 
     'wf_shipping_usps:D_EXPRESS_MAIL', 
     'wf_shipping_usps:flat_rate_box_priority' 
    ); 
    $shipping_class_exists = false; 
    foreach(WC()->cart->cart_contents as $key => $values) { 
     if (in_array($values['data']->get_shipping_class_id() , $shipping_class_ids)) { 
      $shipping_class_exists = true; 
      break; 
     } 
    } 

    if ($shipping_class_exists) { 
     foreach($shipping_services_to_hide as & $value) { 
      unset($available_shipping_methods[$value]); 
     } 
    } 

    return $available_shipping_methods; 
} 

答えて

0

カートに特定の出荷クラスの商品がない場合、配送方法を隠す更新されたコードです。 詳細はrefer this articleをご覧ください。

// Hides other shipping methods if items of specific Shipping Class is NOT in cart 
add_filter('woocommerce_package_rates',  'xa_hide_shipping_method_when_shipping_class_product_is_in_cart', 10, 2); 

function xa_hide_shipping_method_when_shipping_class_product_is_in_cart($available_shipping_methods, $package) 
{ 

    // Shipping class IDs that need the method removed 

    $shipping_class_ids = array(
     31   
    ); 
    $shipping_services_to_hide = array(
     'wf_shipping_usps:D_PRIORITY_MAIL', 
     'wf_shipping_usps:D_EXPRESS_MAIL', 
     'wf_shipping_usps:flat_rate_box_priority' 
    ); 
    $shipping_class_exists = false; 
    foreach(WC()->cart->cart_contents as $key => $values) { 
     if (in_array($values['data']->get_shipping_class_id() , $shipping_class_ids)) { 
      $shipping_class_exists = true; 
      break; 
     } 
    } 

    // Negation of shipping class exists. 
    if (!$shipping_class_exists) { 
     foreach($shipping_services_to_hide as & $value) { 
      unset($available_shipping_methods[$value]); 
     } 
    } 

    return $available_shipping_methods; 
} 
関連する問題