register_taxonomy

Добавляет (регистрирует) новую (пользовательскую) таксономию. Можно перезаписать существующую таксономию.

Функцию желательно вызывать во время события init (хук):

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

Шаблон использования

// хук для регистрации
add_action('init', 'create_taxonomy');
function create_taxonomy(){
	// заголовки
	// весь список: http://wp-kama.ru/function/get_taxonomy_labels
	$labels = array(
		'name'              => 'Genres',
		'singular_name'     => 'Genre',
		'search_items'      => 'Search Genres',
		'all_items'         => 'All Genres',
		'parent_item'       => 'Parent Genre',
		'parent_item_colon' => 'Parent Genre:',
		'edit_item'         => 'Edit Genre',
		'update_item'       => 'Update Genre',
		'add_new_item'      => 'Add New Genre',
		'new_item_name'     => 'New Genre Name',
		'menu_name'         => 'Genre',
	); 
	// параметры
	$args = array(
		'label'                 => '', // определяется параметром $labels->name
		'labels'                => $labels,
		'description'           => '', // описание таксономии
		'public'                => true,
		'publicly_queryable'    => null, // равен аргументу public
		'show_in_nav_menus'     => true, // равен аргументу public
		'show_ui'               => true, // равен аргументу public
		'show_tagcloud'         => true, // равен аргументу show_ui
		'show_in_rest'          => null, // добавить в REST API
		'rest_base'             => null, // $taxonomy
		'hierarchical'          => false,
		'update_count_callback' => '',
		'rewrite'               => true,
		//'query_var'             => $taxonomy, // название параметра запроса
		'capabilities'          => array(),
		'meta_box_cb'           => null, // callback функция. Отвечает за html код метабокса (с версии 3.8): post_categories_meta_box или post_tags_meta_box. Если указать false, то метабокс будет отключен вообще
		'show_admin_column'     => false, // Позволить или нет авто-создание колонки таксономии в таблице ассоциированного типа записи. (с версии 3.5)
		'_builtin'              => false,
		'show_in_quick_edit'    => null, // по умолчанию значение show_ui
	);
	register_taxonomy('taxonomy', array('post'), $args );
}
$taxonomy(строка) (обязательный)
Название создаваемой таксономии.
Может содержать только строчные латинские символы, числа и _, т.е. a-z0-9_.
По умолчанию: ”
$object_type(строка/массив) (обязательный)
Название типов постов, к которым будет привязана таксономия. В этом параметре, например, можно указать ‘post’, тогда у обычных постов WordPress появится новая таксономия (возможность классификации).
По умолчанию: ”
$args(массив) (обязательный)
Массив аргументов определяющий признаки таксономии.
По умолчанию: нет

Аргументы параметра $args


  • label (строка)


  • labels (массив)


  • public (логический)


  • show_in_nav_menus (логический)


  • show_ui (логический)


  • show_tagcloud (логический)


  • show_in_rest (логический)


  • rest_base (строка)


  • rest_controller_class (строка)


  • hierarchical (логический)


  • update_count_callback (строка)


  • rewrite (массив/логический)


  • publicly_queryable (логический)


  • query_var (строка/логический)


  • capabilities (массив)


  • meta_box_cb (строка)


  • show_admin_column (логический)


  • sort (логический)


  • show_in_quick_edit (логический)


  • _builtin (логический) (не для обычного использования)

label(строка)
Название таксономии во множественном числе (для отображения в админке).
По умолчанию: используется значение аргумента $labels->name

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 – текст для родительского элемента таксономии. Этот аргумент не используется для не древовидных таксономий. По умолчанию null или __( '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' );

  • separate_items_with_commas – текст описывающий, что элементы нужно разделять запятыми (для блога в админке). Не работает для древовидного типа. По умолчанию __( 'Separate tags with commas' ) или null;

  • add_or_remove_items – текст для “удаления или добавления элемента”, который используется в блоке админке, при отключенном javascript. Не действует для древовидных таксономий. По умолчанию __( 'Add or remove tags' ) или null;

  • choose_from_most_used – текст для блога при редактировании поста “выберите из часто используемых”. Не используется для древовидных таксономий. По умолчанию __( 'Choose from the most used tags' ) или null;

  • popular_items – текст для поиска популярных терминов. Этот параметр не используется для древовидных таксономий. По умолчанию: “Популярные метки” или null.

  • separate_items_with_commas – текст говорящий о том, что термины (метки) нужно разделять запятыми. Не используется для древовидных таксономий. По умолчанию: “Разделяйте метки запятыми” или null.

  • add_or_remove_items – текст для добавления или удаления терминов. Не используется для древовидных типов. По умолчанию: “Добавить или удалить метки”. или null.

  • choose_from_most_used – Текст “Выбрать из часто используемых”. Не используется для древовидных типов.

  • not_found – Текст “не найдено”, который отображается, если при клике на часто используемые ни один термин не был найден.

Весь список смотрите в описании get_taxonomy_labels()

По умолчанию: заголовки меток/категорий

public(логический)
Показывать ли эту таксономию в интерфейсе админ-панели. Это значение передается параметрам publicly_queryable, show_ui, show_in_nav_menus если для них не установлено свое значение.
По умолчанию: true

show_in_nav_menus(логический)
true даст возможность выбирать элементы этой таксономии в навигационном меню.
По умолчанию: если нет, равно аргументу public

show_ui(логический)
Показывать блок управления этой таксономией в админке.
По умолчанию: если нет, равно аргументу public

show_tagcloud(логический)
Создать виджет облако элементов этой таксономии (как облако меток).
По умолчанию: если нет, равно аргументу show_ui

show_in_rest(логический)
Нужно ли включать таксономию в REST API. С WP 4.7.

rest_base(строка)
Ярлык в REST API. По умолчанию, название таксономии. С WP 4.7.
По умолчанию: $taxonomy

rest_controller_class(строка)
Название класса контроллера в REST API. С WP 4.7.
По умолчанию: ‘WP_REST_Terms_Controller’

hierarchical(логический)
true – таксономия будет древовидная (как категории). false – будет не древовидная (как метки).
По умолчанию: false

update_count_callback(строка)
Название функции, которая будет вызываться для обновления количества записей в данной таксономии, для типа(ов) записей которые ассоциированы с этой таксономией.
По умолчанию: нет

rewrite(массив/логический)

false – отключит перезапись. Если указать массив, то можно задать произвольный параметр запроса (query var). А по умолчанию будет использоваться параметр $taxonomy.

Возможные аргументы массива:

  • slug – предваряет посты этой строкой. По умолчанию название таксономии;
  • with_front – позволяет установить префикс для постоянной ссылки. По умолчанию true;
  • hierarchical – true – включает поддержку древовидных URL (с версии 3.1). По умолчанию false;

Массив передается в функцию add_permastruct(), поэтому тут также можно указать аргументы этой функции.

По умолчанию: true

publicly_queryable(логический)
Имеют ли пользователи доступ к элементам таксономии во внешней части сайта. Если не установлено, то берется значение параметра public. C версии 4.5.
По умолчанию: null (равен аргументу public)

query_var(строка/логический)
Если указать false, выключит параметры запроса и сам запрос. Или можно указать строку, чтобы изменить параметр запроса (query var). По умолчанию будет использоваться параметр $taxonomy – название таксономии.
По умолчанию: $taxonomy

capabilities(массив)

Массив прав для этой таксономии:

  • manage_terms – ‘manage_categories’
  • edit_terms – ‘manage_categories’
  • delete_terms – ‘manage_categories’
  • assign_terms – ‘edit_posts’

По умолчанию: нет

meta_box_cb(строка)
callback функция. Отвечает за то, как будет отображаться таксономия в метабоксе (с версии 3.8). Встроенные названия функций: post_categories_meta_box – показывать как категории, post_tags_meta_box – показывать как метки.Если указать false, то метабокс будет отключен вообще.
По умолчанию: null

show_admin_column(логический)
Позволить или нет авто-создание колонки таксономии в таблице ассоциированного типа записи. (с версии 3.5)
По умолчанию: false

sort(логический)
Следует ли этой таксономии запоминать порядок в котором созданные элементы (термины) прикрепляются к объектам (записям).
По умолчанию: null

show_in_quick_edit(логический)
Показывать ли таксономию в панели быстрого редактирования записи (в таблице, списке всех записей, при нажатии на кнопку “свойства”). С версии 4.2.
По умолчанию: null (значение show_ui)

_builtin(логический) (не для обычного использования)
Параметр предназначен для разработчиков. Если переключить на true, то это будет означать что эта таксономия относится к внутренним таксономия WordPress и не является встроенной (кастомной).
По умолчанию: false

Примеры

#1. Регистрация таксономий

Пример регистрации двух таксономий “genres” и “writers” для постов типа “book”. Этот код можно вставить в файл темы functions.php. Некоторые аргументы рассчитаны на версию 3.1+:

// хук, через который подключается функция
// регистрирующая новые таксономии (create_book_taxonomies)
add_action( 'init', 'create_book_taxonomies', 0 );

// функция, создающая 2 новые таксономии "genres" и "writers" для постов типа "book"
function create_book_taxonomies(){
	// определяем заголовки для 'genre'
	$labels = array(
		'name' => _x( 'Genres', 'taxonomy general name' ),
		'singular_name' => _x( 'Genre', 'taxonomy singular name' ),
		'search_items' =>  __( 'Search Genres' ),
		'all_items' => __( 'All Genres' ),
		'parent_item' => __( 'Parent Genre' ),
		'parent_item_colon' => __( 'Parent Genre:' ),
		'edit_item' => __( 'Edit Genre' ),
		'update_item' => __( 'Update Genre' ),
		'add_new_item' => __( 'Add New Genre' ),
		'new_item_name' => __( 'New Genre Name' ),
		'menu_name' => __( 'Genre' ),
	);

	// Добавляем древовидную таксономию 'genre' (как категории)
	register_taxonomy('genre', array('book'), array(
		'hierarchical' => true,
		'labels' => $labels,
		'show_ui' => true,
		'query_var' => true,
		'rewrite' => array( 'slug' => 'genre' ),
	));

	// определяем заголовки для 'writer'
	$labels = array(
		'name' => _x( 'Writers', 'taxonomy general name' ),
		'singular_name' => _x( 'Writer', 'taxonomy singular name' ),
		'search_items' =>  __( 'Search Writers' ),
		'popular_items' => __( 'Popular Writers' ),
		'all_items' => __( 'All Writers' ),
		'parent_item' => null,
		'parent_item_colon' => null,
		'edit_item' => __( 'Edit Writer' ),
		'update_item' => __( 'Update Writer' ),
		'add_new_item' => __( 'Add New Writer' ),
		'new_item_name' => __( 'New Writer Name' ),
		'separate_items_with_commas' => __( 'Separate writers with commas' ),
		'add_or_remove_items' => __( 'Add or remove writers' ),
		'choose_from_most_used' => __( 'Choose from the most used writers' ),
		'menu_name' => __( 'Writers' ),
	);

	// Добавляем НЕ древовидную таксономию 'writer' (как метки)
	register_taxonomy('writer', 'book',array(
		'hierarchical' => false,
		'labels' => $labels,
		'show_ui' => true,
		'query_var' => true,
		'rewrite' => array( 'slug' => 'writer' ),
	));
}

#2 Добавление таксономии в ЧПУ

Смотрите в примерах к описаниям функций: register_post_type(), WP_Rewrite

Заметки

Есть очень удобный, на мой взгляд, плагин который позволяет регистрировать новые типы записей и таксономии: Custom Post Type UI

Код из


wp-includes/taxonomy.php

WP 4.7.2

<?php
function register_taxonomy( $taxonomy, $object_type, $args = array() ) {
	global $wp_taxonomies;

	if ( ! is_array( $wp_taxonomies ) )
		$wp_taxonomies = array();

	$args = wp_parse_args( $args );

	if ( empty( $taxonomy ) || strlen( $taxonomy ) > 32 ) {
		_doing_it_wrong( __FUNCTION__, __( 'Taxonomy names must be between 1 and 32 characters in length.' ), '4.2.0' );
		return new WP_Error( 'taxonomy_length_invalid', __( 'Taxonomy names must be between 1 and 32 characters in length.' ) );
	}

	$taxonomy_object = new WP_Taxonomy( $taxonomy, $object_type, $args );
	$taxonomy_object->add_rewrite_rules();

	$wp_taxonomies[ $taxonomy ] = $taxonomy_object;

	$taxonomy_object->add_hooks();


	/**
	 * Fires after a taxonomy is registered.
	 *
	 * @since 3.3.0
	 *
	 * @param string       $taxonomy    Taxonomy slug.
	 * @param array|string $object_type Object type or array of object types.
	 * @param array        $args        Array of taxonomy registration arguments.
	 */
	do_action( 'registered_taxonomy', $taxonomy, $object_type, (array) $taxonomy_object );
}