2016-05-31 14 views
1

私たちの店では、UPSとUSPSの発送方法があります。
私たちが販売する製品はすべて形状とサイズが異なりますので、テーブルレートオプションではなくAPIを使用する必要があります。状態に基づくWooCommerce制限配送方法

ユーザーがAK、HI、PR、GU、AS、VI、またはUMから郵便番号を入力したときにのみ、USPSレートが表示されるようにします。私は既に条件付き配送と支払い方法を試しましたが、うまくいかないようです。私が間違っていないなら、それはチェックアウト時に返される料金やオプションのためにとにかく働くだけで、私が必要とするカート用ではありません。

私はこの質問が尋ねられたところで多くの異なるページを閲覧し、回答に一致するようにfunctions.phpファイルを編集しようとしましたが、すべての回答が古くなっているようです。

私は見つけることができる最も近い答えは下のリンクでオプション#2である、しかし、それは動作しません、私はそれを試してみてください。http://support.wooforce.com/hc/en-us/articles/207515625-Hiding-disabling-a-shipping-service

ここで私はそのリンクから、私が持っていることをカスタマイズしているコードがありますそれを機能させるようにしました。アラスカ、ハワイ、プエルトリコ、グアム、アメリカンサモア、バージン諸島、マイナーアイランド以外の州ごとにメソッドを除外したいとします。

ご協力いただきましてありがとうございます。私の理解あたりとして

add_filter('woocommerce_package_rates', 'wf_hide_undesired_service_for_required_states', 10, 2); 

function wf_hide_undesired_service_for_required_states($rates, $package) 
{ 
    $exclude = array(
     'wf_shipping_usps:D_PRIORITY_MAIL' => array(
     'AL', 'AR', 'AZ', 'CA', 'CO', 'CT', 'DC', 'DE', 'FL', 'GA', 'IA', 'ID', 'IL', 'IN', 'KS', 'KY', 'LA', 'MA', 'MD', 'ME', 'MI', 'MN', 'MO', 'MS', 'MT', 'NC', 'ND', 'NE', 'NH', 'NJ', 'NM', 'NV', 'NY', 'OH', 'OK', 'OR', 'PA', 'RI', 'SC', 'SD', 'TN', 'TX', 'UT', 'VA', 'VT', 'WA', 'WI', 'WV', 'WY' 
     ) 
    ); 
    if (is_array($exclude)) { 
     foreach($exclude as $shipping_method => $excluded_states) { 
      if (in_array(WC()->customer->shipping_state, $excluded_states)) { 
       unset($rates[$shipping_method]); 
      } 
     } 
    } 

    return $rates; 
} 

答えて

0

、あなたは顧客が状態AK、HI、PR、GU、AS、VI、またはUMを選択した場合にのみ、USPSのリアルタイムレートを表示したいです。

解決策をここで詳しく説明します。 http://www.xadapter.com/2016/06/17/woocommerce-filter-shipping-methods-based-on-state/

以下のコードスニペットは、WooForce USPS Shipping Pluginの変更なしで動作します。他のベンダーのWooCommerce USPSプラグインを使用している場合は、変数$eligible_services_for_states_listの要素をそのプラグインに関連する適切な値に変更することにより、WooCommerce USPSプラグインを使用することができます。

add_filter('woocommerce_package_rates', 'xa_show_shipping_method_based_on_state', 10, 2); 

function xa_show_shipping_method_based_on_state($available_shipping_methods, $package) { 

    $states_list = array('AK', 'HI', 'PR', 'GU', 'AS', 'VI', 'UM'); 

    $eligible_services_for_states_list = array(
      'wf_shipping_usps:flat_rate_box_priority', 
      'wf_shipping_usps:flat_rate_box_express', 
      'wf_shipping_usps:D_FIRST_CLASS', 
      'wf_shipping_usps:D_EXPRESS_MAIL', 
      'wf_shipping_usps:D_STANDARD_POST', 
      'wf_shipping_usps:D_MEDIA_MAIL', 
      'wf_shipping_usps:D_LIBRARY_MAIL', 
      'wf_shipping_usps:D_PRIORITY_MAIL', 
      'wf_shipping_usps:I_EXPRESS_MAIL', 
      'wf_shipping_usps:I_PRIORITY_MAIL', 
      'wf_shipping_usps:I_GLOBAL_EXPRESS', 
      'wf_shipping_usps:I_FIRST_CLASS', 
      'wf_shipping_usps:I_POSTCARDS',   
     ); 

    // Basically, below code will reset shipping services if the shipping 
    // state is other than defined states_list. 
    if (!in_array(WC()->customer->shipping_state, $states_list)) { 
     foreach ($eligible_services_for_states_list as &$value) { 
      unset($available_shipping_methods[$value]);  
     } 
    } 

    return $available_shipping_methods; 
} 

希望します。

関連する問題