我尝试在PHP字符串变量中添加标记,然后使用
wp_mail()
函数触发了电子邮件,如下所示:$email_to = 'someaddress@gmail.com';
$email_subject = 'Email subject';
$email_body = "<html><body><h1>Hello World!</h1></body></html>";
$send_mail = wp_mail($email_to, $email_subject, $email_body);
却显示为纯文本?
有什么想法吗?
#1 楼
来自wp_mail Codex页面:默认内容类型为'text / plain',不允许使用HTML。但是,您可以使用“ wp_mail_content_type”过滤器设置电子邮件的内容类型。
// In theme's functions.php or plug-in code:
function wpse27856_set_content_type(){
return "text/html";
}
add_filter( 'wp_mail_content_type','wpse27856_set_content_type' );
评论
嗯,听起来很有用。只是一个问题,为什么要命名函数wpse27856_set_content_type的任何特定原因?
–racl101
2011年9月6日在21:31
不,它只是基于此特定问题的ID的唯一名称。 wpse = wp stachexchange,27856是URL中此问题的ID。我这样做是为了避免人们在此处复制/粘贴代码时可能发生的冲突。
–米洛
2011年9月6日在21:45
您也可以仅在电子邮件标题中包含Content-Type。看看Notifly插件是如何做到的。
–奥托
2011年9月7日下午0:29
这将破坏您的密码重置电子邮件,因为重置链接包含在<>中。
–西蒙·约瑟夫·角
17-10-24在6:08
@SimonJosefKok,如果我正确阅读了此错误报告,从WordPress 5.4开始,解决了密码重置电子邮件中断的问题。听起来他们决定从电子邮件地址中删除尖括号。 core.trac.wordpress.org/ticket/23578#comment:24
–马克·贝瑞(Mark Berry)
2月11日在1:22
#2 楼
或者,可以在$ headers参数中指定Content-Type HTTP标头:$to = 'sendto@example.com';
$subject = 'The subject';
$body = 'The email body content';
$headers = array('Content-Type: text/html; charset=UTF-8');
wp_mail( $to, $subject, $body, $headers );
评论
由于add_filter有时显示为附件,因此效果更好。感谢分享!
– deepakssn
18年2月17日在18:54
这通常是执行此操作的最佳方法。最佳答案将干扰其他插件并引起问题。
– Alex Standiford
19/12/6在19:12
这应该是公认的答案
–尼莫船长
9月27日18:49
#3 楼
使用wp_mail函数后,请不要忘记删除内容类型过滤器。按照接受的答案命名,您应该在执行wp_mail之后执行以下操作:
remove_filter( 'wp_mail_content_type','wpse27856_set_content_type' );
在此处检查此票证-重置内容类型以避免冲突-http://core.trac.wordpress.org/ticket/23578
评论
这应该是评论,而不是答案,不是吗?
–鲍勃·迭戈
17年7月26日在14:31
#4 楼
我将在下面分享另一种简单的方法。甚至您也可以根据需要设置邮件正文的样式。$email_to = 'someaddress@gmail.com';
$email_subject = 'Email subject';
// <<<EOD it is PHP heredoc syntax
$email_body = <<<EOD
This is your new <b style="color: red; font-style: italic;">password</b> : {$password}
EOD;
$headers = ['Content-Type: text/html; charset=UTF-8'];
$send_mail = wp_mail( $email_to, $email_subject, $email_body, $headers );
有关PHP的更多信息heredoc语法https://www.php.net/manual/zh/language.types.string.php# language.types.string.syntax.heredoc
#5 楼
使用ob_start
,因为这将允许您使用WP变量/函数,例如bloginfo等。创建一个PHP文件并将HTML粘贴到该文件中(如果需要,请在该php文件中使用wp变量)。 br />
使用以下代码:
$to = 'Email Address';
$subject = 'Your Subject';
ob_start();
include(get_stylesheet_directory() . '/email-template.php');//Template File Path
$body = ob_get_contents();
ob_end_clean();
$headers = array('Content-Type: text/html; charset=UTF-8','From: Test <test@test.com>');
wp_mail( $to, $subject, $body, $headers );
这将使您的代码保持干净,并且由于ob_start,我们还将节省加载文件的时间。
评论
在wp_mail()phparticles.com/wordpress/how-to-use-wp-mail-with-wordpress上查看此精彩文章