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/rolex 和 example.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 这两个插件可以做到
您可以使用我的插件,它基于最新的 Polylang Pro 模块并满足您的需求:https://github.com/lufton/polylang-share-slug
我有这个网站 :
示例。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/rolex 和 example.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 这两个插件可以做到
您可以使用我的插件,它基于最新的 Polylang Pro 模块并满足您的需求:https://github.com/lufton/polylang-share-slug