Что такое таксономия? Рубрики, метки — это и есть таксономии.
То есть получается, что использовав упомянутую функцию, можно создать абсолютно независимые «рубрики» (или «метки»), с отдельным интерфейсом.
Короче говоря, когда во время разработки сайта начинает не хватать стандартных рубрик и меток — создаём таксономии.
register_taxonomy( $taxonomy, $object_type, $args );
Использование функции register_taxonomy()
Функцию нужно использовать на хуке init
, примерно так же, как и функцию register_post_type(). Пример использования:
add_action( 'init', 'true_register_taxonomy' ); function true_register_taxonomy() { $args = array( 'labels' => array( 'menu_name' => 'Направления' ), 'public' => true, ); register_taxonomy( 'destination', 'misha_aviatickets', $args ); }
После того, как вы вставили этот код, интерфейс таксономии появится под типами записей, к которым вы её прикрепили.
На что обратить внимание при создании таксономии?
Параметры массива $args
- label
- (строка) Название вашей таксономии, которое отобразится в админке. Обычно множественное число. Если не указан, то используется значение
labels[ 'name' ]
.
- labels
- (массив) Ярлыки для отображения в админке. По умолчанию используются ярлыки меток для неиерархичных таксономий и ярлыки рубрик для иерархичных.
Ниже – пример заполнения массива $labels
, единственное только не забывайте про локализацию.
$args = array( 'labels' => array( 'name' => 'Направления', // основное название во множественном числе 'singular_name' => 'Направление', // название единичного элемента таксономии 'menu_name' => 'Направления', // Название в меню. По умолчанию: name. 'all_items' => 'Все направления', 'edit_item' => 'Изменить направление', 'view_item' => 'Просмотр направления', // текст кнопки просмотра записи на сайте (если поддерживается типом) 'update_item' => 'Обновить направление', 'add_new_item' => 'Добавить новое направление', 'new_item_name' => 'Название нового направления', 'parent_item' => 'Родительское направление', // только для таксономий с иерархией 'parent_item_colon' => 'Родительское направление:', 'search_items' => 'Искать направления', 'popular_items' => 'Популярные направления', // для таксономий без иерархий 'separate_items_with_commas' => 'Разделяйте направления запятыми', 'add_or_remove_items' => 'Добавить или удалить направления', 'choose_from_most_used' => 'Выбрать из часто используемых направлений', 'not_found' => 'Направлений не найдено', 'back_to_items' => '← Назад к направлениям', ) )
- description
- (строка) Описание таксономии. Используется в REST API.
- public
- (логическое) Этот параметр автоматически задаёт значения по умолчанию для некоторых других параметров. По умолчанию
false
.
Иными словами:
$args = array( 'public' => true, // 'show_ui' => true, // 'publicly_queryable' => true, // 'show_in_nav_menus' => true, );
Подробнее о параметрах – ниже.
- publicly_queryable
- (логическое) нужно ли элементы данной таксономии сделать доступными на сайте. По умолчанию равен значению аргумента
public
.
- show_in_nav_menus
- (логическое) нужно ли элементы данной таксономии сделать доступными для добавления в меню сайта. По умолчанию: значение аргумента
public
.
- show_ui
- (логическое) нужно ли добавлять стандартный интерфейс в админке для редактирования и добавления таксономии. По умолчанию: значение аргумента
public
.
- show_in_menu
- (логическое) нужно ли добавлять ссылки на интерфейс таксономии в меню админки.
true
— подпункты в меню будут добавлены к типам записей, ассоциированных с данной таксономией,false
— хоть интерфейс для таксономий и будет доступен по прямой ссылке в админке, в меню он не появится,
По умолчанию: значение аргумента
show_ui
.
- show_tagcloud
- (строка) Нужно ли отображать облако меток в админке в интерфейсе данной таксономии. По умолчанию: значение аргумента
show_ui
.
- show_in_quick_edit
- (логическое) Нужно ли отображать данную таксономию в интерфейсе быстрого/массового редактирования постов. По умолчанию: значение аргумента
show_ui
.
- meta_box_cb
- (строка) Можно указать собственную функцию для отображения метабокса таксономии. По умолчанию для рубрик и других таксономий с иерархией используется функция
post_categories_meta_box()
в файле meta-boxes.php, для меток и других таксономий без иерархии – функцияpost_tags_meta_box()
. Метабокс не будет отображаться, если вы укажете значение параметра равнымfalse
.
- show_admin_column
- (логическое) Нужно ли автоматически создавать колонки в таблице с типами записей для данной таксономии, по умолчанию –
false
.
- show_in_rest
- (логическое) Влияет на то, появится ли метабокс данной таксономии в Gutenberg при редактировании записи произвольного типа, ассоциированного с ней.
- rest_base
- (строка) Ярлык таксономии в REST API. По умолчанию – название таксономии.
- hierarchical
- (логическое) Должна ли данная таксономия иметь иерархию (как Рубрики) или нет (как Метки). По умолчанию:
false
.
- rewrite
- (массив|логическое) устанавливает правила для постоянных ссылок в URL. Если в качестве значения данного параметра указать
false
, то правила для постоянных ссылок создаваться не будут. Передайтеtrue
, тогда в качестве ярлыка в URL будет использоваться название таксономииmisha.blog/destination/bali/
.- slug
- (строка) ярлык, используемый этой таксономии в урле (по умолчанию — название таксономии), например если мы укажем его
jfk123
, то урл примет видmisha.blog/jfk123/bali/
- with_front
- (логическое) нужно ли добавлять в постоянные ссылки значение
$wp_rewite->front
(по умолчанию —true
). Подробнее этот параметр разбирался тут на видео. - hierarchical
- (логическое) нужно ли для данной таксономии (если она с иерархией), учитывать родительские элементы и включать их в урл, например
misha.blog/destination/indonesia/bali/
.
- slug
- (строка) ярлык, используемый этой таксономии в урле (по умолчанию — название таксономии), например если мы укажем его
jfk123
, то урл примет видmisha.blog/jfk123/bali/
- with_front
- (логическое) нужно ли добавлять в постоянные ссылки значение
$wp_rewite->front
(по умолчанию —true
). Подробнее этот параметр разбирался тут на видео. - hierarchical
- (логическое) нужно ли для данной таксономии (если она с иерархией), учитывать родительские элементы и включать их в урл, например
misha.blog/destination/indonesia/bali/
.
- query_var
- (строка) Этим параметром вы можете изменить название параметра запроса, который по умолчанию равен названию таксономии. Сейчас объясню. Параметр запроса query_var это то, что мы используем при построении циклов, например при помощи WP_Query, пример:
new WP_Query( array( 'destination' => $term_name ) )
, кроме того, оно используется в урлах/?destination=$term_name
. Если вы вдруг захотите установить этот параметр в значениеfalse
, то вы отключите вышеперечисленные конструкции, однако у вас по-прежнему будут работать запросы видаWP_Query( array( 'taxonomy'=>'destination', 'term'=>$term_name) )
.
- hierarchical
- (логическое) Должна ли данная таксономия иметь иерархию (как Рубрики) или нет (как Метки). По умолчанию:
false
.
- default_term
- (строка) Элемент таксономии, который будет автоматически присваиваться к посту, если никакой другой не был указан при его создании (что-то типо рубрики «Без рубрики»). Тут вы можете указать ID, ярлык, название уже существующего элемента таксономии, либо передать эти значения в виде массива, чтобы элемент таксономии был создан в случае, если его не существует
array( 'name' => 'Бали', 'slug' => 'bali' )
. Также можно передать и элемент массиваdescription
в качестве описания элемента таксономии.
- sort
- (логическое) Должна ли данная таксономия запоминать порядок, в котором элементы таксономии добавляются на сайте. Этот порядок будет сохраняться в отдельной колонке в таблице в базе данных
term_order
, которая при указании этого параметра в значении по умолчаниюfalse
будет содержать только нулевые значения.
- capabilities
- (массив) Позволяет задать произвольный массив прав для таксономии.
Давайте рассмотрим на примере нашей таксономии – допустим мы хотим создать для неё свои собственные права.
$args = array( 'capabilities' => array( 'manage_terms' => 'manage_destination', 'edit_terms' => 'edit_destination', 'delete_terms' => 'delete_destination', 'assign_terms' => 'assign_destination', ) );
После того, как вы это сделали, вам нужно разметить эти новые права, например:
$admins = get_role( 'administrator' ); $admins->add_cap( 'manage_destination' ); $admins->add_cap( 'edit_destination' ); $admins->add_cap( 'delete_destination' ); $admins->add_cap( 'assign_destination' );
Разметить можно ещё и при помощи плагина кстати.
Более подробно обо всём этом процессе можете почитать тут (там ещё и видео есть).