Функция возвращает массив, состоящий из названий таксономий (или их объектов).
$taksonomii = get_taxonomies(); // так как $taksonomii - это массив, то давайте пропустим его через цикл foreach( $taksonomii as $taksonomiya ) { echo $taksonomiya . '<br />'; }
Для чистого сайта на WP результат будет следующим:
category post_tag nav_menu link_category post_format
Хочу отметить, что в большинстве примеров, которые вы найдёте в интернете, действие функции этим и ограничивается.
То есть функция get_taxonomies()
в основном используется для получения названий таксономий, которые в дальнейшем можно использовать в других функциях, таких как например get_the_terms().
Однако мы также можем получить и целые объекты таксономий со всей сопутствующей информацией.
Объект таксономии в WP
Суть следующего примера в точности такая же, как и предыдущего — вывести названия всех зарегистрированных таксономий, каждый с новой строки.
Первый параметр оставляем пустым, про него я расскажу чуть позже.
Для того, чтобы функция get_taxonomies()
возвращала массив объектов, её второй параметр должен содержать любую строку, отличную от names
, то есть:
$args = array(); // пустой массив пока что $taksonomii = get_taxonomies( $args, 'objects' ); foreach( $taksonomii as $taksonomiya ) { echo $taksonomiya->name . '<br />'; }
В примере я использовал echo $taksonomiya->name
для вывода названия таксономии, давайте же теперь разберемся со всеми параметрами объекта.
Параметры объекта таксономии
Хочу также отметить что все эти параметры (кроме buitin
) вы можете использовать при создании собственной таксономии.
- $taksonomiya->labels
- (объект) Ярлыки (надписи), которые используются в интерфейсе админки WordPress, к примеру для рубрик он выглядит следующим образом:
- $taksonomiya->label
- (строка) Множественное число названия таксономии, обычно совпадает с
$taksonomiya->labels->name
. - $taksonomiya->description
- (строка) Описание таксономии, которое по умолчанию нигде не отображается, но его можно задать при регистрации таксономии.
- $taksonomiya->hierarchical
- (логическое) Равно единице, если таксономия имеет иерархию.
- $taksonomiya->object_type
- (массив) Массив из названий поддерживаемых типов постов, например для рубрик
array('post')
. Изменять этот массив для уже зарегистрированных таксономий позволяет функция register_taxonomy_for_object_type(). - $taksonomiya->_builtin
- (логическое) Является ли данная таксономия встроенной в WordPress по умолчанию. 1 — да.
- $taksonomiya->callback
- (строка) Название возвратной функции для отображения метабокса данной таксономии. Если при регистрации не задана пользователем, то по умолчанию имеет значение
post_categories_meta_box
для таксономий с иерархией иpost_tags_meta_box
для таксономий без иерархии. Если заданоfalse
, то метабокс не будет отображаться вообще. - $taksonomiya->public
- (логическое) Из названия данного параметра понятно, что он имеет отношение к отображению таксономии. Сам по себе он мало что значит, но от него напрямую зависят значения по умолчанию следующих далее параметров объекта.
- $taksonomiya->show_in_nav_menus
- (логическое) Можно ли выбирать элементы данной таксономии при создании меню. Если не задано, то эквивалентно значению
$taksonomiya->public
. - $taksonomiya->show_ui
- (логическое) Отображается ли в админке интерфейс для данной таксономии. Если не задано, то эквивалентно значению
$taksonomiya->public
. - $taksonomiya->show_tagcloud
- (логическое) Можно ли отображать элементы данной таксономии в облаке меток. Если не задано, то эквивалентно значению
$taksonomiya->show_ui
. - $taksonomiya->show_in_quick_edit
- (логическое) Будет ли отображаться таксономия в панели быстрого редактирования. Если не задано, то эквивалентно значению
$taksonomiya->show_ui
. - $taksonomiya->show_admin_column
- (логическое) Нужно ли автоматически добавляться колонку этой таксономии в таблицу поддерживаемых ею типов записей. Если не задан, то
false
по умолчанию. - $taksonomiya->rewrite
- (логическое|массив) Содержит либо массив настроек постоянных ссылок для этой таксономии, либо равен
false
, если постоянные ссылки для неё отключены:slug
(строка) — собственно то, что отображается в URL, напрмиер/tag/
, если не задан, то соответсвует названию таксономии,with_front
(логическое) — нужно ли в URL использовать$wp_rewrite->front
(по умолчаниюfalse
), о том, что это такое, подробнее здесь,hierarchical
(логическое) — будут ли добавляться в URL также ярлыки родительских элементов таксономии (по умолчанию —false
),ep_mask
— маска, по умолчаниюEP_NONE
.
- $taksonomiya->query_var
- (строка|логическое) Параметр, который используется в WP_Query, а также в URL, например
/?platform=$название_платформы
. Если установлено значениеfalse
, то метод использования в URL уже не прокатит. - $taksonomiya->sort
- (логическое) Будет ли данная таксономия запоминать порядок присвоения своих элементов к постам.
- $taksonomiya->update_count_callback
- (строка) Название функции, которая ведёт подсчет объектов, присвоенных к элементам данной таксономии (запускается как хук после публикации/обновления поста).
Фильтр полученных результатов
Вот мы и подошли к тому функционалу функции, использование которого я пока что ещё не видел нигде.
Для начала я хочу вам сказать, что по сути всё, чем занимается функция get_taxonomies()
— это работает уже с готовым массивом объектов таксономий $wp_taxonomies
. Так что если проблем с объектами PHP у вас нет, то вы также можете использовать этот глобальный массив напрямую.
Так вот, мы уже рассмотрели, как функция может вывести массив названий таксономий, как обратиться к элементам объекта, теперь остановимся на двух параметрах функции, которые позволяют фильтровать полученный результат, к примеру давайте получим все встроенные _builtin
таксономии с иерархией hierarchical
.
// в $args мы просто перечисляем все параметры объекта таксономии, которые нас интересуют $args = array( 'hierarchical' => true, '_builtin' => true ); // 'and' (И - все значения параметров $args должны соответстовать - по умолчанию), 'or' (ИЛИ - хотя бы одно значение $args должно соответствовать) $operator = 'and'; $taksonomii = get_taxonomies( $args, 'objects', $operator );