WordPress+WooCommerce新用户注册邮件优化:仅保留可自定义WC邮件
问题描述
我使用Essential Addons插件的自定义注册表单配置网站用户注册后的通知邮件,最初仅收到WordPress标准注册邮件,无法收到WooCommerce的注册通知邮件。添加了一段代码后,现在能正常接收WooCommerce的注册邮件,但WordPress的默认注册邮件仍会同时发送。我希望仅保留可通过WooCommerce自定义的注册邮件,彻底移除WordPress的默认注册邮件。
当前使用的代码:
function send_welcome_email_to_new_user($user_id) { $wc = new WC_Emails(); $wc->customer_new_account($user_id); } add_action('user_register', 'send_welcome_email_to_new_user');
补充说明:
- 截图1:展示WordPress默认注册邮件的内容样式
- 截图2:展示WooCommerce注册邮件的自定义设置界面
解决方案
要实现只保留WooCommerce注册邮件的需求,只需移除WordPress默认注册邮件的发送钩子即可。WordPress默认通过wp_new_user_notification函数发送注册邮件,该函数挂钩在user_register动作上,我们可以直接移除这个钩子,或者在发送WooCommerce邮件的同时禁用默认邮件发送。
方案1:直接移除默认邮件钩子
在现有代码后添加移除钩子的代码:
// 发送WooCommerce注册邮件 function send_welcome_email_to_new_user($user_id) { $wc = new WC_Emails(); $wc->customer_new_account($user_id); } add_action('user_register', 'send_welcome_email_to_new_user'); // 移除WordPress默认注册邮件发送动作 remove_action('user_register', 'wp_new_user_notification');
方案2:合并逻辑(更简洁)
将发送WooCommerce邮件和禁用默认邮件的逻辑合并到一个函数中,通过调整钩子优先级确保先执行我们的逻辑:
function send_wc_welcome_email_disable_default($user_id) { // 触发WooCommerce注册邮件发送 $wc = new WC_Emails(); $wc->customer_new_account($user_id); // 移除WordPress默认注册邮件的发送钩子 remove_action('user_register', 'wp_new_user_notification', 10); } // 设置更高优先级(数值越小优先级越高),确保在默认邮件发送前执行 add_action('user_register', 'send_wc_welcome_email_disable_default', 5);
注意事项
- 将代码添加到主题的
functions.php文件中,或者使用自定义代码插件(如Code Snippets)添加,避免主题更新时代码丢失。 - 测试注册流程,确认仅收到WooCommerce的注册邮件,WordPress默认邮件不再发送。
内容的提问来源于stack exchange,提问作者Artur Pylypenko
相关产品推荐
相关产品推荐

