2016-08-03 36 views
2

Ich habe ein Zahlungsgateway integriert, um Online-Zahlungen für mein Geschäft, das auf woocommerce läuft, zu akzeptieren. Alles funktioniert gut, aber ich habe festgestellt, dass Woocommerce den Bestellstatus standardmäßig auf wc-processing für alle online bezahlten Bestellungen ändert.Änderung des WooCommerce-Bestellstatus vom Zahlungsgateway

Laut meiner Shop-Funktionalität möchte ich alle online bezahlten Bestellungen zunächst in wc-on-hold Status.

Gibt es eine Möglichkeit, woocommerce den Auftragsstatus programmatisch auf wc-processing zu ändern?

Antwort

2

ja es gibt einen Weg, aber Sie müssen das Zahlungsplugin ändern oder Ihren eigenen Code hinzufügen, können Sie read this verstehen, wie Zahlungen funktionieren.

Nun WooCommerce Verwendung $order->payment_complete() Methode der fertige Bestellung behandeln, so dass Sie Ihre eigene Funktion müssen Haken um den Status zu ändern, here is the description of that method

Mit diesem Filter: woocommerce_payment_complete_order_status

+0

Sie haben Recht '$ order-> payment_complete() 'ändert den Bestellstatus in meinem Zahlungs-Plugin in' Verarbeitung '. Ich werde versuchen, stattdessen meine eigene Funktion zu platzieren und Sie wissen zu lassen. – krishna89

+0

Anstatt '$ order-> payment_complete()' habe ich den folgenden Code hinzugefügt und es hat wie erwartet funktioniert. '$ order-> update_status ('on-hold'); add_post_meta ($ order-> id, '_paid_date', aktuelle_Zeit ('mysql'), true); update_post_meta ($ order-> id, '_transaction_id', $ txnid); $ order-> reduce_order_stock(); ' – krishna89

2

Hier ist es ein Code-Schnipsel basiert auf diesem thread. Wir verwenden hier woocommerce_thankyou(das ausgelöst wird, nur nach Zahlung erfolgt ist) unsere Funktion einzuhaken, Umwandlung 'processing' Bestellungen Status 'on-hold':

add_action('woocommerce_thankyou', 'custom_woocommerce_paid_order_status', 10, 1); 
function custom_woocommerce_paid_order_status($order_id) { 
    if (! $order_id) { 
     return; 
    } 

    global $woocommerce; 
    $order = new WC_Order($order_id); 

    // 'processing' orders status are converted to 'on-hold'. 
    if (is_object($order) && $order->has_status('processing') { 
     $order->update_status('on-hold'); 
    } 

    return; 
} 

Sie können auch in Ihren Bedingungen zielen die Zahlungs-Gateways zum Beispiel umgehen wir hier drei Zahlungs-Gateways und zielen auf ein spezifisches Zahlungs-Gateway unter Verwendung von "your_payment_gateway" Slug:

add_action('woocommerce_thankyou', 'custom_woocommerce_paid_order_status', 10, 1); 
function custom_woocommerce_paid_order_status($order_id) { 
    if (! $order_id) { 
     return; 
    } 

    global $woocommerce; 
    $order = new WC_Order($order_id); 

    // Bypass orders 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; 
    } 

    // Target your "your_payment_gateway_slug" with this conditional 
    if (is_object($order) && get_post_meta($order->id, '_payment_method', true) == 'your_payment_gateway_slug' && $order->has_status('processing')) { 
     $order->update_status('on-hold'); 
    } 

    return; 
} 

Dieser Code-Schnipsel geht auf function.php-Datei Ihres aktiven untergeordneten Themas oder Themas.

Sie können ganz einfach alles, was Sie wollen, und die richtigen Haken Aufträge bezahlt sind woocommerce_thankyou

Referenzen:

+0

Vielen Dank, aber in Ihrer Lösung würde die Reihenfolge' on-hold' sein, wo sie bereits als 'processing' vom Gateway markiert wurde. Mein Problem ist, dass ich einen E-Mail-Benachrichtigungsfluss mit dem Bestellstatus verbunden habe, bei dem "On-Hold" von der Gateway-Verarbeitung aus der erste Status sein sollte. – krishna89