网络下 200 个子站,主题的主色 60% 还是旧蓝色,统一改成品牌绿要逐个进后台,改完还有 12 个站被缓存挡住。乍看像缓存或者权限的锅,追下去往往不是。
foreach (get_sites(['number' => 0]) as $site) {
switch_to_blog($site->blog_id);
update_option('theme_mods_book', ['primary_color' => '#0a7d4f']);
restore_current_blog();
}
追下去是这么回事:主题选项存在各子站的 wp_2_options 里,get_option 默认只读当前站点。没有用 switch_to_blog 批量写,也没有区分哪些站允许单独定制。
碰到「子站主题设置不统一」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。
先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。别只看报错的最后一行,往上看几行,真正的起因通常在上面。
同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。
具体做法是,先导出各子站的主题选项差异;用 switch_to_blog 批量更新;保留白名单站点不覆盖 避免冲掉定制。
验收就看一点,随机抽 5 个子站前台主色一致,白名单里的 2 个定制站保持原样。
