WPML позволяет использовать уникальные URL-адреса для пользовательского контента на разных языках, включая перевод краткого заголовка записи и имени пользовательского типа записи.

URL-адреса пользовательских типов записей включают имя типа записи и название страницы. Обычно пользовательские типы записей на разных языках будут выглядеть следующим образом:

  • /дома/мой-зеленый-дом/
  • /houses/my-green-house/

Первая полужирная часть URL-адреса — тип записи. Вторая часть — название страницы.

Чтобы перевести название страницы, нажмите кнопку Изменить возле поля с постоянной ссылкой в редакторе записей. Так как WPML использует разные записи для каждого языка, их имена можно задать отдельно.

Редактирование постоянных ссылок страниц
Редактирование постоянных ссылок страниц

Перевод имен пользовательских типов записей

Чтобы WPML мог переводить имена пользовательских типов записей, необходимо использовать модуль перевода строк.

Объявление пользовательских типов записей в PHP

Если вы регистрируете пользовательские типы записей вручную, через PHP, WPML обработает эти вызовы и зарегистрирует краткий заголовок на перевод.

Объявление пользовательских типов записей с Types

Чтобы определить пользовательские типы записей без PHP, можно воспользоваться нашим плагином Types. Types автоматически объявит пользовательские типы записей, чтобы вы могли перевести их в WPML.

Перейдите в Types и измените пользовательский тип записи. Если он не включен для перевода имен, вы увидите ссылку на экран настройки WPML:

Ссылки Types к настройкам локализации кратких заголовков WPML
Ссылки Types к настройкам локализации кратких заголовков WPML

Включение локализации имен пользовательских типов записей в WPML

Затем перейдите в WPML -> Настройки. Вы увидите новый раздел для локализации кратких заголовков.

Контрольный список для включения локализации имени пользовательского типа записи:

1. Убедитесь, что пользовательский тип записи можно перевести

Установите флажок пользовательского типа записи на Перевести
Установите флажок пользовательского типа записи на Перевести

2. Включите перевод кратких заголовков на сайте

Включение перевода базовых пользовательских кратких заголовков записей и систематики
Включение перевода базовых пользовательских кратких заголовков записей и систематики

3. Выберите использование разных кратких заголовков на разных языках

Установите флажок, чтобы разрешить локализацию каждого имени пользовательских типов записей
Установите флажок, чтобы разрешить локализацию каждого имени пользовательских типов записей

Теперь все готово для перевода имен пользовательских типов записей. Добавьте их переводы, нажмите Сохранить, после чего они должны появиться в URL-адресах.

Перевод архивов пользовательских типов записей

Если вы регистрируете пользовательские типы записей вручную, WordPress позволяет задать определенный короткий заголовок архива с помощью:

has_archive

Начиная с версии 3.2, WPML делает возможным задавать has_archive для строки. Но если rewrite['slug'], не задано в качестве значения строки или не задан краткий заголовок имени ПТЗ, краткий заголовок архива нельзя будет перевести.

Пример кода 1:

В этом примере кода мы задали 'has_archive' => true. Если исходить из того, что краткий заголовок book был переведен на испанский как libro, то ссылки на архив будут выглядеть следующим образом:

  • Английский (язык по умолчанию): http://mydomain.tld/book/
  • Испанский (второй язык): http://mydomain.tld/es/libro/
add_action( 'init', 'create_post_type' );
function create_post_type() {
 register_post_type( 'book',
 array(
 'labels' => array(
 'name' => __( 'Книги', 'textdomain' ),
 'singular_name' => __( 'Книга', 'textdomain' )
 ),
 'public' => true,
 'has_archive' => true,
 'publicly_queryable' => true,
 'exclude_from_search' => false,
 'show_ui' => true,
 'show_in_menu' => true,
 'query_var' => true,
 'rewrite' => array('slug' => 'book'),
 'supports' => array('title','editor', 'custom-fields','thumbnail')
 )
 );
}

Пример кода 2:

В этом примере кода мы задали определенную строку для параметра 'has_archive' => 'my-books'. Теперь ссылки на архив выглядят так:

  • Английский (язык по умолчанию): http://mydomain.tld/my-books/
  • Испанский (второй язык): http://mydomain.tld/es/my-books/
add_action( 'init', 'create_post_type' );
function create_post_type() {
 register_post_type( 'book',
 array(
 'labels' => array(
 'name' => __( 'Книги', 'textdomain' ),
 'singular_name' => __( 'Книга', 'textdomain' )
 ),
 'public' => true,
 'has_archive' => 'my-books', // Не использовать функции gettext для этого параметра
 'publicly_queryable' => true,
 'exclude_from_search' => false,
 'show_ui' => true,
 'show_in_menu' => true,
 'query_var' => true,
 'rewrite' => array('slug' => 'book'),
 'supports' => array('title','editor', 'custom-fields','thumbnail')
 )
 );
}