站点装了 WPML,公告在中文页面正常,切到英文和日文页面公告整块消失,后台三种语言都填了内容,英文页源码里连公告容器都没有。碰到这种情况,我一般先确认改动有没有真的生效。
原因不复杂,公告查询用了 WP_Query 但没带语言参数,WPML 按当前语言过滤自定义文章类型,没登记翻译的公告被直接排除。主题里那段查询写在语言切换之前,取到的永远是默认语言。
「多语言公告语言切换」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。
$args = [ 'post_type' => 'notice', 'lang' => apply_filters( 'wpml_current_language', null ) ]; $q = new WP_Query( $args );
具体做法是,给公告文章类型注册 wpml-config.xml,把标题正文标成可翻译字段;查询时显式传 lang 参数,值与当前语言一致,别依赖全局状态;三种语言各打开一次,查看源码里公告容器和标题是否对应。
最后用这个标准收尾,英文页面出现英文公告,日文页面出现日文公告,切换语言不再空白。
