如何在WooCommerce重置密码邮件中显示用户邮箱ID?
解决WooCommerce重置密码邮件中邮箱ID无法显示的问题
看起来你在WooCommerce重置密码邮件里显示邮箱ID时碰了壁——用户名能正常展示,但替换变量后邮箱就没了踪影。我来帮你拆解下问题原因和可行的解决办法:
问题根源
你当前代码里用了$user_email变量,但在WooCommerce重置密码邮件的默认模板上下文里,这个变量并没有被正确传递或初始化。默认情况下,邮件模板里会提供**$user用户对象**,而非直接的$user_email变量,调用未定义的变量自然会导致内容无法显示。
解决方案
根据你的需求,分两种常见场景给出具体代码:
1. 直接修改邮件模板文件(适合习惯改模板的开发者)
如果你是直接修改WooCommerce的重置密码模板(路径一般为wp-content/plugins/woocommerce/templates/emails/customer-reset-password.php,建议先复制到主题目录下修改,避免插件更新覆盖修改),可以这样写:
// 显示用户名 printf( esc_html__( 'Username: %s', 'woocommerce' ), esc_html( $user->user_login ) ); echo '<br>'; // 换行优化排版 // 显示邮箱ID printf( esc_html__( 'Email: %s', 'woocommerce' ), esc_html( $user->user_email ) );
这里通过$user对象直接调用user_login(用户名)和user_email(邮箱)属性,确保能获取到准确的用户数据。
2. 使用钩子函数修改(推荐,无需改动模板)
如果你不想直接修改模板文件,更推荐用WooCommerce的woocommerce_reset_password_message钩子来添加内容,这样插件更新时不会丢失你的修改:
add_filter( 'woocommerce_reset_password_message', 'add_email_to_reset_password_email', 10, 2 ); function add_email_to_reset_password_email( $message, $user ) { // 组装用户名和邮箱的自定义内容 $custom_content = sprintf( esc_html__( 'Username: %s', 'woocommerce' ), esc_html( $user->user_login ) ) . "\r\n"; $custom_content .= sprintf( esc_html__( 'Email: %s', 'woocommerce' ), esc_html( $user->user_email ) ) . "\r\n\r\n"; // 将自定义内容添加到原有邮件消息的开头 return $custom_content . $message; }
把这段代码放到你的主题functions.php文件里,或者自定义插件中就能生效。
额外小提示
- 不用担心
$user对象的存在性——在重置密码邮件的上下文里,这个对象是默认传递的,肯定能获取到用户数据。 - 你用
esc_html()包裹输出内容的做法非常正确,能有效避免XSS安全问题,继续保持这个好习惯!
内容的提问来源于stack exchange,提问作者Praveen
相关产品推荐
相关产品推荐

