2017-03-29 2 views
0

マイページでは、管理者用のwoocommerce電子メールに別の製品名を表示する必要があります(新しい顧客注文電子メール)。名前を変更するには、フィルターwoocommerce_order_item_nameを使用します。 しかし、管理者の電子メールか顧客の電子メールかどうかを確認する必要があります。私はこのコードでgloab変数を使用し、それは動作しますが、それは私が推測する適切な方法ではありません。管理者の電子メールか顧客の電子メールかどうかを検証するためのより良いソリューションはありますか?woocommerceフィルタの変数スコープ

woocommerce /電子メール/メールオーダー-items.php

global $is_admin_email; 
if($show_sku) { 
    $is_admin_email = True; 
} 
else { 
    $is_admin_email = False; 

// Product name 
echo apply_filters('woocommerce_order_item_name', $item['name'], $item, false); 
//Set to false again 
$is_admin_email = False; 

のfunctions.php

function filter_woocommerce_order_item_name($item_name, $item, $false) { 
    global $is_admin_email; 
    if($is_admin_email){ 
     $item_name = "Item name in admin email"; 
    } 

    return $item_name; 
}; 

// add the filter 
add_filter('woocommerce_order_item_name', 'filter_woocommerce_order_item_name', 10, 3); 

答えて

1

私は電子メールに表示し、含まれてフックを見つけるだろう管理者に送信された場合、$sent_to_admintrueです。これは、あなたのニーズに最適な条件として役立つように思えます。これはあなたのフィルタを追加し

add_action('woocommerce_email_before_order_table', 'so_43094965_order_item_names', 10, 4); 

function so_43094965_order_item_names($order, $sent_to_admin, $plain_text, $email){ 
    if($sent_to_admin){ 
     add_filter('woocommerce_order_item_name', 'filter_woocommerce_order_item_name', 10, 3); 
    } 
} 

が、唯一の管理者の電子メールであなたの場合:

だから、私は次のことをしようとするだろう。その後、

そして:

add_action('woocommerce_email_after_order_table', 'so_43094965_remove_order_item_names', 10, 4); 

function so_43094965_remove_order_item_names($order, $sent_to_admin, $plain_text, $email){ 
    remove_filter('woocommerce_order_item_name', 'filter_woocommerce_order_item_name', 10, 3); 
} 

これは、他の場所に表示されていないので...私はそれが必要とされるかどうかわからないんだけど、完全を期すために、私はそこにそれを投げてるそれを削除します。

これはテストされていないため、マイレージが異なる場合があります。