2016-09-29 18 views
2

私は、顧客の発送先住所に基づいて特定の電子メールを新しい受注者リストに動的に追加しようとしています。WooCommerce出荷国に応じて電子メールの宛先を変更する

私たちはPayPal Advancedを使用して、私たちのサイト内からn iframe経由で支払いを処理しています。

問題は、電子メールを切り替えフィルタは、お客様の船が-する私は2つの場所のいずれかから取得していますどのアドレス使用していることである:ローカル

​​

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

私にはありませんpaypalを有効にしておくと有効になるので、テストすると有効になります。しかし、運用サーバー上ではこれを使用していますが、それが問題の発生場所です。これらのグローバルオブジェクトは、フィルタが顧客の出荷順序を取得しようとすると空になります。これにより、PayPalの注文が完了すると、現在のページが適切な情報を含む感謝のページにリダイレクトされますが、フィルタの実行時にはグローバル変数は空になります。

これで、woocommerce_email_recipient_new_orderを実行すると、お客様の配送先住所情報を取得するにはどうすればよいですか?

+1

フィルタコードを表示できますか? – Jrod

答えて

4

注文が完了したら、セッションではなく$orderオブジェクトから情報(配送国など)を取得する必要があります。指図は、woocommerce_email_recipient_new_orderフィルタhereに第2引数として渡されます。

ここでは、あなたのフィルターのコールバックに順序オブジェクトを渡すと受信者を変更するためにそれを使用する方法の例です:

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

あなたの答えは解決策に私を導いた答えですが、これはうまくいきます: '$ order-> 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

関連する問題