Произвольные таксономии представляют собой великолепный инструмент в руках опытного разработчика. Однако сразу нужно оговориться: таксономии подходят далеко не для всех случаев. Перед тем как приступать к активному внедрению созданных таксономий, необходимо понять, способны ли они справиться с поставленными целями.
Что такое таксономия?
Согласно Википедии, таксономия — это «учение о принципах и практике классификации и систематизации»1. Мне импонирует это определение, поскольку оно указывает на действия, которые можно совершить с помощью таксономий. Основная цель любой таксономии — это классификация предметов. Или, еще более точно, их группировка.
Основной акцент здесь делается на слове «группировка». Вы размещаете предметы по группам. Таксономия — объединение этих групп. В случае с WordPress, мы группируем записи, которые могут обладать различными форматами. Рубрики и метки преследуют аналогичную цель, однако идут к ней различными способами. Если говорить математическим языком, рубрики и метки — частные случаи таксономий.
При создании нового формата записей очень важно определить, что’ использовать для него в качестве таксономии. Давайте для наглядности возьмем телесериалы: пусть формат записей носит название TV Shows. Что в таком случае брать за основу для таксономии? Заголовки? Фамилии актеров? Номера эпизодов? Сезоны? Что представить в виде таксономии, а что — в виде метаданных?
К счастью, ответы на эти вопросы лежат на поверхности, достаточно всего лишь немного пораскинуть мозгами. Что нам взять для таксономий? То, что нуждается в группировке: фамилии актеров и заголовки эпизодов. На первый взгляд, сезоны также могут быть заданы в виде таксономий: каждый сезон содержит в себе несколько эпизодов, поэтому разумно было бы сгруппировать их. Однако при более тщательном рассмотрении можно прийти к выводу, что в такой группировке нет никакого смысла. Если мы выберем, скажем, первый сезон из таксономии, то мы получим список всех первых сезонов из различных телешоу: это не та цель, которой мы добивались. Следовательно, сезоны и эпизоды будут представлены в виде метаданных.
Мы подошли к тому, чтобы почувствовать разницу между метаданными и таксономиями. Метаданные (или произвольные поля, как предпочитают их называть некоторые пунктуальные разработчики) — это информация, которая определяет конкретную выбранную запись. Таксономия — это информация, которая является общей и значимой для произвольной группы элементов. Заголовок является общим для всех эпизодов и играет значение для каждого из них. Сезон тоже является общим для эпизодов, но он не имеет особого значения, поскольку все шоу обладают одинаковыми номерами сезонов.
Теперь скажем несколько слов об упорядочивании элементов. Единственный возможноый способ сделать это — воспользоваться метаданными. Упорядочивание на основе таксономий бессмысленно, потому что большинство пунктов используют одинаковые термины в таксономии. Если у меня есть двадцать пунктов, и все они заданы как термин «foo» в таксономии, то что мне упорядочивать?
Что касается запросов: я могу формировать их как на основе метаданных, так и на основе таксономий. В идеале, конечно же, мне понадобится использовать и то, и другое. Скажем, если мне требуется Firefly, Season 1, Episode 13, я должен буду установить нужный мне заголовок в tax_query и строку «S01E13» в meta_query. Таким образом, я получу необходимый пункт. Если же мне понадобится список всех эпизодов, я должен буду установить необходимый мне заголовок в tax_query и указать метаданные для сезона/эпизода, после чего задать orderby для указания требуемого порядка вывода.
Если я могу использовать в запросах и таксономии, и метаданные, а упорядочивать могу только метаданные, то встает вопрос: зачем тогда вообще использовать таксономии? Почему бы не устанавливать метаданные для всех записей?
Все дело в скорости. Запросы для таксономий выполняются гораздо быстрее, чем запросы для записей с определенной мета-информацией. Совместное использование таксономий и метаданных — самый оптимальный вариант с точки зрения скорости выполнения запросов.
Давайте подведем небольшой итог: использование таксономий оправдано для атрибутов, которые: a) определяют естественную группировку ваших пунктов; b) являются естественными метками и представляют собой существенные данные для ваших методов. Заголовок — как раз один из примеров таких существенных данных.
Безусловно, многие читатели могут не согласиться с приведенными мною примерами. Не существует какого-либо одного верного решения, все зависит от конкретной ситуации и целей разработчика. В процессе создания собственной таксономии вам придется тщательным образом продумать группировку элементов и решить, как вы будете использовать данные. Если вы собираетесь использовать их в виде группы, то для этой цели лучше всего подойдет таксономия. Однако если вы нуждаетесь в атрибутах, которыми можно будет некоторым образом управлять, то в таком случае лучше всего остановиться на метаданных.
1. http://ru.wikipedia.org/wiki/%D2%E0%EA%F1%EE%ED%EE%EC%E8%FF
Источник:
http://ottopress.com/2011/when-to-not-use-a-custom-taxonomy/