WPML тот же slug (url) другой язык

У меня есть этот сайт:

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 берет слаги, есть ли способ изменить его, чтобы он брал имена?


person Antonios Tsimourtos    schedule 03.03.2017    source источник


Ответы (2)


Итак, для тех, у кого есть проблемы с многоязычными сайтами, но которые хотят иметь «одинаковые слаги» в URL-адресах (никогда не будут одинаковыми слагами, но будут выглядеть так), прочитайте ниже.

WPML использует слаги, созданные из базовой структуры WordPress — у вас не может быть двух слагов с одинаковыми именами. Если язык по умолчанию — EN, а у вас есть вторичный, в моем случае GR, то один слаг будет «myslug», а другой — «myslug-gr» (вы можете настроить этот «-gr» в настройках WPML).

В 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-адрес, который создается (и вы можете манипулировать им) каждой языковой кнопки при нажатии каждый раз, когда вы посещаете страницу/публикацию.

Я не написал полное решение, потому что это действительно зависит от того, что вы хотите сделать. Например, приведенный выше код помог мне удалить «налог», если он найден в URL-адресе.

person Antonios Tsimourtos    schedule 03.03.2017
comment
@BGBruno Вам нужно будет перейти к файлам темы Wordpress › functions.php - person Antonios Tsimourtos; 01.08.2018

Этот ответ предоставляет альтернативный способ достижения нескольких языков с одним и тем же ярлыком.

Polylang с Polylang Slug, которые могут выполнять эти 2 плагина

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

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

person Amos    schedule 26.05.2018