load-scripts.php?...:5 JQMIGRATE: Migrate is installed, version 3.4.1
donate.png:1 Failed to load resource: the server responded with a status of 404 ()
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
现象
后台「主题设置 → 代码高亮 → 代码配色」切换配色后,下方预览示例代码没有高亮(一片单色文字),
只在顶栏/边框上能看到深/浅变化。控制台另有
donate.png 404。浏览器控制台报的两行:
根因(已定位)
一、预览不高的高亮:后台从未加载 hljs 本体(主因)
yang_hl_admin_assets()里只 enqueue 了三个资源,依赖数组全为空、也没有 hljs:yang-hl-admin-cardassets/css/highlight.cssyang-hl-admin-previewassets/css/highlight-admin.cssyang-hl-admin-preview(JS)assets/js/highlight-admin.js,deps = array()而
highlight-admin.js的recolor()第一句就是:hljs 只在前台
wp_enqueue_scripts(yang_hl_enqueue)里加载,且函数开头if (is_admin() || is_feed()) { return; }直接挡掉后台。⇒ 后台
window.hljs恒 undefined ⇒recolor()静默 return,连一行报错都没有⇒ 预览里只有服务端
esc_html()出来的纯文本 + 配色 CSS 给的<pre>背景色,token 一个都没有 ⇒ 看起来「只有底色变了、字没高亮」。
这也解释了为什么它看起来像在部分工作:卡片边框、顶栏颜色是
data-kind驱动的 CSS,不依赖 hljs,所以深/浅切换仍然可见 —— 极容易误判成「预览是好的」。
二、
donate.png 404yang_hl_admin_assets()之外的问题,与预览无关,但同一屏暴露出来:inc/theme-option-defaults.php:76-77的默认值登记的是根相对路径/assets/img/donate.png,yang_image_default()拼出来是ASSET_PATH . $rel;而当
ASSET_PATH为空(非 CDN 模式)时拿到的是/assets/img/donate.png⇒ 浏览器按站点根解析成
https://yangyq.net/assets/img/donate.png⇒ 真实文件在
/wp-content/themes/kratos_yang/assets/img/donate.png⇒ 404。已实测:主题目录下的
donate.png存在(559 B),HTTP 直取该正确路径 200。诉求
donate.png 404。验收标准
window.hljs存在、hljs.listLanguages()返回 36 种。<code>内的span.hljs-*数量 > 0(不是纯文本)。color与浅色配色不同(读数不相等,不是比字面量)。/assets/img/donate.png。3.2.45 已发布,等待后台点升级后实测确认
一、两个报障的实际根因
① 后台预览的示例代码没有高亮 —— 三层原因叠在一起,缺任何一层都查不全:
yang_hl_admin_assets()从未 enqueue hljs 本体,而yang_hl_enqueue()开头if (is_admin() || is_feed()) return;挡掉后台window.hljs恒undefined⇒recolor()静默returninit()里applyTheme(sel.value, true)传了noRecolor=truerecolor()缺 hljs 时只是return第 1 条特别迷惑:卡片的边框、顶栏颜色是
data-kind驱动的纯 CSS,切深浅配色时它们照样会变,所以看着像"预览在工作,只是代码没颜色"。而第 2 条才是报障原话"下面的示例代码并没有高亮"的直接原因 —— 它不是完全不工作,是首屏不工作。② donate.png 404 —— 库里
kratos选项的g_donate_alipay/g_donate_wechat存着旧主题目录名的绝对 URL:主题目录后来从
kratos-master改名成kratos_yang。前台走yang_option_image()有yang_image_url_is_stale()兜底所以正常;但后台class-options-media-uploader.php直接 echo$value,绕过检测 ⇒ 每次打开设置页 404 一次。二、改了什么
inc/theme-highlight.php:后台 enqueue hljs 本体,并作为 preview 脚本的硬依赖(不靠 WP 加载顺序碰运气);前台那个函数仍然挡后台,没走"放开前台函数"这条歪路。assets/js/highlight-admin.js:删掉noRecolor这个"能否跳过核心动作"的参数 —— 这类参数调用方迟早会用错;首屏与切换走同一条路径。缺 hljs / 上色失败时console.error出声 + 打标记。assets/css/highlight-admin.css:给失败标记做可见样式(橙色虚线框 + 顶栏文字"预览未能上色,请查看浏览器控制台"),不再让失败显示成一坨单色字。setTimeout(once, 125),link.onload只当"提前一拍"的加速。onload三种情况不触发:样式表已在缓存、link移除后重插、jsdom 无网络。inc/options-framework/includes/class-options-media-uploader.php:预览图与"浏览文件"href 走检测后的$preview(带function_exists兜底);输入框仍显示库里的原值,不偷偷改用户数据。style.css:3.2.44 → 3.2.45。三、验证结果
_admin_preview_test.js(jsdom 配色切换)_admin_preview_falsify.js_admin_enqueue_test.php(enqueue 注册表)_admin_enqueue_falsify.php_admin_e2e_highlight.js(真端到端,能抓两个真实 bug)_admin_e2e_falsify.js_admin_image_stale_test.php_admin_image_stale_falsify.php_hl_unit_run.py(既有 44 + 24 单测)发布脚本自带的反证(现场改包内字节,证明判据真会红):R1 删后台 hljs、R2 还原
noRecolor=true、R2b 删setTimeout兜底、R3 去掉陈旧检测、R4 让输入框输出$preview—— 5 / 5 全红。四、发布记录
kratos_yang-3.2.45.zip,md5ed755c1f04098374f5b5bd8f869278e5,4,715,745 B,232 文件,时间戳单一(不是 1980 默认值)/theme-update/放 zip + readme + update.json,没有触碰wp-content/themes/kratos_yang/update.json现为{"version": "3.2.45", ...}donate.png正确路径 HTTP 200,旧kratos-master路径 404(符合预期)9da5e9e已推送main五、请你实测确认这两点
donate.png 404;"打赏"那一项的预览图正常显示。若还有问题,把 Console 里的报错(现在会出声了)贴给我。
已交付并发布(3.2.45)
两个问题都已修复并上线,用户确认可以关闭。
① 后台「代码配色」预览不上色
三层原因叠加:
yang_hl_admin_assets()从未 enqueue hljs 本体,而前台函数if (is_admin() || is_feed()) return;挡掉后台 ⇒
window.hljs恒 undefinedinit()里applyTheme(sel.value, true)⇒ 首屏永不上色,只有拨下拉框才是彩色return,控制台零输出修法:后台 enqueue hljs 并作为预览脚本硬依赖;删掉
noRecolor参数(首屏与切换走同一路径);缺 hljs 时
console.error+ 橙色虚线框「预览未能上色」提示。② donate.png 404
库里
kratos选项的g_donate_alipay/g_donate_wechat存着旧主题目录名kratos-master的绝对 URL。前台有yang_image_url_is_stale()兜底,后台 uploader直接 echo
$value绕过检测。修在渲染处:预览图走检测后的$preview,输入框仍显示原值。验证
9 组测试全绿(22/0 · 6/0 · 9/0 · 5/5 · 16/0 · 3/3 · 10/0 · 3/3 · 既有单测全通过),
发布脚本自带反证 5/5 真红。
发布
kratos_yang-3.2.45.zipmd5ed755c1f04098374f5b5bd8f869278e5,232 文件,commit
9da5e9e带#14,走/theme-update/通道,服务器主题目录未被覆盖。