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

WPML same slug(url) different language

我有这个网站 :

示例。com/watches(手表是自定义 post 类型)

有两种可用语言:EN(默认语言)、GR。

当我更改为 GR 时(在 页面示例中。com/watches) 它重定向到 example.com/el/watches 这是正确的。

当我在 example.com/watches/rolex 上尝试更改语言时,它会重定向到 example.com/el/taxwatches/rolex-el 但我希望它只是 示例。com/el/watches/rolex/.

taxwatches 是我的自定义分类。

rolex-el 是该分类法中的术语。

有没有人遇到过这样的问题?

我尝试再次保存永久链接并检查我的 WMPL 设置,但我看不出有什么问题。

编辑 1:如果我手动转到 example.com/el/watches/rolex 它将正常工作。 example.com/el/watches/rolexexample.com/el/taxwatches/rolex-el 都有效。

编辑 2:据我了解,WPML 采用了 slug,有没有办法更改它以便采用名称?

好的,对于那些在使用多语言网站时遇到问题的人 - 但希望在 url 中使用 "same slugs"(永远不会是相同的 slug - 但看起来像那样)阅读下面。

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 将向您展示当您访问 page/post 时按下每个语言按钮时创建(并且您可以操纵它)的 url。

我还没有写出完整的解决方案,因为这真的取决于你想做什么。例如,如果在 url.

中找到,上面的代码帮助我删除了“tax

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

Polylang 和 Polylang Slug 这两个插件可以做到

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

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

您可以使用我的插件,它基于最新的 Polylang Pro 模块并满足您的需求:https://github.com/lufton/polylang-share-slug