我有这个网站:
example.com/watches(手表是自定义帖子类型)
有两种可用语言:EN(默认语言),GR。
当我更改为GR时(在example.com/watches页上)
它将重定向到example.com/el/watches。
当我在example.com/watches/rolex上并且尝试更改语言时,它会重定向到example.com/el/taxwatches/rolex-el,但我希望它只是example.com/el/watches/rolex/。
taxwatches是我的自定义分类法。
Rolex-el是该分类法中该术语的标语。
有人遇到过这样的问题吗?
我试图再次保存永久链接并检查我的WMPL设置,但看不到任何错误。
编辑1:如果我手动转到example.com/el/watches/rolex,它将正常工作。
example.com/el/watches/rolex和example.com/el/taxwatches/rolex-el均可使用。
编辑2:根据我的理解,WPML会带来一些麻烦,有没有办法更改它,所以它会采用名称?
最佳答案
好吧,对于任何在多语言站点上遇到问题的人-想要在网址中包含“相同的子弹”(永远不会是相同的子弹-但看起来像这样),请阅读以下内容。
WPML使用从wordpress核心结构创建的段-您不能有两个名称完全相同的段。如果默认语言是EN,并且您有一个辅助语言(在我的情况下是GR),则一个子词将是“ myslug”,另一个子词是“ myslug-gr”(您可以通过WPML设置自定义此“ -gr”)。
在functions.php中,您可以过滤“ wpml_ls_filter”函数,该函数在创建语言切换器时触发。
代码如下:
add_filter('icl_ls_languages', 'wpml_ls_filter');
function wpml_ls_filter($languages) {
foreach ($languages as $lang_code => $language) {
$mTempString = $languages[$lang_code]['url'];
echo $mTempString; // HERE
// If "tax" is found in that string, replace it with "" - remove it.
if (strpos($mTempString, "tax") !== false) {
$languages[$lang_code]['url'] = str_replace("tax", "", $mTempString);
}
}
return $languages;
}
上面的
echo
将向您显示在每次访问页面/帖子时按下时每个语言按钮创建的URL(并且您可以对其进行操作)。我尚未编写完整的解决方案,因为这实际上取决于您要执行的操作。例如,上面的代码帮助我实现了删除网址中的“税”。