Если вы уже работали с WordPress, то представляете, что рубрики публикаций можно вкладывать друг в друга, как это делают с папками и файлами на компьютере. Таксономии (правила) связывают в WordPress только записи и хранятся отдельно. Фактически, рубрики - это и есть отдельные записи в таблице базы данных. А точнее, для их хранения используются таблицы "wp_term", "wp_term_taxonomy" и "wp_term_relationships". Как можно заметить из названий таблиц, элементы таксономии называются "term".
Таксономии разделяются на два типа: древовидные и линейные (плоские). К древовидным относятся рубрики. К линейным - метки. Древовидные таксономии могут быть как родительскими, так и дочерними (папки и подпапки). А линейные находятся только на одном уровне.
Существуют базовые такономии WordPress, к которым относятся:
- category - рубрики
- post_tag - метки
- post_format - форматы записей
- nav_menu - определяет меню навигации.
Если в меню создать произвольную ссылку, то в таблице с записями "wp_posts" появится запись с типом "nav_menu_item". Все данные пункта меню (ссылка, анкорный текст) хранятся в метаполях этой записи.
Если появляется необходимость создать свою собственную таксономию, то можно воспользоваться функцией "register_taxonomy":
register_taxonomy( $taxonomy, $object_type, $args );
$taxonomy | строка | Название таксономии. Может содержать только строчные латинские буквы и подчёркивания. Длина не более 32 символов. |
$object_type | строка/ массив | Название типов постов, к которым относится таксономия. Если указать "post", то у новая возможность классификации (таксономия) появится у обычных публикаций. |
$args | массив/ строка/ объект | Дополнительные аргументы(см. таблицу ниже) |
Ключ | Тип данных | Описание |
---|---|---|
label | строка | Название таксономии (будет отображаться в панели администрирования) |
description | строка | Описание таксономии |
labels | массив | Массив с заголовками таксономии. Ключи и значения массива смотреть в следующей таблице. |
public | логический | В положении "true" отображает таксономию в панели администрирования. |
show_ui | логический | В положении "true" отображает блок управления таксономией в панели администрирования. |
show_in_menu | логический | В положении "true" отображает элементы таксономии в меню панели администрирования. |
show_in_nav_menus | логический | В положении "true" отображает элементы таксономии в навигационном меню. |
show_tagcloud | логический | В положении "true" создаёт облако элементов таксономии. |
show_in_rest | логический | В положении "true" включает таксономию в REST API. |
rest_base | строка | Ярлык в REST API. По умолчанию, название таксономии. |
rest_controller_class | строка | Название класса контроллера в REST API |
hierarchical | логический | В положении "true" даёт древовидную таксономию (рубрики). В "false" - линейную (метки). |
update_count_callback | строка | Название функции, которая пересчитывает количество записей под этой таксономией. Значения по умолчанию: _update_post_term_count для таксономий записей. _update_generic_term_count для таксономий объектов (к примеру, пользователей). |
rewrite | логический | Возможна ли перезапись данных "true/false" |
publicly_queryable | логический | В положении "true" позволяет пользователям из публичного раздела сайта получить доступ к элементам таксономии |
query_var | строка/ логический | Позволяет добавить/изменить дополнительный запрос. |
capabilities | массив | Права таксономии: "edit_terms" - изменение, значение по умолчанию: "manage_categories" "manage_terms" - управление, значение по умолчанию: "manage_categories" "assign_terms" - добавление, значение по умолчанию: "edit_posts" "delete_terms" - удаление, значение по умолчанию: "manage_categories" |
meta_box_cb | строка | Callback функция, которая отвечает за отображение таксономии в метабоксе. Значения: "post_categories_meta_box" - показывать как категории, "post_tags_meta_box" - показывать как метки, "false" - не показывать вообще. |
meta_box_sanitize_cb | callable | Функция для фильтрации (очистки) данных при сохранении таксономии. |
show_admin_column | логический | Позволить "true" или запретить "false" автосоздание колонки таксономии в таблице ассоциативного типа записи. |
show_in_quick_edit | логический | Показывать ли в панели быстрого редактирования записи |
sort | логический | Запоминать ли порядок создания терминов. В положении "true", то сортировка идёт по полю "term_order", иначе по "name" |
default_term | строка/ массив | Термин по умолчанию. Чтобы создать термин, указать массив с ключами: "name" (название), "slug" (ярлык), "description" (описание) |
_builtin | логический | В положении "true" означает, что эта таксономия родная для WordPress. Иначе пользовательская (добавлена вручную). |
Ключ | Описание |
---|---|
name | Название таксономии в множественном числе. К примеру, "Метки". По умолчанию _x( 'Post Tags', 'taxonomy general name' ) или _x( 'Categories', 'taxonomy general name' ); |
singular_name | Название для элемента этой таксономии в единственном числе. К примеру, "Метка". По умолчанию _x( 'Post Tag', 'taxonomy singular name' ) или _x( 'Category', 'taxonomy singular name' ); |
menu_name | Текст для названия пункта меню. По умолчанию используется значение из параметра name; |
search_items | Текст "Поиск меток" или "Поиск категорий" для поиска элемента таксономии. По умолчанию: __( 'Search Tags' ) или __( 'Search Categories' ); |
popular_items | Текст "Популярные метки" или "Популярные категории" для блока популярных элементов. По умолчанию: __( 'Popular Tags' ) или null; |
all_items | Текст "Все метки" или "Все категории" для списка всех элементов таксономии. По умолчанию: __( 'All Tags' ) или __( 'All Categories' ); |
parent_item | Текст "Родительская категория" для задания родительского элемента таксономии. По умолчанию нет или __( 'Parent Category' ); |
parent_item_colon | Текст "Родительская категория" для задания родительского элемента таксономии. По содержанию аналогичен значению в предыдущем свойстве "parent_item", но с двоеточием в конце. По умолчанию: __( 'Parent Category:' ); |
edit_item | Текст для редактирования данных элемента таксономии. По умолчанию: __( 'Edit Tag' ) или __( 'Edit Category' ); |
update_item | Текст для обновления данных элемента таксономии. По умолчанию: __( 'Update Tag' ) или __( 'Update Category' ); |
add_new_item | Текст для добавления нового элемента таксономии. По умолчанию: __( 'Add New Tag' ) или __( 'Add New Category' ); |
view_item | Текст для просмотра таксономии ("Посмотреть метку" или "Посмотреть категорию"). |
new_item_name | Текст для создания нового элемента таксономии. По умолчанию: __( 'New Tag Name' ) или __( 'New Category Name' ); |
add_or_remove_items | Текст "удаленить или добавить тег", который используется в панели администрирования при отключенном javascript. Только для линейной таксономии. По умолчанию: __( 'Add or remove tags' ) или null; |
choose_from_most_used | Текст "выберите из часто используемых", который показывается при редактировании публикации. Только для линейной таксономии. По умолчанию: __( 'Choose from the most used tags' ) или null; |
popular_items | Текст для списка популярных терминов. Только для линейной таксономии. По умолчанию: "Популярные метки". |
separate_items_with_commas | Текст-предупреждение "Разделяйте метки запятыми". Только для линейной таксономии. По умолчанию: __( 'Separate tags with commas' ) или null. |
add_or_remove_items | Текст для добавления или удаления терминов. Только для линейной таксономии. По умолчанию: "Добавить или удалить метки". |
choose_from_most_used | Текст "Выбрать из часто используемых". Только для линейной таксономии. |
not_found | Текст "не найдено", который будет показан в списке часто используемых терминов, если таковых нет. |
<?php
// создание линейной таксономии для авторов книг
register_taxonomy('writer', 'book', array(
'hierarchical' => false,
'show_ui' => true,
'query_var' => true,
'labels' => array(
'name' => _x('Авторы книг', 'taxonomy general name'),
'singular_name' => _x('Автор книги', 'taxonomy singular name'),
'search_items' => __('Поиск автора'),
'popular_items' => __('Популярные авторы'),
'all_items' => __('Все авторы'),
'parent_item' => null, // нет родителя
'parent_item_colon' => null, // нет родителя
'edit_item' => __('Изменить данные автора'),
'update_item' => __('Обновить данные автора'),
'add_new_item' => __('Добавить нового автора'),
'new_item_name' => __('Имя нового автора'),
'menu_name' => __('Авторы'),
'add_or_remove_items' => __('Добавить или удалить автора'),
'choose_from_most_used' => __('Популярные авторы'),
'separate_items_with_commas' => __('Разделяйте имена авторов запятыми'),
),
));
// создание древовидной таксономии для жанров книг
register_taxonomy('genre', array('book'), array(
'hierarchical' => true,
'show_ui' => true,
'query_var' => true,
'labels' => array(
'name' => _x( 'Жанры книг', 'taxonomy general name' ),
'singular_name' => _x( 'Жанр книги', 'taxonomy singular name' ),
'search_items' => __('Поиск по жанрам'),
'all_items' => __('Все жанры'),
'parent_item' => __('Основной жанр'),
'parent_item_colon' => __('Основной жанр:'),
'edit_item' => __('Изменить жанр'),
'update_item' => __('Обновит жанр'),
'add_new_item' => __('Добавить жанр'),
'new_item_name' => __('Название нового жанра'),
'menu_name' => __('Жанр'),
),
));