Таксономии
Таксономии — это такие сущности, которые нужны для группировки постов (записей, страниц или постов произвольного типа).
Если вы работали с WordPress, то наверняка уже работали и с таксономиями. Потому что «Рубрики» и «Метки» у записей как раз-таки и являются таксономиями!
Итак, несколько моментов по работе с таксономиями:
- по умолчанию в WordPress уже есть несколько стандартных таксономий – это рубрики category , метки post_tag , меню nav_menu и форматы постов post_format ,
- таксономии бывают древовидные (как рубрики) и недревовидные (как метки),
- мы можем зарегистрировать свои собственные таксономии для любых типов записей,
- таксономия может быть привязана к нескольким типам записей сразу,
- в базе данных под таксономии выделены аж четыре таблицы wp_terms , wp_term_taxonomy , wp_term_relationships и wp_termmeta .
Если вам уже не терпиться заняться практикой, то скорее включайте видео, я же расскажу ещё несколько моментов по порядку.
Чтобы скачать тему WordPress, которая получилась у нас в процессе этого урока, необходимо приобрести курс.
Стандартные таксономии в WordPress
Рубрики и метки
Рубрики и метки – это публичные таксономии WordPress, которые по умолчанию имеют отношение только к обычным записям.
Тут есть один важный исторический момент, о котором не нужно забывать. Когда WordPress только появился, у него не было не произвольных типов постов, ни произвольных таксономий, были только «Записи», «Страницы», «Рубрики», «Метки» (грубо говоря), благодаря чему функции по работе с таксономиями делятся на три группы – функции для рубрик, функции для меток, функции для таксономий, но по факту на сегодняшний день большинство из них не отличаются и, скажем, вы спокойно можете использовать функцию get_category_link() для получения URL страницы метки.
Меню
Когда мы говорим о меню, то можем говорить о двух сущностях:
- таксономия nav_menu , которая является самим меню (Меню 1, Меню 2, Меню в футере и n&l)
- тип записи nav_menu_item , который является ссылками в меню.
Для наглядности чекаем скриншот:
Форматы постов
Форматы на самом деле с трудом можно назвать таксономией, но фактически это так. На моём блоге им посвящён отдельный пост.
Древовидные и недревовидные таксономии
Если мы говорим о стандартных таксономиях WordPress, то среди них только рубрики являются древовидными, то есть это когда у элементов таксономий могут быть дочерние элементы.
Древовидность таксономии также отразиться и на URL-ах самих терминов, например страница категории «kenzo» может иметь URL: http://сайт/category/ryukzaki/brendy/kenzo .
Также интерфейс древовидных и недревовидных таксономий на странице редактирования записи отличается. Древовидные выводятся в виде списка чекбоксов:
Недревовидные вот так:
Хотя у меня был древний урок на сайте, где я рассказывал, как это поменять.
Пользовательские таксономии
И вот в один прекрасный день наступает момент, когда нам начинает не хватать стандартных рубрик и меток для группировки постов. Конечно такое может и не произойдёт для стандартных записей и страниц, но если вы используете произвольные типы записей, то вполне вероятно.
Например в видеоуроке мы регистрируем таксономию «Страны», по которым будут фильтроваться лиды, поступающие с сайта.
Никогда! Не используйте плагины для регистрации типов записей.
Объясню почему. Смотрите, чтобы зарегистрировать таксономию, вам достаточно примерно вот такого кода:
add_action( 'init', function() { register_taxonomy( 'country', 'lead', array( 'public' => true ) ); });
Понятное дело, что если вы хотите всё супер-детально настроить, то параметров у функции будет чуть больше, подробно я их всех описал тут.
Одна из глобальных проблем WordPress – это то, что некоторые «разработчики» (я их ещё называю настройщиками) приходят в такой ужас от этих трёх строчек кода, что решают установить тяжеловесный плагин, который позволит им зарегистрировать таксономию через интерфейс в админке, что уже само по себе в корне неправильно, потому что мы получаем дополнительные запросы в базу данных для получения параметров, типо как ‘public’ => true , который в моём случае написан прямо в коде и жрёт 0 производительности вместо 100500. Да, до сих пор не могу понять этих людей 🙂
Как присваивать таксономии к различным типам записей
Ну во-первых, если вы сами регали таксономию через код, то конечно же надо было сразу указать все типы записей, для которых будет использована группировка по этой таксономии.
Если же изменение параметров регистрирующей функции не в вашей власти (возьмем те же рубрики и метки), тогда вы можете и должны использовать register_taxonomy_for_object_type() для прикрепления таксономий и unregister_taxonomy_for_object_type(), чтобы наоборот откреплять таксономии..
Допустим вы взяли и захотели, чтобы в рубрику можно было добавлять не только записи но и страницы! Тогда код будет следующим:
add_action( 'init', 'true_kategorii_dlja_stranic' ); function true_kategorii_dlja_stranic(){ register_taxonomy_for_object_type( 'category', 'page'); }
Вывод элементов таксономий (терминов) на сайте, а также их постов
Конечно функций существует огромной количество, но я бы выделил несколько самых часто используемых и удобных.
Функция | Для чего |
---|---|
get_terms() | Супер-удобна для получения терминов любых таксономий по определённым критериям. |
get_the_terms() | Для вывода терминов поста. |
WP_Query (параметр tax_query) | Для вывода постов. |
Где же брать название таксономии для этих функций?
- Если таксономию создавали вы сами, то этот вопрос у вас не должен возникать.
- Если же нет, то просто откройте страницу этой таксономии и посмотрите на ссылку в браузере:
Купить курс
- 21 видеоурок
- Можно скачать готовый код после каждого урока
- Можно начать проходить курс сразу же после оплаты
- Достаточно базовых знаний HTML и CSS, чтобы пройти курс
- Единоразовый платёж
- Доступ навсегда
- Уроки актуальны в 2023-м году
Создание таксономии WordPress
Перед тем как, что то создавать, нужно разобраться с базовыми понятием таксономии. Что это такое?
В WordPress под таксономией понимается некое абстрактное пространство, с помощью которого происходит группировка записей(постов) по определенному признаку.
К примеру существует стандартная таксономия «Рубрки» на англ. версии WP «Category». С ее помощью мы можем сгруппировать записи по признакам: новости, статьи, полезная информация и.т.п. По простому мы называем это все «категориями». Но на самом деле это таксономия «Рубрики».
«Метки» это тоже таксономия на англ. версии «tags», только элементы этой таксономии не имеют наследования(родителей).
2. Типы таксономий.
Существует два типа таксономий:
1. Древовидные(иерархический) — имеет вложенность, родительские и дочернии элементы. Пример: Рубрки(category).
2. Линейные (плоские)— не имеет вложенности. Пример: Метки(tags).
3. Как создать таксономию.
И так. Как же создать кастомную(произвольную) таксономию в WordPress. Существует два способа:
Способ первый. С помощью функции register_taxonomy().
Функция register_taxonomy() — регистрирует кастомную(произвольную) таксономию.
Пример. Создадим таксономию mycat для типа записей(post type) «записи» или по простому для постов.
Таксономия в WordPress
«Таксономия» — это закон/принцип расположения чего-либо. Говоря о WordPress, под таксономией часто подразумевают расположение записей. А точнее деление по рубрикам и вложенность рубрик друг в друга.
Если вы уже работали с WordPress, то представляете, что рубрики публикаций можно вкладывать друг в друга, как это делают с папками и файлами на компьютере. Таксономии (правила) связывают в WordPress только записи и хранятся отдельно. Фактически, рубрики — это и есть отдельные записи в таблице базы данных. А точнее, для их хранения используются таблицы «wp_term», «wp_term_taxonomy» и «wp_term_relationships». Как можно заметить из названий таблиц, элементы таксономии называются «term».
Таксономии разделяются на два типа: древовидные и линейные (плоские). К древовидным относятся рубрики. К линейным — метки. Древовидные таксономии могут быть как родительскими, так и дочерними (папки и подпапки). А линейные находятся только на одном уровне.
- 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 написать следующий код:
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' => __('Жанр'), ), ));
Как создать произвольные таксономии в WordPress
Многие люди считают WordPress инструментом исключительно для блоггинга, потому как в ВП есть записи, рубрики, теги и т.д. Чего большинство из них не знает, так это того, что все записи, рубрики и теги могут быть заменены произвольными типами записей и произвольными таксономиями. В этой статье мы покажем вам как создать произвольную таксономию в WordPress, а также как вывести эту таксономию в своей теме WordPress.
Что такое таксономия?
Таксономия в WordPress — это одна из тех вещей, которую все используют, но не знают, что они используют именно ее. Таксономии WordPress используются для группировки записей и произвольных типов записей между собой. В ВП есть две самых популярных таксономии, которые люди постоянно используют: Рубрики и Теги. Можно использовать произвольные таксономии для создания произвольных групп и объединения их под одним «началом». Например, у вас есть произвольный тип записи под названием Книги. Даже если вы используете рубрики, возможно вы не хотите смешивать два вида Книг между собой, потому что они в корне отличаются друг от друга. Для решения этой проблемы можно зарегистрировать новую произвольную таксономию под названием Тематики. Можно добавить термы тематик типа: Приключения, Романы, Фантастика и т.д. Это позволит вам и вашим пользователям сортировать книги по тематикам. Таксономии также могут иметь иерархию, что означает у вас могут быть основные тематики типа: Фентези, Фантастика и Детские. А уже у этих тематик могут быть подтемы в каждой рубрике, как например в разделе Фентези могут быть триллеры в виде подтемы.
Теперь, когда мы прояснили, что такое произвольная таксономия, давайте выясним как создавать произвольные таксономии в WordPress. Мы покажем два способа создания произвольных таксономий. Способ 1 будет использовать плагин для тех, кто не захочет возиться с кодом. Способ 2, напротив же, будет использовать код и подойдет для тех, кто предпочитает делать всё без помощи плагинов.
Создание произвольных таксономий — Простой способ
Давайте же начнем создание произвольной таксономии. Первым делом вам необходимо установить и активировать плагин Simple Taxonomy. Далее, переходим в раздел Настройки » Custom Taxonomies где и создаем новую:
В начале создания произвольной таксономии нужно задать ей название, которое должно состоять из строчных букв и НЕ содержать «странных» символов. Второй опцией мы задаем будет ли эта таксономия иерархической. Если вы хотите создать таксономию типа рубрик, где сможете добавлять родительские и дочерние термы, тогда выбирайте True, иначе же — задавайте false, если вы хотите чтобы термы добавлялись как теги.
Третья опция позволяет ассоциировать эту таксономию с типом записей, а последняя — разрешит указать, нужно ли добавлять термы автоматически, выберите none.
Но мы еще не закончили. Давайте предположим, что вы создаете таксономию и назвали ее Тематики. Теперь нужно сообщить WordPress, как она должна переводиться в интерфейсе пользователя.
После указания переводов для интерфейса, нажмите на кнопку Add Taxonomy. После того, как произвольная таксономия будет создана, она появится под меню Записи и будет выглядеть так же как и Рубрики, и Теги. Также поле произвольной таксономии появится в в окне редактора записей.
Создание произвольных таксономий вручную
Добавляем следующий код в файл functions.php вашей темы или в плагин для сайта WordPress (рекомендуется) для создания иерархической произвольной таксономии типа рубрик:
//хук в init action и вызов create_book_taxonomies когда хук сработает add_action( 'init', 'create_topics_hierarchical_taxonomy', 0 ); //задаем название для произвольной таксономии Topics для ваших записей function create_topics_hierarchical_taxonomy() < // Добавляем новую таксономию, делаем ее иерархической вроде рубрик // также задаем перевод для интерфейса $labels = array( 'name' =>_x( 'Topics', 'taxonomy general name' ), 'singular_name' => _x( 'Topic', 'taxonomy singular name' ), 'search_items' => __( 'Search Topics' ), 'all_items' => __( 'All Topics' ), 'parent_item' => __( 'Parent Topic' ), 'parent_item_colon' => __( 'Parent Topic:' ), 'edit_item' => __( 'Edit Topic' ), 'update_item' => __( 'Update Topic' ), 'add_new_item' => __( 'Add New Topic' ), 'new_item_name' => __( 'New Topic Name' ), 'menu_name' => __( 'Topics' ), ); // Теперь регистрируем таксономию register_taxonomy('topics',array('post'), array( 'hierarchical' => true, 'labels' => $labels, 'show_ui' => true, 'show_admin_column' => true, 'query_var' => true, 'rewrite' => array( 'slug' => 'topic' ), )); >
Для создания не-иерархической произвольной таксономии типа Теги, добавьте следующий код в файл functions.php вашей темы или в плагин для сайта WordPress (рекомендуется):
//хук в init action и вызов create_topics_nonhierarchical_taxonomy когда хук сработает add_action( 'init', 'create_topics_nonhierarchical_taxonomy', 0 ); function create_topics_nonhierarchical_taxonomy() < // Задаем названия для интерфейса $labels = array( 'name' =>_x( 'Topics', 'taxonomy general name' ), 'singular_name' => _x( 'Topic', 'taxonomy singular name' ), 'search_items' => __( 'Search Topics' ), 'popular_items' => __( 'Popular Topics' ), 'all_items' => __( 'All Topics' ), 'parent_item' => null, 'parent_item_colon' => null, 'edit_item' => __( 'Edit Topic' ), 'update_item' => __( 'Update Topic' ), 'add_new_item' => __( 'Add New Topic' ), 'new_item_name' => __( 'New Topic Name' ), 'separate_items_with_commas' => __( 'Separate topics with commas' ), 'add_or_remove_items' => __( 'Add or remove topics' ), 'choose_from_most_used' => __( 'Choose from the most used topics' ), 'menu_name' => __( 'Topics' ), ); // Теперь регистрируем НЕ-иерархическую таксономию вроде Тегов register_taxonomy('topics','post',array( 'hierarchical' => false, 'labels' => $labels, 'show_ui' => true, 'show_admin_column' => true, 'update_count_callback' => '_update_post_term_count', 'query_var' => true, 'rewrite' => array( 'slug' => 'topic' ), )); >
Обратите внимание на различия между двумя кодами. Значение для параметра иерархии — true для таксономии типа Рубрики, и false — для таксономий типа Тегов. Также в массиве названий для НЕ-иерархической таксономии типа Тегов мы добавили null для параметров parent_item и parent_item_colon, что означает, что в интерфейсе ничего не будет отображаться при создании родительского элемента.
Выводим произвольные таксономии
Вот так можно вывести термы, которые вы добавили в произвольную таксономию на отдельной странице записи. Добавьте следующую строку кода в свой файл single.php внутри цикла:
ID, 'topics', 'Topics: ', ', ', ' ' ); ?>
Можно добавить его в другие файлы, такие как archive.php, index.php, и в другое место по необходимости, где нужно вывести таксономию.
По-умолчанию ваши произвольные таксономии используют шаблон archive.php для отображения записей. Однако, вы можете создать собственный архив для их отображения по такому принципу — taxonomy-.php.
Произвольные таксономии могут использовать различными способами. Совмещение их с произвольными типами записей и произвольными мета-блоками помогут вам создать хорошо настраиваемую систему управления контентом (CMS), которая максимально будет соответствовать вашим задачам.
Напишите, как вы используете произвольные таксономии на своих сайтах.
По всем вопросам и отзывам просьба также писать в комментарии ниже.
Не забывайте, по возможности, оценивать понравившиеся записи количеством звездочек на ваше усмотрение.