register_taxonomy() — создание таксономии

Что такое таксономия? Рубрики, метки — это и есть таксономии.

То есть получается, что использовав упомянутую функцию, можно создать абсолютно независимые «рубрики» (или «метки»), с отдельным интерфейсом.

Короче говоря, когда во время разработки сайта начинает не хватать стандартных рубрик и меток — создаём таксономии.

register_taxonomy( $taxonomy, $object_type, $args );

Также рекомендую вам свой видеокурс по натяжке готовой вёрстки на WordPress.

Использование функции 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 );
}

После того, как вы вставили этот код, интерфейс таксономии появится под типами записей, к которым вы её прикрепили.

пример регистрации таксономии WordPress функцией register_taxonomy()
Так как мы указали только menu_name параметра labels, то по умолчанию таксономия будет использовать лейблы меток (если она без иерархии) или лейблы рубрик (если с иерархией).

На что обратить внимание при создании таксономии?

  • Первый параметр register_taxonomy() – это название (ярлык) таксономии $taxonomy, который должен быть не более 32 символов, ну и не забывайте, что не все символы там можно использовать, рекомендую только строчные символы, числа, _ или -a-z0-9_-.
  • Второй параметр функции – это название типов записей, с которыми её нужно ассоциировать, например я тут указал тип записи, который мы регистрировали в этом уроке, также можно указать несколько типов записей в виде массива, например array( 'post', 'page' ). Кроме того, если вы регистрируете таксономию к типу записи, который зарегистрирован через другой плагин или тему, то рекомендуется использовать функцию register_taxonomy_for_object_type() для создания ассоциаций.
  • Третий параметр функции – массив аргументов, позволяющих настроить нашу таксономию, про него подробнее ниже.

Параметры массива $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'            => '← Назад к направлениям',
	)
)
Пример заполнения массива $labels в функции register_taxonomy()
description
(строка) Описание таксономии. Используется в REST API.
public
(логическое) Этот параметр автоматически задаёт значения по умолчанию для некоторых других параметров. По умолчанию false.
publicfalsetrue
show_uifalsetrue
publicly_queryablefalsetrue
show_in_nav_menusfalsetrue

Иными словами:

$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/.
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' );

Разметить можно ещё и при помощи плагина кстати.

Более подробно обо всём этом процессе можете почитать тут (там ещё и видео есть).

Также рекомендую вам свой видеокурс по натяжке готовой вёрстки на WordPress.

Видеоурок

Миша

Впервые познакомился с WordPress в 2009 году. Организатор и спикер на конференциях WordCamp. Преподаватель в школах Epic Skills и LoftSchool.

Если вам нужна помощь с сайтом или разработка с нуля на WordPress / WooCommerce — пишите. Я и моя команда будем рады вам помочь!

Комментарии — 42

Комментирование этого поста более не доступно.