【问题标题】:Conditional custom New Order Woocommerce email notification on different recippients针对不同收件人的有条件的自定义 New Order Woocommerce 电子邮件通知
【发布时间】:2018-06-21 01:49:57
【问题描述】:

好的,我有一个来自客户的问题,这似乎不是不可能的,但正确设置条件对我来说是个问题。这是正在发生的事情和我需要的事情。我真的希望这是一个可能的函数。

商店有一个用户层次结构。有 2x 超级管理员(ID:admin)、5x 管理员(ID:admin2)、15x 银行客户(ID:banks)和 2x 房地产客户(ID:real Estate)。我已经使用 ID 设置了自定义用户。没有产品有定价。一切都在带有 order_info 的电子邮件中开具发票。一切都在以后在家里支付。所以这个网站真的很依赖电子邮件。

  1. 如果 15x 银行客户下新订单,这些新订单需要将电子邮件发票发送给 5x 管理员。
  2. 如果 2x 房地产客户下新订单,这些新订单需要将电子邮件发票发送给 5x 管理员。
  3. 如果 5x 管理员下新订单,这些新订单需要将电子邮件发票发送给 2x 超级管理员。

我在 php 方面不是最厉害的,而且我之前做的很草率。

有什么帮助吗?

【问题讨论】:

  • 您可以在订单位置挂钩一个函数,该函数将根据从订单中获取的用户 ID 发送电子邮件。

标签: php wordpress woocommerce orders email-notifications


【解决方案1】:

您可以在functions.php filr中使用wc hook,如下所示

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

【讨论】:

    【解决方案2】:

    使用在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 文件中。

    经过测试并且可以工作

    【讨论】:

      猜你喜欢
      • 2022-01-26
      • 2017-06-15
      • 1970-01-01
      • 2018-01-07
      • 2019-05-30
      • 1970-01-01
      • 2019-08-28
      相关资源
      最近更新 更多