首页 > 解决方案 > 根据用户角色将附件添加到 WooCommerce 新用户注册电子邮件

问题描述

我想在 WooCommerce 的新用户注册电子邮件中添加两个 pdf 文件。

因为我有两个特定的用户角色customerseller. 我想向所有新卖家发送来自路径的两个 pdf 文件$path1和来自路径$path3的所有新客户两个 pdf 文件$path2$path3.

我在我的functions.php

function attach_to_email ( $attachments, $userrole ) { 

$root = ABSPATH;
$path1 = $root . '/media/AGB H.pdf';
$path2 = $root . '/media/AGB K.pdf';
$path3 = $root . '/media/W.pdf';

if ( $userrole === 'seller' ) {
   $attachments[] = $path1;
   $attachments[] = $path3;
} else {
   $attachments[] = $path2;
   $attachments[] = $path3;
}

return $attachments;

}

add_filter( 'woocommerce_email_attachments', 'attach_to_email', 10, 2 );

在我打电话给卖家的电子邮件模板中:

do_action( 'woocommerce_email_attachments', null, 'seller' );

但在函数中,我总是输入 else 部分而不是 if 部分。此外,现在所有的电子邮件都附有else-files,而不仅仅是注册电子邮件。有任何想法吗?

标签: phpwordpresswoocommerceemail-attachmentsuser-roles

解决方案


要仅将附件分配给注册电子邮件,您可以使用:

  • ,$email_id其中这等于customer_new_account

对于链接到主题的附件路径,您可以使用:

  • get_stylesheet_directory()对于儿童主题
  • get_template_directory()对于父主题
  • 我还建议不要在 pdf 文件的文件名中使用空格

然后,您可以根据用户角色分配正确的附件


所以你得到:

function filter_woocommerce_email_attachments( $attachments, $email_id, $object, $email_object = null ) {
    // Use get_stylesheet_directory() for a child theme
    // Use get_template_directory() for a parent theme
    $path_1 = get_template_directory() . '/my-file-1.pdf';
    $path_2 = get_template_directory() . '/my-file-2.pdf';
    $path_3 = get_template_directory() . '/my-file-3.pdf';

    // Customer new account email
    if ( isset( $email_id ) && $email_id === 'customer_new_account' ) {         
        // Get user role(s)
        $roles = (array) $object->roles;
        
        // Seller
        if ( in_array( 'seller', $roles ) ) {
            $attachments[] = $path_1;
            $attachments[] = $path_3;           
        // Customer
        } elseif ( in_array( 'customer', $roles ) ) {
            $attachments[] = $path_2;
            $attachments[] = $path_3;
        }
    }
    
    return $attachments;
}
add_filter( 'woocommerce_email_attachments', 'filter_woocommerce_email_attachments', 10, 4 );

代码进入functions.php您的活动主题的文件中。经测试WooCommerce 5.0.0


推荐阅读