评论通知邮件无样式:接管核心通知正文 #39

卸载 wpDiscuz 后,评论通知回落到核心 wp_notify_postauthor /
wp_notify_moderator。theme-mail.php 只接管了通道(SMTP、From),
并把 Content-Type 强改成 text/html,而正文仍是核心拼的纯文本,
客户端按 HTML 渲染 ⇒ 换行丢、链接变裸地址。

新增 inc/theme-mail-core.php,挂 comment_notification_text /
comment_moderation_text 两个过滤器,把正文换成主题模板。这是核心
自己提供的扩展点,不改核心文件,删掉即回退。

模板新增 links 参数,把 通过/回收站/垃圾 渲染成一行文字链接
(并排三按钮在手机上必然换行、高度不齐)。

版本 4.2.1 -> 4.2.2
This commit is contained in:
2026-11-06 20:11:24 +08:00
parent c2d8ac6f17
commit ec815d4282
4 changed files with 282 additions and 1 deletions
+28
View File
@@ -750,6 +750,9 @@ function yang_mail_button($text, $url, $bg = null, $fg = null)
* @type string $cta_url 按钮链接
* @type string $note 底部提示(纯文本)
* @type string $badge 顶部小标签,如「新评论」
* @type array $links 次要操作链接,每项 array('text'=>, 'url'=>)。
* 用于后台管理动作(通过/回收站/垃圾),渲染成一行文字链接,
* 不做成并排按钮:手机宽度下三个按钮必然换行、高度不齐。
* }
* @return string 完整 HTML
*/
@@ -767,6 +770,7 @@ function yang_mail_render($args)
'cta_url' => '',
'note' => '',
'badge' => '',
'links' => array(), // 次要操作链接 array('text'=>, 'url'=>),渲染成一行文字链接
));
/* 统一成 $quoteList:
@@ -973,6 +977,30 @@ function yang_mail_render($args)
</div>
<?php endif; ?>
<?php if (!empty($d['links']) && is_array($d['links'])): ?>
<?php /* 次要操作链接行(通过 / 回收站 / 垃圾)。
为什么是文字链接而不是并排按钮:
· 手机宽度下三个按钮必然换行、高度不齐,看起来像渲染出错;
· 这些是后台管理动作,不该和「查看评论」抢视觉权重。
分隔符直接写 U+00B7 字符本身,不用字符实体 —— 遵循本文件
一以贯之的约定:实体被多解码或少解码一次就会露出原文。 */ ?>
<div style="margin:0 0 26px 0;font-family:<?php echo $sans; ?>;font-size:13px;line-height:1.9;">
<?php
$linkCount = count($d['links']);
foreach ($d['links'] as $li => $lk):
if (empty($lk['text']) || empty($lk['url'])) {
continue;
}
?>
<a href="<?php echo esc_url($lk['url']); ?>" target="_blank" rel="noopener" style="color:<?php echo esc_attr($cMuted); ?>;text-decoration:underline;"><?php echo esc_html($lk['text']); ?></a><?php
if ($li < $linkCount - 1) {
echo '<span style="color:' . esc_attr($cTintMid) . ';"> · </span>';
}
endforeach;
?>
</div>
<?php endif; ?>
<?php if ($d['note'] !== ''): ?>
<div style="font-family:<?php echo $sans; ?>;font-size:13px;color:<?php echo esc_attr($cMuted); ?>;line-height:1.7;padding:16px 0 0 0;border-top:1px solid <?php echo esc_attr($cTintLine); ?>;">
<?php echo esc_html($d['note']); ?>