感谢拉迪斯拉夫的提议,
使用icl_object_id
是一个好主意,但是在解决这个问题时,我意识到我不必担心内容是否设置了“什么都不做”的值,因为我已经知道了,而且它不会改变. 文档说明您必须关闭“使主题可以使用多种语言”,并且很难说这将如何影响主题,因为它是 ThemeForest 主题。
我希望有一个真正灵活的解决方案,因为这将解决我发现 WPML 如何管理不需要翻译的内容的问题。
但是,根据您的建议,我继续寻找答案,并为我的问题找到解决方案的开始。
首先,要编辑链接,我必须设置一个与我要编辑的链接类型相对应的“add_filter”。
add_filter( 'post_type_link', 'add_lang_fr', 10, 2 );
add_filter( 'term_link', 'add_lang_fr', 10, 2 );
然后,我测试 url 以确保它们与需要添加 ?lang=fr 的内容相匹配。
function add_lang_fr( $url, $post ) {
if ('fr' == ICL_LANGUAGE_CODE) { // if current language is fr
if ( 'article' == get_post_type( $post ) || FALSE !== strpos($url, 'article-tag') ) { // if link goes to a CPT 'article' or have 'article-tag' in url
return add_query_arg('lang', 'fr', $url);
}
}
return ($url);
}
回答我最初的问题:
- 如何根据 url 检测内容是否具有“什么都不做”的值?- 我使用不同的方式过滤需要添加 ?lang=fr 的 url
- 如何在这些内容的 url 中即时添加 '?lang=fr' ?-
add_query_arg
是关键,因为它允许在 url 上添加查询参数......这正是我所需要的。
- 可以在不减慢网站速度的情况下做到这一点吗?-使用这个解决方案,我有 150 个额外的请求和 +16 秒的加载(测试的页面有大约 2000 个已编辑的 url)。
有没有办法减少调用次数并改善页面加载?