我有这个网站:

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(并且您可以对其进行操作)。

我尚未编写完整的解决方案,因为这实际上取决于您要执行的操作。例如,上面的代码帮助我实现了删除网址中的“税”。

09-26 04:51