2016-03-30 3 views
3

WooCommerce kann die Versandart der Tabellenrate nicht priorisieren, also versuche ich es selbst zu tun, scheitere aber schrecklich.WooCommerce: Programmatisches Ändern der Standardversandmethode

Ich habe versucht, eine Aktion an dem Punkt hinzuzufügen, ich denke, es ist eingestellt, aber es funktioniert nicht. Hier ist, was ich habe versucht (Ich möchte nur die erste Versandart in dem verfügbaren Versandmethoden Array verwenden):

function reset_default_shipping_method() { 

    $available_methods = WC()->shipping->packages[0]['rates']; 
    $chosen_method = key($available_methods); 
    WC()->session->set('chosen_shipping_methods', $chosen_method); 

} 
add_action('woocommerce_shipping_method_chosen', 'reset_default_shipping_method'); 

Ich habe getestet $available_methods und $chosen_method und beide präsentieren wie erwartet (wenn in Seite laufen), aber , sobald ich es der Aktion woocommerce_shipping_method_chosen hinzufügen, scheint es nicht zu aktualisieren.

z.B. Wenn ich dies durch einen anderen Haken laufen:

function output_to_footer() { 
    if (current_user_can('administrator')) : 

     $current_method = WC()->session->get('chosen_shipping_methods'); 
     $available_methods = WC()->shipping->packages[0]['rates']; 
     $chosen_method = key($available_methods); 
     WC()->session->set('chosen_shipping_methods', $chosen_method);   

     print "\n".'-----'."\n"; 
     print_r($current_method); 
     print "\n".'-----'."\n"; 
     print_r($available_methods); 
     print "\n".'-----'."\n"; 
     print_r($chosen_method); 
     print "\n".'-----'."\n"; 

    endif; 
} 
add_action('print_footer_messages', 'output_to_footer'); 

Es ist wie alles aussieht tut, was es sollte, aber wenn ich es von der Aktion ausführen: woocommerce_shipping_method_chosen es alles zu tun, „erscheint“, aber der Versand Radio noch gesetzt zur alten Versandart?

----- 
Array 
(
    [0] => table_rate-5 : 70 
) 

----- 
Array 
(
    [table_rate-7 : 72] => WC_Shipping_Rate Object 
     (
      [id] => table_rate-7 : 72 
      [label] => Registered Australian Post (2 to 8 Business Days) 
      [cost] => 4.0909 
      [taxes] => Array 
       (
        [1] => 0.40909 
       ) 

      [method_id] => table_rate 
     ) 

    [table_rate-8 : 90] => WC_Shipping_Rate Object 
     (
      [id] => table_rate-8 : 90 
      [label] => Tracking and Freight Insurance 
      [cost] => 20.055881818182 
      [taxes] => Array 
       (
        [1] => 2.0055881818182 
       ) 

      [method_id] => table_rate 
     ) 

    [table_rate-5 : 70] => WC_Shipping_Rate Object 
     (
      [id] => table_rate-5 : 70 
      [label] => Nation-Wide Delivery (5 to 12 Business Days) 
      [cost] => 0 
      [taxes] => Array 
       (
       ) 

      [method_id] => table_rate 
     ) 

    [local_pickup] => WC_Shipping_Rate Object 
     (
      [id] => local_pickup 
      [label] => Local Pickup 
      [cost] => 0 
      [taxes] => Array 
       (
       ) 

      [method_id] => local_pickup 
     ) 

) 

----- 
table_rate-7 : 72 
-----

Ich habe den ganzen Tag daran gearbeitet und fühle mich einer Lösung nicht näher. Hoffentlich kann hier jemand helfen.

+0

Sie möchten, dass "Tabellenrate" immer die Standardversandmethode ist? Welche Version von WooCommerce verwenden Sie? Auch ein Hinweis, dass "woocommerce_shipping_chosen_method" ein Filter-Hook und kein Action-Hook ist. Verwenden Sie daher 'add_filter' anstelle von' add_action' und geben Sie Ihre Standardversandmethode –

+0

zurück. Tabellenrate ist die Standardversandmethode bereits - Ich möchte, dass Tabellenrate Option 1 die Standardeinstellung ist, nicht Tabellenrate Option 3. –

+0

PS. Ich bin zu sehr ein Neuling, um den Unterschied zwischen add_filter und add_action zu verstehen. Während ich höre, was du sagst, verstehe ich das nicht wirklich. –

Antwort

1

woocommerce_shipping_chosen_method ist ein Filterhaken kein Aktionshaken. Versuchen Sie, den folgenden Code

function reset_default_shipping_method($method, $available_methods) { 

    // If the shipping method has been chosen don't do anything 
    if (! empty($method)) { 
     return $method; 
    }   

    // add code to set 'Table Rate' as the default shipping method 

    $method = 'table_rate-5'; 

    return $method;  
} 

add_filter('woocommerce_shipping_chosen_method', 'reset_default_shipping_method', 10, 2); 

P. S: Ich habe table_rate-5 als Standard-Methode fest einprogrammiert Sie den Kern zu geben, so ändern Sie es auf die gewünschte ein. Im Idealfall müssen Sie Code schreiben, um zu sehen, ob die Methode, die Sie als Standard festlegen möchten, in $available_methods verfügbar ist und dann entsprechend arbeiten.

+0

Ich habe auch fest programmiert, um es zu erzwingen und es wird immer noch nicht aktualisiert. –

+0

Dies scheint ein Duplikat von http://stackoverflow.com/questions/36297571/woocommerce-how-to-set-a-defaulttable-rate-shipping-method – Lutrov

+0

Ich habe dies und die Methode ist nicht geändert –

1

Dies ist, was ich am Ende mit, die nach Bedarf bearbeitet:

/*=Use the shipping method filter to set the "selected" shipping method to 
* the first (default) method in the list 
**************************************************************************/ 
function oley_reset_default_shipping_method($method, $available_methods) { 

    $method = key($available_methods); 
    return $method; 

} 
add_filter('woocommerce_shipping_chosen_method', 'oley_reset_default_shipping_method', 10, 2); 

(Hinweis: Das funktionierte, weil die Versandrate Ich war eigentlich die erste in der Liste wollte aber einfach nicht standardmäßig ausgewählt wurde)