子站设置里语言选 English,保存后前台仍是中文,后台右上角语言显示 English,刷新多次不变。乍看像缓存或者权限的锅,追下去往往不是。
switch_to_blog(2);
var_dump(get_option('WPLANG'));
update_option('WPLANG', 'en_US');
restore_current_blog();
追下去是这么回事:语言包按主站 locale 提前加载,子站 option 又被主站的 WPLANG 覆盖。主题里还有一段 get_locale 过滤器把值固定成 zh_CN。
「子站默认语言不生效」这类改动最怕改一半,回滚脚本先准备好,再动生产。测试环境和线上的差别,往往就在版本号和那几行被忽略的配置上。
线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。
权限不要一口气开到最大,先加到够用再往上试,范围小才好收。把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。
具体做法是,查 wp_2_options 里的 WPLANG;确认子站 languages 目录有 en_US.mo;移除固定 locale 的过滤器。
验收就看一点,子站前台显示英文,主站仍是中文,切换语言后各自保持。
