3.2.42 代码高亮上线后功能已生效,但代码块上出现两个异常:
inc/theme-highlight.php
<figure class="cb">
assets/css/highlight.css
assets/js/highlight.js
wp-editormd
enlighter
assets/css/kratos.css
pre
.cb
kratos.css
pre{background:#f8f8f8}
pre code.hljs{background:...}
the_content
写 PHP 文件直连数据库查,不要大规模 HTTP 请求站点页面。 之前的抓取方式触发限流,本次禁止。
按用户要求,全站排查一律写 PHP 文件直连数据库(表前缀 yyq_),未做任何批量 HTTP 抓取。HTTP 只抓了 2 个样本页。
yyq_
原主题 kratos.css 有两条规则压在我们的 .cb pre code 上:
.cb pre code
.k-main .details .article .content code
.k-main .details .article .content pre code
我们的 .cb pre code 只有 (0,1,1),被前者抢走三个属性: border-radius:4px、color:#333、font-size:13px。
border-radius:4px
color:#333
font-size:13px
"重影"的真实来源是字号差引起的行高错位,不是两层背景:
code
.cb-ln
每行错开 0.81px,30 行累计 24px —— 肉眼看就是"两层东西叠在一起"。
修法:把选择器提到与原主题同级 (0,4,2),靠"出现更晚"取胜,不用 !important。
!important
.cb-copy
Prism.plugins
['autoloader']
仍需用户指认页面。两个待验证猜测:
@media(hover:none)
都不报错、页面看着正常,属于最难发现的一类:
header.php
body_class()
<body>
body_class
opt-ln
wp_body_open()
<pre lang="x">
<pre data-enlighter-language="x">
<code>
EnlighterJSRAW
powershell
dos
dockerfile
nginx
console.warn
language-undefined
plaintext
highlightAuto
'undefined'
if (r.language)
yang_hl_languages() 原本手写第二份白名单,与 yang_hl_norm_lang() 里的表互相漂移(后者已校正、前者没跟着改)。改为从新增的 yang_hl_known_map() 单一来源派生。
yang_hl_languages()
yang_hl_norm_lang()
yang_hl_known_map()
这一处是修 bug 过程中自己加的,加完立刻踩了两个坑,都已记录:
norm_lang
shell
shell => bash
/registerLanguage\("([^"]+)"/
grmr_xxx:
if ($packedList2)
line-numbers
data-enlighter
/theme-update/
需求已全部实现并上线,用户确认可以关闭。
交付内容
footer.php
keep
--verify
str_replace
continue
验证:独立审计(另一套扫描逻辑)全绿,反向 3/3 真红;真实页面 4 篇 data-guess 全 0。
data-guess
发布:commit 带 #12,走 /theme-update/ 通道,服务器主题目录未被覆盖。
#12
备注:本单把版本号升了但 readme 忘了加 3.2.43 条目,已在 3.2.44 那批一并补上。
No dependencies set.
The note is not visible to the blocked user.
现象
3.2.42 代码高亮上线后功能已生效,但代码块上出现两个异常:
涉及范围
inc/theme-highlight.php(我们自己的渲染器,输出<figure class="cb">卡片)assets/css/highlight.css(卡片骨架样式)assets/js/highlight.js(复制按钮绑定)wp-editormd仍在启用,enlighter用户已关闭)assets/css/kratos.css里的pre样式排查方向(按可能性排序)
wp-editormd或其它插件在正文/评论输出时注入自己的代码块外壳(含复制按钮)。它和我们的.cb卡片叠加 ⇒ 同时解释了"多一个按钮"和"重影"。kratos.css的pre{background:#f8f8f8}与 hljs 主题的pre code.hljs{background:...}各画一层背景 ⇒ 看起来像阴影。the_content上多个钩子都改代码块)。排查方式(用户明确要求)
写 PHP 文件直连数据库查,不要大规模 HTTP 请求站点页面。 之前的抓取方式触发限流,本次禁止。
验收标准
排查结论:不是插件冲突,对手是主题自己的 CSS
按用户要求,全站排查一律写 PHP 文件直连数据库(表前缀
yyq_),未做任何批量 HTTP 抓取。HTTP 只抓了 2 个样本页。现象一:重影/阴影 —— 已定位,是 CSS 优先级 + 行高错位
原主题
kratos.css有两条规则压在我们的.cb pre code上:.k-main .details .article .content code= 优先级 (0,4,1).k-main .details .article .content pre code= (0,4,2)我们的
.cb pre code只有 (0,1,1),被前者抢走三个属性:border-radius:4px、color:#333、font-size:13px。"重影"的真实来源是字号差引起的行高错位,不是两层背景:
code(被顶到 13px).cb-ln每行错开 0.81px,30 行累计 24px —— 肉眼看就是"两层东西叠在一起"。
修法:把选择器提到与原主题同级 (0,4,2),靠"出现更晚"取胜,不用
!important。现象二:多一个 copy 按钮 —— 未能复现
.cb-copyPrism.plugins只有['autoloader'],copy-to-clipboard 未注册wp-editormd未注入任何按钮仍需用户指认页面。两个待验证猜测:
@media(hover:none)下所有按钮同时显示(我们的按钮是 hover 才出的,但原主题可能有别的)。顺带修掉 4 个静默 bug
都不报错、页面看着正常,属于最难发现的一类:
header.php从未调body_class(),是裸<body>⇒ 所有挂body_class过滤器的类全部静默失效,包括行号开关opt-ln。讽刺的是同文件下wp_body_open()的注释里恰好写着"不调用不会报错,只会什么都没发生,极难发现"。<pre lang="x">、57 个写在<pre data-enlighter-language="x">,只读<code>的 class 必然读不到 ⇒ 标签显示「—」。上一轮我把这 57 个误记成"pre class 上有语言",实际 class 值是纯样式类EnlighterJSRAW。powershell/dos/dockerfile/nginx)。hljs 遇到不认识的语言不抛错,只console.warn一句就退回不高亮 ⇒ 代码块整块变白板。站内这 4 种用量均为 0,属潜伏 bug。language-undefined:hljs 把plaintext块改写成language-undefined;highlightAuto对纯文本返回字符串'undefined',if (r.language)会误当真值。顺带收敛一处结构性问题
yang_hl_languages()原本手写第二份白名单,与yang_hl_norm_lang()里的表互相漂移(后者已校正、前者没跟着改)。改为从新增的yang_hl_known_map()单一来源派生。这一处是修 bug 过程中自己加的,加完立刻踩了两个坑,都已记录:
norm_lang后必须等于自身"⇒ 假红。shell在映射表里是shell => bash,规范化函数本来就该收敛别名。/registerLanguage\("([^"]+)"/,但压缩后代码里语言是grmr_xxx:字典键、注册在最后循环批量完成 ⇒ 正则返回 0 项 ⇒if ($packedList2)整段静默跳过,输出看着像通过。已改成先断言"真的读到 36 种",再用它做判断。验证
EnlighterJSRAW/line-numbers/data-enlighter/language-undefined残留:全 0/theme-update/通道,未覆盖服务器主题目录已交付并发布(3.2.43)
需求已全部实现并上线,用户确认可以关闭。
交付内容
旧 Prism 输出已彻底删除,
footer.php里只剩注释提及、无实际 echokeep短路 —— 87 条判定只有 4 条真正落库,而--verify全绿(因为它只验"有没有合法值",不验"是不是我判的那个")
str_replace按序号替换,同篇 11 对块原文相同 ⇒ 全部改错continue⇒ 前一条命中即跳过后面,后面的判据一辈子没红过验证:独立审计(另一套扫描逻辑)全绿,反向 3/3 真红;真实页面 4 篇
data-guess全 0。发布:commit 带
#12,走/theme-update/通道,服务器主题目录未被覆盖。备注:本单把版本号升了但 readme 忘了加 3.2.43 条目,已在 3.2.44 那批一并补上。