有条件的自定义新订单Woocommerce电子邮件通知不同的recippients

时间:2018-01-11 16:44:03

标签: php wordpress woocommerce orders email-notifications

好吧,我有一个问题来自客户似乎不可能,但正确设置条件对我来说是一个问题。这是正在发生的事情和我需要的东西。我真的认为这是可能的功能。

商店有一个用户层次结构。有2x超级管理员(ID:admin),5x管理员(ID:admin2),15x银行客户(ID:银行)和2x房地产客户(ID:房地产)。我已经使用ID设置了自定义用户。没有产品有定价。所有商品都在order_info的电子邮件中开具发票。所有东西都在日后付清。所以该网站真的依赖于电子邮件。

  1. 如果15x银行客户发出new_order,则这些new_order需要将电子邮件发票发送给5x管理员。
  2. 如果2x房地产客户发出new_order,这些new_order需要将电子邮件发票发送给5x管理员。
  3. 如果5x管理员放置了new_order,则这些new_order需要将电子邮件发票发送给2x超级管理员。
  4. 我不是最好的PHP,我以前的东西非常草率。

    任何帮助?

2 个答案:

答案 0 :(得分:0)

您可以在functions.php filr

中使用wc hook

add_action('woocommerce_new_order','send_email_to_admin',1,1); function send_email_to_admin($ order_id){ //使用订单ID查找用户ID并发送电子邮件 }

答案 1 :(得分:0)

使用挂钩在woocommerce_thankyou操作挂钩中的自定义函数,可以根据用户角色和自定义多个收件人发出有条件的电子邮件通知。

您需要在此功能中替换管理员和超级管理员电子邮件。

您还需要检查3个if语句中的用户角色是否匹配...房地产的ID通常没有空格,而应该是:'real_estate'

这将针对状态为'等待'等待处理'处理'的订单发送电子邮件通知。或者'已完成' ...

触发此自定义电子邮件后,系统会为订单设置自定义字段'_custom_emails_sent'

以下是代码:

add_action( 'woocommerce_thankyou', 'custom_new_order_email_notifications', 10, 1 );
function custom_new_order_email_notifications( $order_id ){
    // If Custom Emails already sent we exit
    if( get_post_meta( $order_id, '_custom_emails_sent', true ) ) return;

    $targeted_statuses = array( 'wc-on-hold', 'wc-pending', 'wc-processing', 'wc-completed' );
    $order_status = get_post_status( $order_id );

    // Only for the correct order statuses; If not we exit
    if( ! in_array( $order_status, $targeted_statuses ) ) return;

    // HERE (below) replace super admins and admins REAL emails
    $super_admin_emails = array( 
        'supadmin1@example.com', 'supadmin2@example.com' );
    $admin_emails = array(
        'admin1@example.com', 'admin2@example.com',
        'admin3@example.com', 'admin4@example.com', 'admin5@example.com' );

    // Get the user of the order
    $user_id = get_post_meta( $order_id, '_customer_user', true );
    $user = get_userdata( $user_id );

    $recipient = '';

    // 1. Bank Customers user role
    if( in_array('banks', $user->roles) ){
        $recipients = implode(',', $admin_emails);
    }

    // 2. Real estate Customers user role
    if( in_array('real_estate', $user->roles) ){
        $recipients = implode(',', $admin_emails);
    }

    // 3. Admins Customers user role
    if( in_array('admin2', $user->roles) ){
        $recipients = implode(',', $admin_emails);
    }

    // Sending new order email notification to the targeted recipients
    if( '' != $recipients ){
        $mailer = WC()->mailer()->get_emails();
        $mailer['WC_Email_New_Order']->recipient = $recipients;
        $mailer['WC_Email_New_Order']->trigger( $order_id ); // sending

        // We set a custom field that will avoid repetitive sends
        update_post_meta( $order_id, '_custom_emails_sent', '1' );
    }
}

代码放在活动子主题(或活动主题)的function.php文件中。

经过测试和工作