【问题标题】:Add recipients based on user role to failed and cancelled WooCommerce emails根据用户角色将收件人添加到失败和取消的 WooCommerce 电子邮件
【发布时间】:2018-05-25 04:14:51
【问题描述】:

我希望能够根据用户在订购时的角色来更改接收 Woocommerce 电子邮件通知的人。

例如,如果用户以批发客户身份登录,则会通知另一封电子邮件。

我找到了如何在新订单完成时使用woocommerce_email_recipient_new_order 挂钩更改它,但我找不到与失败或取消通知相关的任何挂钩。

add_filter( 'woocommerce_email_recipient_new_order', 'sv_conditional_email_recipient', 10, 2 );


function sv_conditional_email_recipient( $recipient, $order ) {

    // Bail on WC settings pages since the order object isn't yet set yet
    // Not sure why this is even a thing, but shikata ga nai
    $page = $_GET['page'] = isset( $_GET['page'] ) ? $_GET['page'] : '';
    if ( 'wc-settings' === $page ) {
        return $recipient; 
    }

    // just in case
    if ( ! $order instanceof WC_Order ) {
        return $recipient; 
    }


         if ( in_array( 'wholesale_customer', (array) $user->roles )  ) {
            $recipient .= ', shaun@example.com';
            return $recipient;
        }

    return $recipient;
}


add_filter( 'woocommerce_email_recipient_new_order', 'sv_conditional_email_recipient', 10, 2 );

有人可以帮忙吗?

【问题讨论】:

    标签: php wordpress woocommerce orders email-notifications


    【解决方案1】:

    您已经使用的钩子是一个复合钩子:woocommerce_email_recipient_{$this->id},其中{$this->id}WC_Email ID,如new_order。因此,您可以设置任何电子邮件 ID,以使其适用于所需的电子邮件通知。

    下面你有 3 个钩子用于“新订单”、“取消订单”和“失败订单”,您可以将它们用于相同的钩子函数。

    在你的函数中,我删除了一些不必要的代码,并完成了获取与订单相关的客户数据(用户角色)的代码:

    add_filter( 'woocommerce_email_recipient_new_order', 'user_role_conditional_email_recipient', 10, 2 );
    add_filter( 'woocommerce_email_recipient_cancelled_order', 'user_role_conditional_email_recipient', 10, 2 );
    add_filter( 'woocommerce_email_recipient_failed_order', 'user_role_conditional_email_recipient', 10, 2 );
    function user_role_conditional_email_recipient( $recipient, $order ) {
        if ( ! is_a( $order, 'WC_Order' ) ) return $recipient;
    
        // Get the customer ID
        $user_id = $order->get_user_id();
    
        // Get the user data
        $user_data = get_userdata( $user_id );
    
        // Adding an additional recipient for a custom user role
        if ( in_array( 'wholesale_customer', $user_data->roles )  )
            $recipient .= ', shaun@example.com';
    
        return $recipient;
    }
    

    代码进入您的活动子主题(或主题)的 function.php 文件或任何插件文件中。

    经过测试并且有效。

    【讨论】:

    • 嗨 Loic,成功了!非常感谢。并感谢您提供有关定位个人电子邮件 ID 的提示 :)
    • 嗨,伙计,刚刚意识到。 $user_id 应该是 $customer_id?
    • @Shaun ...是的,对不起,我已经纠正了我的小错误,更新了这个答案......谢谢
    猜你喜欢
    • 2019-08-24
    • 2021-06-01
    • 1970-01-01
    • 2022-01-19
    • 2018-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多