Таксономия в WordPress

"Таксономия" - это закон/принцип расположения чего-либо. Говоря о WordPress, под таксономией часто подразумевают расположение записей. А точнее деление по рубрикам и вложенность рубрик друг в друга.

Если вы уже работали с 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 массив/ строка/ объект Дополнительные аргументы(см. таблицу ниже)
Подробнее стоит остановиться на последнем параметре "$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. Иначе пользовательская (добавлена вручную).
Массив "labels" содержит надписи, которые используются для обозначения блоков и кнопок, чтобы пользователь мог сориентироваться в интерфейсе. Разберём этот массив по ключам и их значениям:
Ключ Описание
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 Текст "не найдено", который будет показан в списке часто используемых терминов, если таковых нет.
Попробуем продемонстрировать код для создания собственной таксономии. Сделаем это для древовидной и линейной структуры, выбрав в качестве объектов жанры книг (древовидное) и авторов книг (линейное). Тогда для создания такономии необходимо в файл functions.php написать следующий код:
<?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'         => __('Жанр'),
   ),
));
MouseDC.ru - хостинг, виртуальный хостинг, покупка доменов, проверка доменов, WHOIS, курсы создания сайтов, вебинары по созданию, курсы разработки сайтов, доработка сайтов, сопровождение сайтов, разработка сайтов, техподдержка сайтов
Была ли эта статья полезна? Есть вопрос?
Cмотрите другие статьи: