Создание таксономии WordPress
Содержание
1. Что такое таксономия WordPress?
Перед тем как, что то создавать, нужно разобраться с базовыми понятием таксономии. Что это такое?
В WordPress под таксономией понимается некое абстрактное пространство, с помощью которого происходит группировка записей(постов) по определенному признаку.
К примеру существует стандартная таксономия «Рубрки» на англ. версии WP «Category». С ее помощью мы можем сгруппировать записи по признакам: новости, статьи, полезная информация и.т.п. По простому мы называем это все «категориями». Но на самом деле это таксономия «Рубрики».
«Метки» это тоже таксономия на англ. версии «tags», только элементы этой таксономии не имеют наследования(родителей).
2. Типы таксономий.
Существует два типа таксономий:
1. Древовидные(иерархический) — имеет вложенность, родительские и дочернии элементы. Пример: Рубрки(category).
2. Линейные (плоские)— не имеет вложенности. Пример: Метки(tags).
3. Как создать таксономию.
И так. Как же создать кастомную(произвольную) таксономию в WordPress. Существует два способа:
Способ первый. С помощью функции register_taxonomy().
Функция register_taxonomy() — регистрирует кастомную(произвольную) таксономию.
Пример. Создадим таксономию mycat для типа записей(post type) «записи» или по простому для постов.
Таксономии
Начну с того, что таксономии нужны для группировки постов.
Каким образом? Ну возьмём к примеру хэштеги в инстаграм — когда вы постите фото и присваиваете ему теги — это как раз и есть та самая группировка, о которой я говорю. По умолчанию WordPress тоже поддерживает теги для постов, а ещё рубрики. И их можно объединить одним словом — таксономии.
В WP есть стандартные таксономии, а также те, которые разработчики и пользователи создают сами.
1. Стандартные таксономии в WordPress
Рубрики и метки
Что-то мне подсказывает, что если вы читаете этот пост, то вы уже представляете, что такое рубрики (категории) и метки (теги), что у рубрик есть иерархия, у меток нет и так далее.
А теперь мне нужно донести одну важную мысль.
В WordPress есть своя группа функций для работы с рубриками и отдельная группа функций для работы с метками. Наверняка с какими-то из них вы уже знакомы.
Чуть выше мы с вами определили, что и рубрики и метки являются таксономиями, а это значит, что при работе как с теми, так и с другими вы можете спокойно использовать функции таксономий. Я например так и делаю.
Рубрики ссылок
Если рубрики и метки в WordPress были нужны для группировки записей, то данная таксономия, как понятно из названия — для группировки ссылок.
Если вы недавно установили WP, то вы не найдёте их у себя в админке. Дело в том, что с версии 3.5 ссылки по умолчанию сделали отключенными. Но не удалили — вставьте следующий код в файл functions.php вашей темы и ссылки вновь появятся у вас в админке. Вполне возможно, что вы найдете им применение.
Форматы постов
Форматы на самом деле с трудом можно назвать таксономией, но фактически это так. На моём блоге им посвящён отдельный пост.
2. Пользовательские таксономии
И вот в один прекрасный день наступает момент, когда нам начинает не хватать стандартных рубрик и меток для группировки записей…
Чуть подробнее про регистрацию таксономии
Техническую сторону регистрации я подробно описал в статье про функцию register_taxonomy(). Сейчас же мы рассмотрим несколько моментов.
Пример: вы зарегистрировали тип записей — Автомобили, и их нужно группировать скажем по марке, стране и по объему двигателя (хотя объем лучше затолкать в произвольные поля).
Как присваивать таксономии к различным типам записей
Ну во-первых, если вы сами регали таксономию через код, то конечно же надо было сразу указать все типы записей, для которых будет использована группировка по этой таксономии.
Если же изменение параметров регистрирующей функции не в вашей власти (возьмем те же рубрики и метки), тогда вы можете и должны использовать register_taxonomy_for_object_type().
Допустим вы взяли и захотели, чтобы в рубрику можно было добавлять не только записи но и страницы! Тогда код будет следующим:
Другие примеры смотрите в описании функции, ссылку на которое я дал вам выше.
Вывод таксономий в виде списка
Вы знакомы с функцией wp_list_categories()? Если нет, то наверняка видели, как на блогах рубрики выводятся в столбик в виде списка (иногда еще справа в скобках указывается количество постов в рубрике).
Самое интересное, что функция wp_list_categories() позволяет выводить элементы любой таксономии, достаточно лишь указать название таксономии в параметрах функции.
Где же брать название таксономии?
Более сложный, но в то же время более удобный и настраиваемый вариант — функция get_terms(). Если бы мне предложили выбрать любимую функцию из кодекса, я бы выбрал её — она реально потрясающая.
Вывод постов из таксономии
3. Плагины для работы с таксономиями
Сам я придерживаюсь мнения, что в данном случае лучше обойтись без лишних плагинов, тем не менее вот некоторые бесплатные варианты:
Некоторые из функций для работы с таксономиями
Впервые познакомился с WordPress в 2009 году. Организатор и спикер на конференциях WordCamp. Преподаватель в школе Нетология.
Если вам нужна помощь с сайтом или разработка с нуля на WordPress / WooCommerce — пишите. Я и моя команда будем рады вам помочь!
Таксономии в WordPress
Что такое таксономии в WordPress? Кто не знает, и тем кто думает, что знает о таксономиях все, будет полезно прочитать эту статью. Я подробно разберу что скрывается под этим странным словом, что оно значит в WordPress и как таксономии устроены. Думаю, в этом разборе что-то полезное найдет каждый.
Читайте также, как устроенны записи в WordPress
Читайте также, как устроенны метаполя в WordPress
О таксономиях
Образно, таксономии можно сравнить с папками на компьютере: куда складываются файлы. Заходим в папку, видим список файлов. В WordPress аналогично: заходим в таксономию (рубрику), видим список записей в ней.
Типы таксономий
Отличия. Элементы древовидных такс. могут быть родительскими и дочерними, т.е. одни элементы как бы вложены в другие. А элементы плоских такс. всегда сами по себе, т.е. все они находятся на одном уровне, а значит не зависят друг от друга.
Схематически это выглядит как-то так:

Базовые таксономии WordPress
По умолчанию в WordPress существует пять таксономии:
Создание своих таксономий
Создается таксономия с помощью функции register_taxonomy() или соответствующего плагина, например, «Custom Post Type UI». При этом, как я уже говорил, в базу данных ничего не добавляется, а создается только описание таксономии и её свойств в глобальной переменной PHP и в правилах ЧПУ. Как только был создан хоть один элемент таксономии, в БД появляется запись о новом термине, а к нему уже можно прикрепить запись.
При создании таксономии, ей можно указать самые разные свойства (опции), например:
тип: древовидная или плоская.
тип записи для которой создается такса, тогда при редактировании записи в админке появится блок, где можно добавить запись в таксономию (связать запись с термином). Например таким блоком является блок рубрик при редактировании записи.
как будет выглядеть ссылка на элемент таксономии. Эта «хрень» называется ЧПУ (человеко-понятный УРЛ).
можно создать скрытую таксономию, тогда её нигде не будет видно, в частности в админке, но её можно использовать как-то нестандартно, чтобы группировать записи или делать что-то еще. Так например, плагины галерей связывают галереи или отдельные картинки.
Почему нужно создавать произвольные таксономии?
Если везде использовать Рубрики, то довольно быстро ваш код превратиться в кашу. В результате расширять функционал сайта будет все сложнее, а скорость работы будет все медленнее.
Так может выглядеть запрос, когда нужно получить дешевые дома в Воронеже:
А если тоже самое сделать с рубриками, то код получится больше, будет менее понятный и быстрый.
Структура: таблицы таксономий в БД
В базе данных WordPress за таксономии отвечают, не много не мало, четыре таблицы. Разберем каждую.
wp_terms
term_id Уникальный ID термина (ID строки таблицы). name Название термина, пр: «Авторские функции». slug Ярлык (слаг) термина, пр: «avtorskie-funkcii». term_group Устарелое поле, больше не используется.
wp_term_taxonomy
К слову, на этом сайте таких сдвоенных терминов оказалось всего 12 из нескольких сотен существующих, что еще раз доказывает несостоятельность прежней логики такс (было столько разветвлений в коде и всяких JOIN в sql запросах, только для того, чтобы не писать 12 строк в таблицу БД).
wp_term_relationships
Эта таблица содержит всего три поля:
Содержит порядок в котором были указаны термины, при прикреплении их к записи. Например, при редактировании записи мы указали ей 2 рубрики и 3 метки, вот в каком порядке мы их видим (они передались в POST запросе), такие значения сюда будут записаны: 1, 2 для рубрик, и 1, 2, 3 для меток.
wp_termmeta
В wp_termmeta принято сохранять любые дополнительные данные термина, например это могут быть СЕО поля: заголовок, описание и что угодно еще.
По умолчанию, эта таблицы не задействована и всегда пуста. Она используется при расширении базовых возможностей WP, как правило плагинами.
До версии 4.4 у терминов не было метаполей и их записывали в опции, жуткое было время. Для тех времен я делал так.
Связь всех таблиц
Для создания своих SQL запросов, когда базовые функции не справляются или справляются не так как хотелось бы, нужно знать как таблицы связываются.
Давайте посмотрим SQL запрос, который свяжет все таблицы с помощью JOIN. Запрос ниже вернет все записи типа post и данные к какому термину прикреплена каждая запись:
Создавая подобные запросы и объединяя таблицы с помощью JOIN, вы быстро и хорошо разберетесь в зависимостях между таблицами таксономий.
Функции таксономий WordPress
Полный список смотрите по этой ссылке, а вот некоторые популярны функции:
Таксономии довольно мощный инструмент в WordPress, при этом логика таблиц сравнительно простая. Разобравшись, как работают таксономий, вы сможете создавать более сложные сайты.
Также, понимание как устроены таксономии и как записи связываются с ними, поможет вам понять где, как и какую функцию таксономий лучше использовать.
Что такое таксономия в WordPress
На прошлом уроке мы создали новый тип записи post type book более подходящий для продажи книг, а на этом уроке научимся создавать для него таксономию в WordPress.
Рассмотрим на примере post type book, которому необходимо создать свою таксономию. Предположим мы продаем на сайте книги и необходимо отсортировать их по жанру, по цене, по возрасту читателя. Для каждого параметра надо создать свою WordPress таксономию, привязать к соответствующим постам (1 пост = 1 книга) и в дальнейшем организовать на сайте фильтрацию книг.
Для начала, давайте зарегистрируем свою первую таксономию. Давайте посмотрим пример регистрации таксономии на codex.wordpress.org. Скопируем оттуда функцию register_taxonomy(), откроем наш function.php и внутри функции function create_post_type(), добавим скопированный код и заменяем на свои значения.
register_taxonomy(
‘price’,
‘book’,
array(
‘label’ => __( ‘price’ ),
‘rewrite’ => array( ‘slug’ => ‘price’ ),
)
);
Давайте зарегистрируем нашу первую таксономию price для типа записи book. Далее идет массив с настройками, в базовом примере стоит три настраиваемых параметра, их можно удалить и добавить новые, все возможные параметры есть в документации кодекса. Например параметр rewrite, можно удалить из кода регистрации, если slug (хвостик ссылки) совпадает с названием таксономии.
Теперь вы видите, что в админке у произвольного типа поста book появился параметр price.
register_taxonomy(
‘age’,
‘book’,
array(
‘label’ => __( ‘age’ ),
‘rewrite’ => array( ‘slug’ => ‘age’ ),
)
);
По умолчанию в админ-меню сейчас показываются все созданные таксономии, чтобы убрать их оттуда, надо к коду выше после параметра rewrite с новой строки добавить параметр show_in_menu. Данный параметр совершенно не нужен в меню.
Если мы перейдем в редактирование «Добавить запись», то увидим два поля с двумя таксономиями, куда добавим свои метки.
Данный формат нам не совсем подходит, так как нет возможности выбрать для добавляемой книги, только одну цену и один возраст. Надо в код добавить ещё одну настройку hierarchical.
Теперь книги можно отсортировать по цене и возрасту, осталось только вывести наши terms на сам сайт, пока мы их видим только в админ-панели. Для этого есть функция get_terms, которая выводит на страницу списки таксономий.
$terms = get_terms( array(
‘taxonomy’ => ‘price’,
‘hide_empty’ => false,
) );
Функция get_terms тоже принимает разные параметры, смотрите опять же в кодексе WordPress.
Для тех у кого не хватает терпения разбираться как устроена WordPress таксономия, но очень хочется увидеть конечный результат, то установите плагин, называется он: WordPress Meta Data and Taxonomies Filter (MDTF).
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
Комментарии ( 0 ):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.
Copyright © 2010-2021 Русаков Михаил Юрьевич. Все права защищены.
Таксономия WordPress: работа с терминами
Дата публикации: 2016-04-22
От автора: Концепция таксономий и терминов в WordPress нераздельна. Чуть ниже я более подробно расскажу об этом. По моему мнению, чтобы работать с терминами, необходимо понимать, что представляют собой таксономии и термины, и как они взаимодействуют. Иначе как мы будем уверены, что все делаем правильно на программном уровне?
В этой серии из двух статей мы с вами узнаем, что такое таксономии, их роль в WordPress, а также, что их связывает с терминами. И чуть позже мы обратим внимание на понятие терминов, а также научимся работать с term metadata API.
Рекомендую ознакомиться с предыдущими моими статьями, если вы еще этого не сделали. В них я объясняю принцип работы API, с которым мы будем работать. Если же вы не хотите тратить свое время на это, в принципе, ничего страшного. В этой серии мы подробно разберем все, что вам будет нужно.
Что такое таксономии?
Определение из кодекса: «В WordPress «таксономии» — это механизм группировки нескольких постов (ссылок или постов пользовательского типа).»
Это слово мы слышим нечасто. Иногда люди даже теряются, когда начинают говорить о таксономиях и терминах. Другими словами, люди используют пример фразы в качестве таксономии, но на самом деле это всего лишь термин. Чуть ниже я объясню это предложение.
Говоря простым языком, таксономии – это способы группировки вещей. В WordPress после установки есть две таксономии: категории и теги. Ниже мы разберем каждую таксономию более подробно.
Бесплатный курс «Основы создания тем WordPress»
Изучите курс и узнайте, как создавать мультиязычные темы с нестандартной структурой страниц
Есть один нюанс, по крайней мере, в WordPress: таксономии могут быть иерархическими и неиерархическими. Самый понятный пример вышесказанного:
При создании нового категории в WordPress, вы можете создать как категорию верхнего уровня, подкатегорию, так и уже существующую категорию. К примеру, орлы – подкатегория птиц.
Создавая тег в WordPress, вы прописываете одно слово или фразу, которая будет ассоциироваться с постом. Дочерних и родительских тегов не бывает.
В этом и заключается разница иерархической и неиерархической таксономии. Вроде бы легко, правда? Если поддерживаются дочерние элементы, как в категориях, это иерархическая таксономия. Если же дочерние элементы не поддерживаются, как в тегах, это неиерархическая таксономия.
В этой серии статей умение различать таксономии не играет большой роли, разве что это поможет лучше понять этот язык в процессе разработки.
Но когда мы начнем программно создавать таксономии и прикреплять к ним термины, у нас не должно возникнуть сомнения в том, что мы делаем.
Что такое термины?
С таксономиями мы разобрались, а что такое термины? Из кодекса: «Термины в WordPress – это классификация, группа или подмножество таксономии, где последнее может быть категорией, тегом или пользовательской таксономией. По умолчанию у терминов есть заголовок, краткий заголовок URL адреса и описание. Иерархические таксономии, такие как категории, могут создавать родительские термины.»
Именно то определение, которого следовало ожидать, учитывая все, что мы уже изучили. Т.е. термины ассоциируются с таксономиями. Однако у терминов есть несколько важных аспектов, которые необходимо знать, если мы будем создавать их или работать с ними программно. Термины состоят из:
Краткого заголовка URL адреса
И не забывайте, что если мы работает с иерархической таксономией, такой как категории, термины могут включать в себя родительские термины.
Бесплатный курс «Основы создания тем WordPress»
Изучите курс и узнайте, как создавать мультиязычные темы с нестандартной структурой страниц
Это не означает, что в таксономиях нет информации, относящейся к терминам. К примеру, у таксономии есть название, тип поста, с которым она ассоциируется, а также ряд аргументов, которые выходят за рамки этой статьи. В следующей статье мы подробно их рассмотрим.
Как связаны термины и таксономии?
Между терминами и таксономиями что-то наподобие симбиотической связи, т.е. один не может существовать без другого. В иерархических таксономиях это прослеживается нагляднее. В кодексе WordPress есть диаграмма, описывающая связь таксономий и терминов:
К примеру, можно иметь таксономию Категории, но в ней должен быть хотя бы один термин. Именно поэтому в WordPress по умолчанию есть термины без категорий (Uncategorized).
Но также можно создать таксономию Теги и не хранить ни одного тега в базе данных. Можем ли мы, как разработчики, как-то расширить данную систему? Как термины, так и таксономии могут быть созданы программно, однако пользователи также могут создавать и добавлять их. По крайней мере, если в пользовательском интерфейсе есть такая возможность.
Конкретный пример: С помощью интерфейса WordPress все мы можем создавать категории и теги. Но если вы программист и хотите переместить отдельные таксономии и термины в базу данных, вы можете сделать так, чтобы пользователи не смогли больше добавлять и удалять их через интерфейс.
Что такое Term Metadata?
Мы уже поняли, что такое таксономии и термины, а также разницу между ними, и остался один вопрос: Зачем нужны term metadata? Или по-другому в чем смысл term metadata?
Хороший вопрос. Возможно, именно поэтому данной функции не было до WordPress 4.4. Что еще интереснее, так это то, что об этой функции объявили больше 6 лет назад. Главная причина, по которой еще 6 лет назад заговорили о метаданных терминов была:
«На данный момент нет конкретного способа хранения дополнительных данных в таксономиях. Разработчикам плагинов приходится создавать методы для хранения таких данных. К примеру, можно хранить данные в зашифрованном виде в поле описания или использовать метод set_option(). Новая функция не помешала бы, к примеру, add_taxonomy_data() / get_taxonomy_data().»
Данное понятие будет иметь для вас смысл, если вы продвинутый разработчик. Но не все из нас достигли такого уровня знаний, и мы не можем точно сказать, чем метаданные терминов лучше.
Как и в других API, мы можем хранить данные о любом термине из базы данных. К метаданным терминов можно отнести что-либо, связанное с временем создания термина, автором, количеством постов, с которыми ассоциируется данный термин. Также с их помощью терминам можно добавлять изображения.
Так как информация в метаданных терминов может быть самой разной, нам открываются широчайшие возможности. В следующей статье мы рассмотрим конкретные примеры.
Заключение
На данный момент вы знаете все, что вам пригодится для работы с терминами и таксономиями. Когда вы будете писать плагин, тему или что-либо еще для клиента, вам, скорее всего, придется несколько раз открыть кодекс. Даже для опытного разработчика это нормальная практика.
В следующей статье мы научимся работать с метаданными терминов: разберем конкретный пример кода, добавим этот код в одну из тем по умолчанию, будем вносить изменения и следить за базой данных.
Автор: Tom McFarlin
Редакция: Команда webformyself.
Бесплатный курс «Основы создания тем WordPress»
Изучите курс и узнайте, как создавать мультиязычные темы с нестандартной структурой страниц
Хотите узнать, что необходимо для создания сайта?
Посмотрите видео и узнайте пошаговый план по созданию сайта с нуля!

























