WPML相同的slug(url)不同的语言

时间:2017-03-03 11:09:14

标签: wordpress wpml

我有这个网站:

example.com/watches(watch是自定义帖子类型)

有两种语言:EN(默认语言),GR。

当我更改为GR时(在页面上示例说明/ 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采用了slu ,,有没有办法改变它,所以需要名字?

2 个答案:

答案 0 :(得分:1)

好的,对于任何有多语言网站问题的人来说 - 但是想要在网址中使用“相同的slu”(永远不会是相同的slu - - 但看起来像那样)请阅读以下内容。

WPML使用从wordpress核心结构创建的slugs - 你不能有两个具有完全相同名称的slugs。如果默认语言是EN并且你有一个辅助语言,在我的情况下是GR,那么一个slug将是“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会在您访问页面/帖子时按下每个语言按钮时创建的(并且您可以操作它)的网址。

我没有写完整的解决方案,因为这实际上取决于你想做什么。例如,上面的代码帮助我实现删除“”,如果在网址中找到。

答案 1 :(得分:0)

这个答案提供了另一种方法来实现具有相同slug的多种语言

Polylang with Polylang Slug这两个插件可以做

https://wordpress.org/plugins/polylang/

https://github.com/grappler/polylang-slug/