2016-05-31 13 views
1

In unserem Geschäft haben wir die UPS und USPS Versandarten.
Die Produkte, die wir verkaufen, haben alle unterschiedlichen Formen und Größen, daher müssen wir die APIs und keine Tabellenratenoptionen verwenden.WooCommerce Limit Versandmethode basierend auf Zustand

Ich möchte nur, dass die USPS-Raten angezeigt werden, wenn der Benutzer eine Postleitzahl von AK, HI, PR, GU, AS, VI oder UM eingibt. Ich habe bereits die Conditional Shipping and Payments-Methode ausprobiert, aber es scheint nicht zu funktionieren. Wenn ich nicht falsch liege, würde das sowieso nur für die Raten/Optionen funktionieren, die an der Kasse zurückgegeben werden und nicht für den Wagen, den ich brauche.

Ich habe viele verschiedene Seiten online durchsucht, wo diese Frage gestellt wurde, und habe versucht, die Datei zu bearbeiten, um die Antworten zu vergleichen, aber alle Antworten scheinen veraltet zu sein.

Die nächste Antwort, die ich finden kann, ist auf Option # 2 auf den Link unten, aber es funktioniert nicht, wenn ich es versuchen: http://support.wooforce.com/hc/en-us/articles/207515625-Hiding-disabling-a-shipping-service

Hier ist der Code, den ich von diesem Link angepasst haben und dass ich versuchte es zum Laufen zu bringen. Beachten Sie, dass ich die Methode für jeden Bundesstaat außer Alaska, Hawaii, Puerto Rico, Guam, Amerikanisch-Samoa, Jungferninseln und den kleineren Inseln ausschließen möchte.

Jede Hilfe ist willkommen!

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; 
} 

Antwort

0

Wie pro mein Verständnis, dass Sie nur wollen die USPS Realtime Raten zeigen, wenn Kunden den Zustand AK wählt, HALLO, PR, GU, AS, VI oder UM.

Lösung wird hier im Detail erklärt. http://www.xadapter.com/2016/06/17/woocommerce-filter-shipping-methods-based-on-state/

Das folgende Code-Snippet funktioniert ohne Änderungen für WooForce USPS Shipping Plugin. Wenn Sie das WooCommerce-USPS-Plugin eines anderen Herstellers verwenden, können Sie das ändern, indem Sie die Elemente der Variablen $eligible_services_for_states_list in die entsprechenden für das Plugin relevanten Werte ändern.

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; 
} 

Ich hoffe, es hilft.

Verwandte Themen