如何在WordPress的auto_core_update_email钩子中为$email['body']添加换行
解决WordPress auto_core_update_email钩子邮件正文无法换行的问题
我之前也碰到过一模一样的问题,折腾了好半天才搞清楚症结所在!核心问题是邮件内容格式和换行符不匹配,加上可能SMTP插件的设置影响,导致你用的换行符被当成纯文本显示了。下面给你两种可行的解决方案:
方案1:发送HTML格式邮件(推荐,支持更多排版)
WordPress默认的自动更新邮件可能是纯文本格式,所以你写的<br />不会被解析成换行。我们需要通过钩子手动设置邮件为HTML格式,这样HTML标签就能正常生效:
add_filter( 'auto_core_update_email', 'custom_core_update_email_content', 10, 4 ); function custom_core_update_email_content( $email, $update_type, $core_update, $update_result ) { // 添加HTML格式的头部信息 $email['headers'][] = 'Content-Type: text/html; charset=UTF-8'; // 编写带HTML换行的邮件正文 $email['message'] = 'Hello<br />'; $email['message'] .= 'Lorem Ipsum<br />'; $email['message'] .= 'Many thanks<br />'; $email['message'] .= 'WordPress'; return $email; }
把这段代码添加到你主题的functions.php文件里,或者用自定义代码插件添加。这样邮件客户端就会把<br />解析成换行,你还可以用<p>标签做段落分隔,排版更灵活。
方案2:发送纯文本格式邮件(保持简洁)
如果你不想用HTML格式,也可以直接用纯文本的换行符\n,但要确保邮件是纯文本格式(默认可能就是,但最好确认):
add_filter( 'auto_core_update_email', 'custom_core_update_email_content', 10, 4 ); function custom_core_update_email_content( $email, $update_type, $core_update, $update_result ) { // 纯文本邮件用\n换行(注意要用双引号包裹字符串,\n才会被解析) $email['message'] = "Hello\n"; $email['message'] .= "Lorem Ipsum\n"; $email['message'] .= "Many thanks\n"; $email['message'] .= "WordPress"; return $email; }
额外注意事项
- 检查你的SMTP插件设置:有些SMTP插件会强制把邮件设置为纯文本格式,如果是这样,即使你加了HTML头部也没用。找到插件里的“邮件格式”选项,设置为“HTML”或者“自动检测”。
- 别用
%0D%0A:这是URL编码的换行符,只有在URL参数里才会被解析,邮件正文里完全不需要用这个,直接用上面说的换行方式就行。
内容的提问来源于stack exchange,提问作者AlastairHoward
相关产品推荐
相关产品推荐

