2017-02-14 49 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

我已经尝试了新的代码,但它仍然无法工作。我已经用两个帐户(管理员和批发客户)尝试过它。在这两种情况下,我都在将订单标记为已完成后收到通知。可能与另一个插件/代码段发生冲突? – PieterM

相关问题