2017-02-14 4 views
2

私は卸売り顧客(wholesale_customer)のユーザー役割を持っています。完了した注文をマークすると、通知が顧客に送信されます。これは通常の顧客にとっては問題ありませんが、卸売顧客の通知を無効にする/削除したいと思います。特定のユーザーロールの注文ステータスの電子メール通知を送信しないようにします。

私がこれまで持っているもの:

function do_not_send_some_email_notifications(WC_Emails $wc_emails) { 
    $order = new WC_Order($order_id); 
    if ($order->user_id > 0) { 
    $user_id = $order->user_id; 
    $get_user_data = get_userdata($user_id); 

    $user_roles = $get_user_data->roles; 
     if (in_array('wholesale_customer', $user_roles)) { 
      remove_action('woocommerce_order_status_completed_notification', array($wc_emails->emails['WC_Email_Customer_Completed_Order'], 'trigger')); 

     } 
    } 
} 
add_action('woocommerce_email', 'do_not_send_some_email_notifications'); 

私はこれをテストしてきたが、それは働いていません。

誰かが私を正しい方向に向けることができれば、とてもうれしいでしょう。

ありがとうございました。

答えて

2

更新2:私はついにそれを機能させるための正しいフックを見つけました。私はあなたのコードをちょっと戻しましたが、非常によく似たカスタム関数を使ってちょっと調べました。アクションフックwoocommerce_order_status_completedです。ここで

はコードです:

function custom_conditional_email_notifications($order_id) { 
    // Set HERE the targetted user role 
    $targeted_user_role = 'wholesale_customer'; 

    // Get the order object, the user ID, and the user role. 
    $order = wc_get_order($order_id); 
    $user_id = $order->get_user_id(); 
    $user_info = get_userdata($user_id); 

    if (in_array($targeted_user_role, $user_info->roles) && $user_id > 0) 
     remove_action('woocommerce_order_status_completed_notification', array(
      $wc_emails->emails['WC_Email_Customer_Completed_Order'], 
      'trigger' 
     )); 
} 
add_action('woocommerce_order_status_completed', 'custom_conditional_email_notifications'); 

コードは、あなたのアクティブな子テーマ(またはテーマ)のfunction.phpファイルやも任意のプラグインファイルになります。

このコードはテスト済みであり、動作します。

+0

ご協力ありがとうございます。 Targeted_user_roleを持つ最初のビットのみがエラーを出しています(解析エラー:構文エラー、予期しない '=')。おそらくコードに小さなエラーがありますか? – PieterM

+0

もう一度ありがとうございます。このコードをテストすると、ユーザーロール「wholesale_customer」を持つユーザーは、注文が完了とマークされても通知を受け取ります。 「管理者」を「wholesale_customer」に変更する必要がありますか? – PieterM

+0

新しいコードを試しましたが、まだ動作していません。私は2つのアカウント(管理者と卸売顧客)で試してみました。どちらの場合も、完了した注文をマークした後に通知を受けました。他のプラグイン/コードと競合している可能性がありますか? – PieterM

関連する問題