You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在用户邮箱验证后触发带正确样式的WooCommerce默认欢迎邮件

解决BitForm邮箱确认后触发WooCommerce新用户邮件样式问题

问题分析

你遇到的核心问题是:邮箱确认后触发邮件时,Kadence Email Customizer的自定义模板(包括样式、页脚)没有被正确加载。这是因为直接调用trigger()或woocommerce_created_customer动作时,WooCommerce邮件对象未完全初始化,Kadence的模板过滤钩子没有被触发。

解决方案

以下代码会确保邮件对象完整初始化,同时触发Kadence需要的模板加载逻辑,保证邮件样式和格式正确:

add_action('updated_user_meta', 'send_woocommerce_welcome_email_after_confirmation', 10, 4);
function send_woocommerce_welcome_email_after_confirmation($meta_id, $user_id, $meta_key, $meta_value) {
    // 仅处理bf_activation从0更新为1的场景
    if ($meta_key !== 'bf_activation' || $meta_value != 1) {
        return;
    }

    // 验证旧值为0,避免重复触发邮件
    $old_activation_value = get_user_meta($user_id, 'bf_activation', true);
    if ($old_activation_value != 0) {
        return;
    }

    // 确保WooCommerce及邮件组件已加载
    if (!class_exists('WooCommerce') || !isset(WC()->mailer)) {
        return;
    }

    $user = get_userdata($user_id);
    if (!$user) {
        return;
    }

    $mailer = WC()->mailer();
    $email_class = 'WC_Email_Customer_New_Account';

    // 初始化邮件对象(若未自动加载)
    if (!isset($mailer->emails[$email_class])) {
        $mailer->emails[$email_class] = new $email_class();
        $mailer->emails[$email_class]->init();
    }

    $email = $mailer->emails[$email_class];

    // 强制加载Kadence自定义邮件模板路径
    add_filter('woocommerce_email_template_base_path', function($default_path) {
        $kadence_template_path = WP_CONTENT_DIR . '/uploads/kadence-email-customizer/woocommerce/';
        return file_exists($kadence_template_path) ? $kadence_template_path : $default_path;
    }, 10);

    // 填充邮件必要数据
    $email->object = $user;
    $email->recipient = $user->user_email;
    $email->find = ['{user_login}', '{user_email}', '{blogname}', '{site_url}'];
    $email->replace = [$user->user_login, $user->user_email, get_option('blogname'), get_option('siteurl')];

    // 应用主题和标题的过滤钩子
    $email->subject = apply_filters('woocommerce_email_subject_customer_new_account', $email->get_option('subject'), $user);
    $email->heading = apply_filters('woocommerce_email_heading_customer_new_account', $email->get_option('heading'), $user);

    // 发送邮件,确保完整模板被渲染
    $email->send(
        $email->recipient,
        $email->subject,
        $email->get_content(),
        $email->get_headers(),
        $email->get_attachments()
    );
}

关键修复点

  • 重复触发防护:检查bf_activation的旧值是否为0,避免用户多次触发确认动作时重复发送邮件。
  • 邮件对象初始化:手动实例化并调用init()方法,确保WooCommerce邮件的所有配置(包括Kadence的模板过滤)都被加载。
  • 模板路径强制加载:通过woocommerce_email_template_base_path过滤器指定Kadence的自定义模板目录,确保样式和页脚被正确渲染。
  • 完整数据填充:手动设置邮件的占位符替换变量,保证邮件内容的动态数据正确显示。

内容的提问来源于stack exchange,提问作者Pomas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 15:15:05