3.2.24: 评论富文本工具条(B/I/颜色/表情移入)+ kses 放行 span+style + 后台设置页标签左列竖排重排

This commit is contained in:
2026-10-24 21:59:06 +08:00
parent 78fce2d87d
commit fd27b4d218
6 changed files with 441 additions and 26 deletions
+38
View File
@@ -43,6 +43,42 @@ if (!defined('ABSPATH')) {
exit;
}
/**
* 3.2.24 富文本工具条:给访客评论放行 <span style="color:…">
*
* 工具条插入的三种标签里,<strong>/<em> 本来就在 WP 评论的
* kses 白名单($allowedtags)里,不用管;<span style="color:…">
* 不在 —— 访客提交时会被 wp_filter_kses 整个剥掉,颜色功能就白做了。
*
* 这里把 span(带 style / class 属性)追加进 kses 白名单。安全性:
* 1. kses 对 style 属性的内容会再过一遍 safecss_filter_attr(),
* 那是一份固定白名单(color、font-weight、text-align…),
* expression()/url()/behavior() 这些危险属性一律剥掉;
* 2. 工具条前端只生成 color 一个声明,白名单只是兜底;
* 3. 有 unfiltered_html 权限的用户(管理员)本来就不走 kses,不受影响。
*
* ⚠️ 不按 context 区分:wp_filter_kses 实际传进来的 context 串
* 在 WP 各版本间不稳定,写死 'pre_comment_user' 之类的会静默失效
* (失效 = 标签被剥 = 功能没了但没有任何报错)。span+style 放行到
* 任何 kses 场景都是安全的(style 内容有 safecss_filter_attr 挡着),
* 所以对除 'strip' 外的所有 context 一律追加。
*/
function yang_kses_allow_span($tags, $context)
{
if ($context === 'strip') {
return $tags;
}
if (!is_array($tags)) {
$tags = array();
}
$tags['span'] = array(
'style' => true,
'class' => true,
);
return $tags;
}
add_filter('wp_kses_allowed_html', 'yang_kses_allow_span', 10, 2);
/**
* wpDiscuz 是否在接管评论
*
@@ -652,6 +688,8 @@ function yang_comment_scripts()
'tooLong' => __('评论内容太长了。', 'kratos'),
'loading' => __('加载中…', 'kratos'),
'noMore' => __('没有更多评论了', 'kratos'),
'boldPlaceholder' => __('加粗文字', 'kratos'),
'colorPlaceholder' => __('彩色文字', 'kratos'),
),
));
}