在子主题里把 --brand 从 #0a7 改成 #f60,按钮仍是绿色,开发者工具里看到 :root 有两条同名变量,生效的是后面那条。乍看像缓存或者权限的锅,追下去往往不是。

html:root { --brand: #f60; }
// 或从主题过滤器改输出
add_filter('theme_inline_css', fn($css) => str_replace('#0a7', '#f60', $css));

追下去是这么回事:主题通过 wp_add_inline_style 在页面里又输出了一份 :root,位置在子主题样式之后,同优先级下后出现的覆盖前面。自定义器生成的变量也走这条路,每次保存都会重写。

碰到「CSS 变量被覆盖」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。测试环境和线上的差别,往往就在版本号和那几行被忽略的配置上。

线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。

具体做法是,在计算样式里确认变量的最终来源,看是哪条规则在后面;改主题选项或过滤器,从输出端改变量,别在前端硬覆盖;必须覆盖时提高选择器权重,比如 html:root,并放在最后加载。

验收就看一点,按钮和链接变成橙色,计算样式里只剩一条 --brand 生效。

作者 9823189