2016-09-29 4 views
2

Ich versuche, bestimmte E-Mails dynamisch zur neuen Empfängerliste hinzuzufügen, basierend auf der Versandadresse des Kunden.WooCommerce E-Mail-Empfänger je nach Lieferland ändern

Wir verwenden PayPal, um Zahlungen von unserer Website über n iframe zu verarbeiten.

Das Problem ist, dass der Filter, der die E-Mail-Schalter verwendet das Schiff zu Kunden ansprechen, die ich von einem von zwei Orten bin immer:

$woocommerce->customer->shipping_country

$woocommerce->session->customer['shipping_country'];

Vor Ort kann ich nicht Habe Paypal Advanced aktiviert, also beim Test wird es funktionieren. Auf dem Produktionsserver verwenden wir es jedoch, und hier tritt das Problem auf. Diese globalen Objekte sind leer, wenn der Filter versucht, den Versandauftrag des Kunden zu übernehmen. Das führt mich zu der Annahme, dass die aktuelle Seite nach Abschluss der PayPal-Bestellung auf die Dankeseite mit den entsprechenden Informationen umgeleitet wird. Die globalen Variablen sind jedoch leer, wenn die Filter ausgeführt werden.

Mit diesem gesagt, wie bekomme ich die Lieferadresse Informationen des Kunden, wenn woocommerce_email_recipient_new_order läuft?

+1

Können Sie Ihren Filtercode anzeigen? – Jrod

Antwort

4

Sobald die Bestellung aufgegeben wird, müssen Sie Informationen (z. B. Versandland) vom Objekt $order abrufen und nicht von der Sitzung. Die Reihenfolge wird an das woocommerce_email_recipient_new_order Filter here als zweites Argument übergeben.

Hier ist ein Beispiel dafür, wie Sie den Auftrag Objekt in den Filter Rückruf passieren würde und es verwenden, um den Empfänger zu ändern:

function so_39779506_filter_recipient($recipient, $order){ 

    // get the shipping country. $order->get_shipping_country() will be introduced in WC2.7. $order->shipping_country is backcompatible 
    $shipping_country = method_exists($order, 'get_shipping_country')) ? $order->get_shipping_country() : $order->shipping_country; 

    if($shipping_country == 'US'){ 

     // Use this to completely replace the recipient. 
     $recipient = '[email protected]'; 

     // Use this instead IF you wish to ADD this email to the default recipient. 
     //$recipient .= ', [email protected]'; 
    } 
    return $recipient; 
} 
add_filter('woocommerce_email_recipient_new_order', 'so_39779506_filter_recipient', 10, 2); 

Edited Code kompatibel mit WooCommerce 2.7 und früheren Versionen zu machen.

+0

Ihre Antwort ist diejenige, die mich zur Lösung geführt hat, obwohl das funktioniert: '$ order-> shipping_country', nicht die Funktion. Ich habe in den API-Dokumenten keine solche Funktion gesehen. Außerdem wusste ich nicht, dass Sie WC-Objekte in Aktionsfunktionen wie diese übergeben können. Sehr cool! –

+1

Sorry, ich denke, das kommt in WC 2.7. Sie können es in der [Quelle] (https://github.com/woocommerce/woocommerce/blob/master/includes/class-wc-order.php#L719) sehen. Das direkte Abrufen von Objekteigenschaften wird veraltet sein. Berücksichtigen Sie dies beim Upgrade. – helgatheviking

+0

@LoicTheAztec danke, behoben! – helgatheviking

Verwandte Themen