WPML

При регистрации произвольных типов записей вручную WordPress позволяет задать отдельный слаг архива. От того, как Вы это настроите, зависит, будет ли слаг переводиться на Ваш дополнительный язык или нет.

При регистрации произвольных типов записей вручную Вы можете задать отдельный слаг архива с помощью функции has_archive.

WPML позволяет задать для has_archive строковое значение. Однако если строковому значению присвоено что-то отличное от rewrite['slug'], или не задан слаг названия произвольного типа записи, слаг архива не будет переводимым.

Настройка переводимого слага


В этом примере кода мы задаем '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' => __( 'Books', 'textdomain' ),	 	 
            'singular_name' => __( 'Book', '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')	 	 
      )	 	 
   );	 	 
}	 	 

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

В этом примере кода мы задаем определенную строку для параметра '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' => __( 'Books', 'textdomain' ),	 	 
            'singular_name' => __( 'Book', 'textdomain' )	 	 
         ),	 	 
         'public' => true,	 	 
         'has_archive' => 'my-books', // Do not use the gettext functions for this parameter	 	 
         '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')	 	 
      )	 	 
   );	 	 
}	 	 

Поиск и устранение неисправностей с настраиваемыми слагами


Некоторые темы оформления и плагины позволяют администратору сайта задавать произвольные слаги для своих произвольных типов записей и произвольных таксономий.

Если Ваши переведенные произвольные слаги возвращают ошибку 404, проверьте следующее:


  • Произвольный тип всегда должен регистрироваться с одним и тем же слагом во всех запросах: для каждого языка, фронтенда, админ-панели, AJAX, heartbeat и т. д. Поэтому в 'rewrite' => [ 'slug' => $my_custom_slug ], значение $my_custom_slug не должно меняться от одного запроса к другому, даже если оно берется из опции (или любой произвольной настройки).

  • WPML поддерживает только перевод произвольного слага (при регистрации произвольного типа), но не произвольной структуры постоянных ссылок.

  • Если произвольный слаг хранится как опция, он не должен быть зарегистрирован как admin-texts в файле wpml-config.xml.

  • После обновления значения произвольного слага тема оформления/плагин также должны сбросить правила перезаписи (вызвав flush_rewrite_rules();).

Автор: Amir · Последнее обновление: 30 мая 2024