2016-09-29 96 views
2

我試圖動態地添加某些電子郵件到基於客戶收貨地址的新秩序收件人列表。我們使用貝寶WooCommerce更改電子郵件收件人根據航運國家

先進,經n iframe來處理從我們的網站內付款。

的問題是,切換郵件過濾器使用客戶的收貨地址,我正在從兩個地方獲得:

​​

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

本地我不有貝寶先進的激活,所以當在那裏測試它會工作。但是在生產服務器上我們正在使用它,這就是問題發生的地方。當過濾器試圖抓取客戶的裝運訂單時,這些全局對象是空的。這使我相信,一旦PayPal訂單完成,當前頁面將被重定向到感謝頁面,其中包含正確的信息,但是在運行過濾器時全局變量是空的。

雖這麼說,我怎麼獲取客戶的時候woocommerce_email_recipient_new_order運行發貨地址信息?

+1

你能顯示你的過濾器代碼嗎? – Jrod

回答

4

一旦訂單放在你需要從$order對象,而不是從會話中檢索信息(如航運國家)。該訂單作爲第二個參數傳遞給woocommerce_email_recipient_new_order篩選器here

這裏是你將如何通過訂單對象到過濾器的回調,並用它來修改收件人的例子:

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

編輯來讓代碼既WooCommerce 2.7和以前的版本兼容。

+0

你的回答是一個導致我的解決方案,雖然這是什麼在起作用: '$命令 - > shipping_country',而不是功能。我沒有在API文檔中看到類似的功能。此外,我不知道你可以將WC對象傳遞到這樣的動作函數中。很酷! –

+1

對不起,我認爲這是在WC 2.7中。你可以在[source]中看到它(https://github.com/woocommerce/woocommerce/blob/master/includes/class-wc-order.php#L719)。直接獲取對象屬性將被棄用,因此請記住升級時的注意事項。 – helgatheviking

+0

@LoicTheAztec謝謝,修復! – helgatheviking

相關問題