WPML中ICL_LANGUAGE_CODE判断'en'或'es'失效问题求助
问题根源与修正方案
嘿,我一眼就看穿问题所在啦——你写的条件表达式(ICL_LANGUAGE_CODE==('en' or 'es'))在PHP里的逻辑完全不是你预期的那样!
为什么原代码会失效?
在PHP中,'en' or 'es'这种写法会被优先计算:非空字符串在布尔判断里会被视为true,所以'en' or 'es'的结果就是true。你的判断条件就变成了ICL_LANGUAGE_CODE == true,而任何非空的语言代码(比如'fr'、'de')都会被PHP自动转换为true,自然所有语言环境下都会显示内容。
至于你尝试的elseif写法没用,是因为原错误条件已经把所有情况都纳入了if分支,elseif根本没有执行的机会。
两种正确的修正写法
写法一:用逻辑或||连接独立判断
这是最直观的写法,适合少量语言的场景:
if (ICL_LANGUAGE_CODE == 'en' || ICL_LANGUAGE_CODE == 'es') {?> <?php do_action( 'tt_single_property_content_before' ); ?> <?php echo apply_filters( 'the_content', get_post_field( 'post_content', $single_property_id ) ); ?> <?php do_action( 'tt_single_property_content_after' ); ?> </section> <?php} else { }
写法二:用in_array函数(更适合多语言扩展)
如果以后需要添加更多语言,这种写法会更简洁易维护:
if (in_array(ICL_LANGUAGE_CODE, ['en', 'es'])) {?> <?php do_action( 'tt_single_property_content_before' ); ?> <?php echo apply_filters( 'the_content', get_post_field( 'post_content', $single_property_id ) ); ?> <?php do_action( 'tt_single_property_content_after' ); ?> </section> <?php} else { }
这两种写法都能准确判断当前语言是英文('en')或西班牙文('es'),只有这两种语言下才会显示对应的内容,其他语言则进入else分支保持为空。
内容的提问来源于stack exchange,提问作者Jolo
相关产品推荐
相关产品推荐

