2016-05-01 6 views
4

Ich muss einen Auftragsstatus für abgeschlossen nach Erhalt der Zahlung automatisch ändern, aber nur, wenn der Auftragsstatus "Verarbeitung" ist. Ich habe dieses Snippet gefunden, was den Status des Auftrags in jedem Fall bestätigt, aber meine Zahlungs-Plugins nach erfolgreichen Zahlungsänderungen gibt Daten zurück und ändert den Bestellstatus für "Verarbeitung". Ich möchte es nach Erfolg in "abgeschlossen" ändern und ändere es nicht, wenn der Status nicht "Verarbeitung" ist. Das Hauptproblem, das ich traf, ist ich weiß nicht, wie man die empfangene Statusreihenfolge erhält.So überprüfen Sie den Bestellstatus nach der Zahlung in WooCommerce

Hier ist mein Code:

add_filter('woocommerce_thankyou', 'update_order_status', 10, 2); 

function update_order_status($order_id) { 
    $order = new WC_Order($order_id); 
    $order_status = $order->get_status();  
    if ('processing' == $order_status) {  
     $order->update_status('completed');  
    }  
//return $order_status; 
} 

ich es dachte schon aus. Hier funktioniert Code:

add_filter('woocommerce_thankyou', 'update_order_status', 10, 1); 

function update_order_status($order_id) { 
    if (!$order_id){ 
    return; 
    } 
    $order = new WC_Order($order_id); 
    if ('processing' == $order->status) { 
    $order->update_status('completed'); 
    } 
    return; 
} 
+0

I edited Ihre Post für die Formatierung des Codes und es gibt einen Tippfehler. $ oder_status – dinotom

+0

danke, Tippfehler korrigiert auch. –

Antwort

2

Die Funktion woocommerce_thankyou ist eine Aktion. Sie müssen die Funktion add_action verwenden, um sich einzuloggen. Ich würde empfehlen, die Priorität auf 20 zu ändern, damit andere Plugins/Codeänderungen vor update_order_status angewendet werden können.

add_action('woocommerce_thankyou', 'update_order_status', 20); 
3

Aktualisiert:Kompatibilität mit WooCommerce Version 3+

Basierend auf: WooCommerce - Auto Complete paid virtual Orders (depending on Payment methods), werden Sie auch alle Zahlungsmethoden in conditionals handhaben können:

// => not a filter (an action hook) 
add_action('woocommerce_thankyou', 'custom_woocommerce_auto_complete_paid_order', 10, 1); 
function custom_woocommerce_auto_complete_paid_order($order_id) { 
    if (! $order_id) 
     return; 

    $order = new WC_Order($order_id); 

    // No updated status for orders delivered with Bank wire, Cash on delivery and Cheque payment methods. 
    if (get_post_meta($order_id, '_payment_method', true) == 'bacs' || get_post_meta($order_id, '_payment_method', true) == 'cod' || get_post_meta($order_id, '_payment_method', true) == 'cheque') { 
     return; 
    } 
    // "completed" updated status for paid "processing" Orders (with all others payment methods) 
    elseif ($order->has_status('processing')) { 
     $order->update_status('completed'); 
    } 
    else { 
     return; 
    } 
} 
+0

Vielen Dank, aber ich muss nicht wirklich die Zahlungsmethode überprüfen, ich habe nur eine. Aber ich hatte ein neues Problem. Ich möchte den Auftragsstatus nicht nach dem Zugriff auf die Dankeseite ändern, sondern in dem Moment, in dem der Status in 'Verarbeitung' geändert wird. Manchmal kommt es vor, dass der Kunde nicht zu meinem Geschäft zurückkehrt, nachdem die Zahlung akzeptiert wurde. Hast du eine Ahnung? –