Многие люди считают 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 внутри цикла:
<?php the_terms( $post->ID, 'topics', 'Topics: ', ', ', ' ' ); ?>
Можно добавить его в другие файлы, такие как archive.php, index.php, и в другое место по необходимости, где нужно вывести таксономию.
По-умолчанию ваши произвольные таксономии используют шаблон archive.php для отображения записей. Однако, вы можете создать собственный архив для их отображения по такому принципу — taxonomy-{taxonomy-slug}.php.
Произвольные таксономии могут использовать различными способами. Совмещение их с произвольными типами записей и произвольными мета-блоками помогут вам создать хорошо настраиваемую систему управления контентом (CMS), которая максимально будет соответствовать вашим задачам.
Напишите, как вы используете произвольные таксономии на своих сайтах.
По всем вопросам и отзывам просьба также писать в комментарии ниже.
Не забывайте, по возможности, оценивать понравившиеся записи количеством звездочек на ваше усмотрение.
wpincode.com

От автора: Концепция таксономий и терминов в WordPress нераздельна. Чуть ниже я более подробно расскажу об этом. По моему мнению, чтобы работать с терминами, необходимо понимать, что представляют собой таксономии и термины, и как они взаимодействуют. Иначе как мы будем уверены, что все делаем правильно на программном уровне?
В этой серии из двух статей мы с вами узнаем, что такое таксономии, их роль в WordPress, а также, что их связывает с терминами. И чуть позже мы обратим внимание на понятие терминов, а также научимся работать с term metadata API.
Рекомендую ознакомиться с предыдущими моими статьями, если вы еще этого не сделали. В них я объясняю принцип работы API, с которым мы будем работать. Если же вы не хотите тратить свое время на это, в принципе, ничего страшного. В этой серии мы подробно разберем все, что вам будет нужно.
Что такое таксономии?
Определение из кодекса: «В WordPress «таксономии» — это механизм группировки нескольких постов (ссылок или постов пользовательского типа).»
Это слово мы слышим нечасто. Иногда люди даже теряются, когда начинают говорить о таксономиях и терминах. Другими словами, люди используют пример фразы в качестве таксономии, но на самом деле это всего лишь термин. Чуть ниже я объясню это предложение.
Говоря простым языком, таксономии – это способы группировки вещей. В WordPress после установки есть две таксономии: категории и теги. Ниже мы разберем каждую таксономию более подробно.
Есть один нюанс, по крайней мере, в WordPress: таксономии могут быть иерархическими и неиерархическими. Самый понятный пример вышесказанного:
В этом и заключается разница иерархической и неиерархической таксономии. Вроде бы легко, правда? Если поддерживаются дочерние элементы, как в категориях, это иерархическая таксономия. Если же дочерние элементы не поддерживаются, как в тегах, это неиерархическая таксономия.
В этой серии статей умение различать таксономии не играет большой роли, разве что это поможет лучше понять этот язык в процессе разработки.
Но когда мы начнем программно создавать таксономии и прикреплять к ним термины, у нас не должно возникнуть сомнения в том, что мы делаем.
Что такое термины?
С таксономиями мы разобрались, а что такое термины? Из кодекса: «Термины в WordPress – это классификация, группа или подмножество таксономии, где последнее может быть категорией, тегом или пользовательской таксономией. По умолчанию у терминов есть заголовок, краткий заголовок URL адреса и описание. Иерархические таксономии, такие как категории, могут создавать родительские термины.»
Именно то определение, которого следовало ожидать, учитывая все, что мы уже изучили. Т.е. термины ассоциируются с таксономиями. Однако у терминов есть несколько важных аспектов, которые необходимо знать, если мы будем создавать их или работать с ними программно. Термины состоят из:
И не забывайте, что если мы работает с иерархической таксономией, такой как категории, термины могут включать в себя родительские термины.
Это не означает, что в таксономиях нет информации, относящейся к терминам. К примеру, у таксономии есть название, тип поста, с которым она ассоциируется, а также ряд аргументов, которые выходят за рамки этой статьи. В следующей статье мы подробно их рассмотрим.
Как связаны термины и таксономии?
Между терминами и таксономиями что-то наподобие симбиотической связи, т.е. один не может существовать без другого. В иерархических таксономиях это прослеживается нагляднее. В кодексе 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
Источник: http://code.tutsplus.com/
Редакция: Команда webformyself.
webformyself.com
What Is a Taxonomy?
According to the WordPress codex:
A taxonomy is a way to group things together.
For example, a bunch of different types of fruits can be grouped together according to various characteristics and then those groups can be assigned names.
In WordPress, taxonomies are used to group posts, pages, and even custom post types under different groups.
The names for the different groupings in a taxonomy are called terms. Take fruits, for example, and how they can be grouped based on their colors. In this case, the names of different colors would be the terms.
By default, WordPress comes built in with four taxonomies: category, tag, link category, and post format. You can learn more about these default taxonomies here.
Among these built-in taxonomies, categories and tags are very similar but have one important difference: Categories are exclusive taxonomies (i.e., for each post, you may select at most one category) whereas each post can be assigned multiple tags.
Moreover, categories are usually predefined, while tags may be defined as you go.
Defining Custom Taxonomies
You can define a custom taxonomy using the register_taxonomy()
function. You can learn more about the function here.
To see how this function works, let us define a custom taxonomy for posts with photos of scenery.
function view_init() { register_taxonomy( 'view', 'post', array( 'label' => __( 'View' ), 'capabilities' => array( 'assign_terms' => 'edit_guides', 'edit_terms' => 'publish_guides' ) ) ); } add_action( 'init', 'view_init' );
In the above snippet, we are defining a new taxonomy for posts called view.
You can think of this taxonomy being used to categorize photos based on the kind or nature of views that are present in the photos (e.g., mountain, lake, or forest).
As always, posts that belong to specific terms of this category will appear under /view/{view_name}.
The capabilities line in the snippet above is optional. Without it, WordPress will default capabilities to the same users as posts. As shown above, this will allow any user with the custom “edit_guides” capability to assign the taxonomy to a post and any user with the custom “publish_guides” capability to create new taxonomy items.
According to the official documentation, there are four capabilities that may be defined:
Taxonomy capabilities include
assign_terms
,edit_terms
,manage_terms
(displays the taxonomy in the admin navigation) anddelete_terms
.
How Taxonomies Are Used
Within your code, you can use the wp_set_object_terms()
function to add terms to objects using the taxonomy. You can list existing terms using the the_terms()
function. Furthermore, you can use the wp_tag_cloud()
function to generate a cloud of terms for your custom taxonomy. You can learn more about these functions here.
On the UI side, WordPress creates a new meta box on posts for every taxonomy. The meta box is similar to the Tags meta box which lets you link one or more terms to your post. This is what WordPress does by default, and this is what we can change by making a taxonomy exclusive: Make the custom taxonomy behave like the category taxonomy.
Forcing Exclusiveness on Taxonomies
When we create a custom taxonomy with the register_taxonomy()
method, WordPress adds a meta box with multiple item selection to the post editing page:
Using this meta box, a user can choose any number of existing (already used) terms and also can add new terms using the text box.
To create a category-like taxonomy, where each post belongs to at most one category from a set of predefined categories, you can do so by tweaking WordPress a little:
- Hide the default meta box created by WordPress.
- Create a custom meta box on post editing page which will provide controls for single item selection.
- Save the taxonomy value when the post is saved.
Let’s take a look at each of the steps.
Hide the Default Meta Box Created by WordPress
For this, we need to set show_in_quick_edit
and meta_box_cb
options to false
when calling register_taxonomy
.
The first option hides the taxonomy in the quick/bulk edit panel and the second option hides it in the post edit page:
register_taxonomy( 'custom_taxonomy', 'post', array( 'labels' => array( 'name' => 'Custom Exclusive Taxonomy' ), 'show_in_quick_edit' => false, 'meta_box_cb' => false ));
When the default meta box is hidden, items can be added to the set of available terms of the taxonomy via the taxonomy management page:
Create a Custom Meta Box on the Post Editing Page
To create a custom meta box, we can use the add_meta_boxes
WordPress hook. You can learn more about the hook here.
add_action('add_meta_boxes', 'add_custom_meta_box'); function add_custom_meta_box(){ add_meta_box( 'taxonomy_box', __('Custom Exclusive Taxonomy'), 'fill_custom_meta_box_content', 'post' ,'side'); }
We call the add_meta_box
method with the following arguments:
taxonomy_box
– The ID of the meta box__('Custom Exclusive Taxonomy')
– The title of the meta boxfill_custom_meta_box_content
– A function that is used to fill the contents of the meta boxpost
– This indicates that the meta box should appear on the post editing page.side
– This indicates the place where the meta box should be inserted.
Notice how we specified taxonomy_box
as the ID. However, it is the function in the third parameter that will let us define what will go into the box.
We will now implement the fill_custom_meta_box_content
function:
<?php function fill_custom_meta_box_content( $post ) { $terms = get_terms( array( 'taxonomy' => 'custom_taxonomy', 'hide_empty' => false // Retrieve all terms )); // We assume that there is a single category $currentTaxonomyValue = get_the_terms($post->ID, 'custom_taxonomy')[0]; ?> <p>Choose taxonomy value</p> <p> <?php foreach($terms as $term): ?> <input type="radio" name="custom_taxonomy" id="taxonomy_term_<?php echo $term->term_id;?>" value="<?php echo $term->term_id;?>"<?php if($term->term_id==$currentTaxonomyValue->term_id) echo "checked"; ?>> <label for="taxonomy_term_<?php echo $term->term_id;?>"><?php echo $term->name; ?></label> </input><br/> <?php endforeach; ?> </p> <?php }
Here, we are first retrieving all of the terms (i.e., existing values) of the taxonomy. We will use these to show a list of radio button controls.
Next, we retrieve the currently selected taxonomy term using get_the_terms()
function—we need it to make the respective radio button selected.
Notice that this function returns an array. This is because, by default, the post can have any number of terms associated with it. By our assumption, the post has at most one term, so we access the first array element. (It is ok if the array is empty; we’ll get null
as the current value and no radio button will be selected.)
The HTML emitting code uses custom_taxonomy
as the name of radio buttons and corresponding term IDs as their values; radio button ID attributes are just used for connecting to label tags. As a result, we get the following custom meta box:
Save the taxonomy Value When the Post Is Saved
Finally, we need to persist the taxonomy value when the post is saved. For this, we can use the save_post
hook:
add_action('save_post', 'save_custom_taxonomy'); function save_custom_taxonomy($post_id){ if ( isset( $_REQUEST['custom_taxonomy'] ) ) wp_set_object_terms($post_id, (int)sanitize_text_field( $_POST['custom_taxonomy'] ), 'custom_taxonomy'); }
And that’s it! We are done.
You now know how to define a custom taxonomy that will behave like the built-in category taxonomy.
Note: WordPress has accepted a feature request to make it easier to toggle exclusivity for custom taxonomies. However, the ticket has not seen much activity for a while.
Wrap Up
Taxonomies are a very powerful and useful feature in WordPress. Out of the box, they lack the ability to make strict categorization of posts, but as with nearly anything in WordPress, taxonomies and related functionality are extremely customizable. This allows us to add this often necessary ability in a few steps.
The approach introduced here can also be used to create even more customized UI on post editing pages for the taxonomy term selection.
I hope you have found this quick tutorial on defining exclusive custom taxonomies useful!
www.toptal.com
Таксономии – это то, что переносит WordPress за пределы простой блог-платформы в реальности CMS.
Но как они хранятся в базе данных?
Таксономии и Термины – мощный инструмент WordPress, который позволяет добавлять больше гибкости вашим сайтам. Они относятся к двум другим типам контента: посты и ссылки. Структура базы данных означает, что это связь один ко многим, где один пост может иметь несколько терминов по нескольким таксономиям, и один термин может быть присвоен нескольким постам или ссылкам.
Я начну давать им характеристику. Так же, как и множество вещей в WordPress, терминология может быть запутанная.
Характеристики
Таксономии
Таксономия – это система классифицированных или разложенных по категориям вещей, как правило, иерархически. Самая известная таксономия – Таксономия Линнея, используемая для классификации живых существ.
В WordPress Таксономии используются для классификации ваших данных и группировки их в множества и подмножества.
WordPress имеет три встроенные таксономии:
- Рубрика
- Метка
- Ссылка рубрики
Рубрики и метки немного похожи на посты и страницы тем, что они одного типа контента (таксономии), но по умолчанию ведут себя по-разному, а именно: рубрики — иерархичны, а метки – нет.
Таксономия ссылок рубрики работает по схожему пути с метками и теоретически может быть использована для любого типа объекта, но по умолчанию не отображается на экране редактирования поста и в окне редактирования ссылок, если ссылки активированы.
Вы также можете добавить столько дополнительных таксономий, сколько вы хотите задействовать пользовательских таксономий. Они затем будут вести себя схожим образом с рубриками и метками, и иметь в наличии термины. Каждая из ваших таксономий затем будет иметь точно такой же статус, как и любая встроенная таксономия. Это аналогично, если сравнивать статус между постами и пользовательскими типами поста.
Термины
У каждой таксономии будут термины, которые вы сможете использовать для сортировки данных. Рубрика – это всего лишь термин в таксономии рубрик, и метка – это термин в рубрике меток. После того как вы создадите таксономии, вы создадите термины для них либо с использованием консоли WordPress, либо с помощью функции wp_insert_term ().
Термины могут быть мощным инструментом в сочетании с пользовательскими запросами: вы можете создавать пользовательские файлы шаблонов в ваших темах или плагинах для отображения постов с несколькими терминами, сортировки по термину, идентификации терминов по таксономиям и многое другое.
Как WordPress хранит Таксономии и Термины
Как я уже описывал в руководстве по связям между данными, WordPress использует связь «многие-ко-многим». Эта связь создается с использованием трех таблиц:
- wp_term_relationships
- wp_term_taxonomy
- wp_terms
эти таблицы приведены ниже, наряду с таблицами показаны их связи к wp_posts и wp_links.
Давайте посмотрим на каждую из таблиц и узнаем, как они работают.
Таблица wp_terms
Таблица wp_terms хранит все индивидуальные термины для ваших рубрик, меток, ссылок рубрик и пользовательских таксономий. У нее всего лишь четыре поля:
- term_id – это уникальный ID для термина
- name (имя)
- slug (ярлык)
- term_group – это поле, которое в настоящий момент не используется WordPress, поэтому вы можете спокойно пропустить его.
Таблица wp_term_taxonomy
Таблица wp_term_taxonomy хранит больше данных о терминах, а также о таксономиях, частью которых они являются. У нее шесть полей:
- term_taxonomy_id – хранит ID, относящийся к записи в этой таблице
- term_id отображает ID термина, связанный с его записью в таблице wp_terms
- taxonomy – название таксономии, внутри которой находится термин
- description (описание)
- parent – ссылается на родительский термин для данного термина, если таксономия является иерархической, и он может быть только один.
- сount – количество постов с термином.
Во многих установках WordPress будет одна запись в таблице wp_term_taxonomy для каждого термина в таблице wp_terms, но в некоторых случаях может быть более одной записи для каждого термина. Это происходит в том случае, когда вы создаете два термина с одинаковыми именами и ярлыками в разных таксономиях. Это означает, что вы можете создать запрос для вывода постов с этим термином в нескольких таксономиях.
Это означает, что связь между этими двумя таблицами «один-ко-многим»: одна запись в таблице wp_terms может быть связана с несколькими записями в таблице wp_term_taxonomy, но каждая запись в таблице wp_term_taxonomy связана только с одной записью в wp_terms.
Таблица wp_term_relationships
Таблица wp_term_relationships является ключевой в создании связи «многие-ко-многим» между объектами и терминами. У нее всего лишь три поля:
- object_id (связан с post_id в таблице wp_post или с link_id в таблице wp_links)
- term_taxonomy_id (связан с аналогичным полем в таблице wp_term_taxonomy)
- term_order (это порядок, в котором термины были добавлены к объекту. Он используется только в том случае, если вы задали такой тип инструмента, который будет истинным, когда вы зарегистрировали таксономию – по умолчанию имеет значение «Ложь» и значение по умолчанию для этого поля 0.
Поскольку каждый объект может быть связан с несколькими записями в таблице wp_term_relationships, таким же образом может быть связан и термин, это создает связь «многие-ко-многим».
Итог
Связи между объектами (т.е. постами и ссылками) и терминами являются мощным инструментом отчасти потому, что эта единственная связь «многие-ко-многим», которая используется в WordPress.
Понимание того, как эта связь работает и где хранится ключевая информация, поможет вам понять, как работают таксономии и термины и как использовать функции, связанные с ними.
Источник: code.tutsplus.com
onwp.ru
В WordPress 3.0 будут восполнены серьезные пробелы, благодаря чему, он станет гораздо более серьезной системой управления контентом. Довольно простая в использовании функция пользовательской таксономии, предоставит разработчикам сайта мощный инструмент для построения хорошей информационной архитектуры. В сегодняшней статье, вы узнаете что собой представляют таксономии, почему они полезны и как их можно использовать.
Что такое Таксономия?
Таксономии – это различные методы для классификации информации. В этой статье приведен пример записей о персональных компьютерах, которые можно классифицировать по целому ряду различных критериев, включая:
- Количество оперативной памяти
- Размер жесткого диска
- Скорость процессора
- Тип процессора
- Установленная операционная система
- и так далее…
Краткая история таксономии WordPress
Рубрики
До версии 2.3, в WordPress был только один тип таксономии для записей, под названием Рубрики. Это было удобно для блогов, а в нашем случае, нам пришлось бы создать рубрику верхнего уровня под названием “Персональные компьютеры”, затем дочернюю рубрику “Оперативная память”, которая, в свою очередь, может содержать такие дочерние рубрики как “Меньше 1Гб”, “1Гб”, “2Гб”, “4Гб” и так далее. Вторая дочерняя рубрика, от основной рубрики “Персональные компьютеры”, называлась бы “Операционная система” и содержала бы такие дочерние рубрики, как: “Windows XP”, “Mac OS”, “Red Hat”, “Ubuntu” и т.д.
Система, позволяющая иметь рубрики, состоящие из дочерних рубрик – называется иерархической структурой. До версии WordPress 2.3, создать серьезную информационную архитектуру сайта можно было только путем создания большой иерархии рубрик, в которой рубрики верхнего уровня представляли собой большие группы таксономий.
Метки
Начиная с версии 2.3, в WordPress был добавлен второй вид таксономии под названием Метки. В отличие от рубрик, которые придумываются заранее, в зависимости от типа контента на сайте, метки предоставляют более свободный метод классификации контента.
Например, при создании записи о персональном компьютере, метки позволяют автору указать одно или несколько ключевых слов, таких как “игровой”, “шумный”, “офисный” и т.д. Эти ключевые слова конечно не несут такого смысла как рубрики, однако помогают добавить дополнительную классификацию к записи.
Посетители сайта, в дальнейшем, легко смогут найти все записи с меткой “шумный”. Однако, свободная форма меток, не поможет нам построить надежную классификационную систему на основе заранее известных значений, таких как типы операционной системы или процессора. Кроме того, метки являются одномерными, и не поддерживают иерархическую структуру.
Одноуровневые пользовательские таксономии
Начиная с версии 2.8, в WordPress появляется возможность добавить пользовательские классификационные схемы, путем незначительных изменений в коде сайта. С помощью этой функции, вы можете построить список операционных систем, отдельно от списка типов оперативной памяти и т.д. Однако, в версии 2.8 нет возможности создать иерархическую стркутуру таксономии, как у рубрик.
Иерархические пользовательские таксономии
И наконец, WordPress 3.0, дает нам полностью иерархические пользовательские таксономии. Обратите внимание как иерархическое устройство позволяет упростить таксономию операционных систем, путем группировки всех вариантов операционной системы Windows в общей родительской рубрике “Windows”. Такая классификация позволит пользователям просматривать все компьютеры с ОС Windows, или например конкретные, с Windows XP.
Создание пользовательской Таксономии
Редактирование файла functions.php
В WordPress 3.0 нет возможности создавать пользовательские таксономии в панели управления. Для начального описания вашей пользовательской таксономии без использования плагина, вам понадобится добавить немного кода в файл functions.php, расположенный в папке с вашей темой. Это совсем не сложно – просто следуйте приведенным примерам.
Добавляем Таксономии в коде
Итак, на примере персонального компьютера, мы добавим отдельные таксономии для Оперативной памяти, Жесткого диска и Операционной системы. На данном этапе, мы просто добавим таксономии сами по себе, как пустые контейнеры. К счастью, мы можем добавлять и управлять различными классификациями, не выходя из панели управления.
Шаг 1. Первая функция для создания всего
Для начала, нам нужно создать функцию, которая создает все необходимые нам таксономии. Назовем функцию “build_taxonomies”. Давайте добавим эту функцию в конец файла functions.php.
function build_taxonomies() { // code will go here }
Шаг 2. Описание Таксономий
Далее, для каждой таксономии, которую мы создадим, нам нужно взывать определенную WordPress-функцию, с правильными параметрами. Далее представлена эта функция, и разъяснены ее важные параметры.
register_taxonomy( 'internal_name', 'object_type', array( 'hierarchical' => {true|false}, 'label' => 'Human Readable Name', 'query_var' => {true|false}, 'rewrite' => {true|false} ) );
- internal_name: название таксономии, которое будет использоваться в базе данных и файлах шаблона
- object_type: определяет типы контента, к которым можно будет применить эту таксономию. Возможные значения: “post” (запись), “page” (страница), “link” (ссылка).
- Далее идет массив из опциональных параметров. В этой статье, мы будем использовать наиболее важные из них, а полный список можно найти в кодексе WordPress, на странице описания функции register_taxonomy. Далее идет список используемых параметров.
- hierarchical: если значение установлено в “true”, эта таксономия будет иметь возможности иерархической структуры, как у Рубрик. Если значение “false”, то таксономия по структуре будет похожа на Метки.
- label: это читаемое название, которое будет использоваться в интерфейсе сайта для обозначения этой таксономии.
- query_var: если значение параметра установлено в “true”, мы сможем получать записи, на основе выбранного значения этой таксономии. Например, можно найти все записи, для которых в таксономии “операционная система” указано значение “Windows”.
- rewrite: если значение установлено в “true”, при просмотре страницы с этой таксономией, WordPress будет использовать дружественные URL. Например, страница, отображающая все записи с операционной системой “Windows”, будет представлена следующим url: http://domain.com/operating_system/windows
Код, добавляющий таксономию “Операционная система” выглядит следующим образом:
register_taxonomy( 'operating_system', 'post', array( 'hierarchical' => true, 'label' => 'Operating System', 'query_var' => true, 'rewrite' => true ) );
Вставьте эту функцию, внутри ранее созданной функции build_taxonomies.
Шаг 3 Вызов функции, создающей таксономию
Для того, чтобы наша функция build_taxonomies была выполнена, нам понадобится добавить одну строчку кода, в файле functions.php. Фактически мы “прицепим” функцию build_taxonomies к событию init, путем добавления следующего кода:
add_action( 'init', 'build_taxonomies', 0 );
Вы можете вставить эту строчку в любом месте, в нашем примере она добавлена выше вызова функции build_taxonomies, поэтому код выглядит вот так:
// Custom Taxonomy Code add_action( 'init', 'build_taxonomies', 0 ); function build_taxonomies() { register_taxonomy( 'operating_system', 'post', array( 'hierarchical' => true, 'label' => 'Operating System', 'query_var' => true, 'rewrite' => true ) ); }
Добавляем классификацию к новой Таксономии
Если вы правильно добавили таксономию “Операционная система” в файле functions.php, она должна появится в виде нового пункта, в блоке “Записи”, вашей панели управления. Кликните по нему, чтобы добавить необходимые классификации.
Теперь, вы можете добавлять и редактировать операционные системы, точно таким же образом, как Рубрики.
Добавляем больше Таксономий
Оставшиеся таксономии добавляем аналогичным способом, то есть для каждой таксономии в файле functions.php, создается своя функция register_taxonomy:
register_taxonomy( 'ram', 'post', array( 'hierarchical' => true, 'label' => 'RAM', 'query_var' => true, 'rewrite' => true ) ); register_taxonomy( 'hard_drive', 'post', array( 'hierarchical' => true, 'label' => 'Hard Drive', 'query_var' => true, 'rewrite' => true ) );
После того, как вы добавите все таксономии, код должен выглядеть следующим образом:
// Custom Taxonomy Code add_action( 'init', 'build_taxonomies', 0 ); function build_taxonomies() { register_taxonomy( 'operating_system', 'post', array( 'hierarchical' => true, 'label' => 'Operating System', 'query_var' => true, 'rewrite' => true ) ); register_taxonomy( 'ram', 'post', array( 'hierarchical' => true, 'label' => 'RAM', 'query_var' => true, 'rewrite' => true ) ); register_taxonomy( 'hard_drive', 'post', array( 'hierarchical' => true, 'label' => 'Hard Drive', 'query_var' => true, 'rewrite' => true ) ); }
Создание записи, с использованием новой Таксономии
Создайте несколько записей, указав необходимую классификацию, в окне создания/редактирования записей, вы увидите панели вашей таксономии.
Отображение различной таксономии записей
Пока что ничего, из того что мы сделали, не доступно посетителям сайта. Следовательно, нам необходимо отобразить для каждой записи, название пользовательской таксономии, к которой она принадлежит.
Для этого, нам понадобится немного изменить цикл, в определенных файлах шаблона.
Вывод таксономии на индивидуальной странице
В дефолтной теме Twenty Ten, как и во многих других темах WordPress, данные о рубрике и метках записи, выводятся непосредственно под текстом этой записи. Мы будем выводить нашу таксономию, если она существует, чуть выше блока рубрик с метками.
Шаг 1. Редактирование файла single.php
Шаблон индивидуальной записи называется single.php, и расположен он внутри папки с вашей темой. Если такого шаблона у вас нет, его можно создать, и скопировать в него содержимое файла index.php.
Найдите в шаблоне single.php строчку:
<div class="entry-utility">
В теме Twenty Ten, этот блок содержит название рубрик, метки, ссылки и другую информацию о текущей записи. Код для вывода нашей таксономии, мы будем размещать непосредственно над этим блоком.
Шаг 2. Получение таксономии для текущей записи
Здесь мы определяем несколько переменных, для хранения вывода пользовательской таксономии.
<?php // Эта переменная используется для вывода таксономии, если она существует $taxo_text = ""; // Список переменных, для хранения списков таксономии // Эта строка получает данные о классификации "Операционная система" $os_list = get_the_term_list( $post->ID, 'operating_system', '<strong>Operating System(s):</strong> ', ', ', '' );
Для получения информации о таксономии текущей записи, мы используем функцию get_the_term, со следующими параметрами:
- $post->ID : id текущей записи
- ‘operation_system’ : имя пользовательской таксономии. Мы проверяем, была ли назначена текущей записи, какая-либо классификация из пользовательской таксономии operation_system.
- ‘Операционная система (ы)’ : если данные будут найдены, эта строчка будет вставлена, перед их выводом на экран.
- ‘, ’ : если найденных значений будет несколько, то они будут разделены запятой
- “ : если данные будут найдены, эта строка будет вставлена после вывода данных. В нашем случае, мы оставляем ее пустой.
Точно так же, используя эту функцию для двух других таксономий, мы получим код следующего вида:
$ram_list = get_the_term_list( $post->ID, 'ram', '<strong>RAM Option(s):</strong> ', ', ', '' ); $hd_list = get_the_term_list( $post->ID, 'hard_drive', '<strong>Hard Drive Option(s):</strong> ', ', ', '' );
Шаг 3. Форматирование полученного результата
Проверяем результаты для каждой из трех возможных таксономий. Если результат есть, добавляем его к нашему выводу, вместе с тэгом перевода строки.
// Добавляем список ОС, если они указаны if ( '' != $os_list ) { $taxo_text .= "$os_list<br />n"; } // Добавляем данные об Оперативной памяти, если они указаны if ( '' != $ram_list ) { $taxo_text .= "$ram_list<br />n"; } // Добавляем данные о жестком диске, если они указаны if ( '' != $hd_list ) { $taxo_text .= "$hd_list<br />n"; }
Шаг 4. Выводим классификацию, если она найдена
Проверяем, была ли получена таксономия из предыдущих шагов. Если таксономия существует, выводим ее, предварительно обернув в div с классом “entry-utility”.
// Выводим пользовательскую таксономию, если она существует // Обратите внимание: Мы не будет открывать div, если у него не будет содержимого if ( '' != $taxo_text ) { ?> <div class="entry-utility"> <?php echo $taxo_text; ?> </div> <? } // endif ?>
Шаг 5. Проверяем результаты
Теперь, если открыть страницу любой записи, вы должны увидеть пользовательскую классификацию, расположенную сразу после текста записи.
Просмотр списка записей, построенный на основе пользовательской таксономии
Теперь, на странице индивидуальной записи, мы можем узнать к какой классификации принадлежит текущая запись. Вы, наверное, заметили, что при отображении пользовательской классификации, термины выводятся в виде ссылки, которая должна вести на страницу с записями, принадлежащими к этой классификации. К примеру, кликнув по ссылке “Mac OS”, мы по идее, должны увидеть страницу со списком записей, с классификацией “Mac OS”.
Однако, ничего такого не происходит. Для того, чтобы у нас выводилась такая страница, нам нужно создать специальный шаблонный файл, с именем taxonomy.php. WordPress пытается грузить этот шаблон (если он существует) каждый раз, при просмотре записей, группированных пользовательской таксономией.
Шаг 1
Откройте файл category.php, скопируйте его контент, и вставьте в новый файл, сохранив его под именем “taxonomy.php”.
Шаг 2 Получение информации о текущей классификации
В файле taxonomy.php, нам необходимо получить информацию о текущей, просматриваемой таксономии. Скорее всего, нам понадобится название и описание (если есть) для выбранной классификации.
Сразу после строки <?php get_header(); ?> следующую строку:
$term = get_term_by( 'slug', get_query_var( 'term' ), get_query_var( 'taxonomy' ) );
Эта строка получает всю информацию о таксономии и возвращает ее в виде объекта, записанного в переменную $term. Например, классификация “Mac OS” возвращает следующий объект:
stdClass Object ( [term_id] => 13 [name] => Mac OS [slug] => mac-os [term_group] => 0 [term_taxonomy_id] => 22 [taxonomy] => operating_system [description] => [parent] => 0 [count] => 2 )
Шаг 3 Вывод Названия классификации и ее описание
Нам нужно изменить название страницы, чтобы пользователи видели, какая классификация отображена на странице. Поскольку мы скопировали содержимое шаблона category.php, мы можем взять строку кода, использующуюся для вывода названия рубрики, и немного ее изменить, с тем, чтобы она отображала текущее название классификации, и (если доступно) ее описание.
Измените следующую строку, взятую из шаблона category.php
printf( __( 'Category Archives: %s', 'twentyten' ), '<span>' . single_cat_title( '', false ) . '</span>' );
следующим образом:
printf( __( 'Posts classified under: %s', 'twentyten' ), '<span>' . $term->name . '</span>' );
Эта строка выведет название текущей классификации. Далее, ниже добавьте следующую строчку:
if ('' != $term_descr ) { echo "<p>$term_descr</p>n"; }
Здесь, как не трудно догадаться, будет выведено описание классификации, если оно доступно.
Проверить как работает классификационный список записей, очень просто. Откройте любую, отдельную запись, и кликните на ссылку-название классификации.
Перевод статьи “Introducing WordPress 3 Custom Taxonomies”, автор Paul Kaiser
dreamhelg.ru
Конкретный пример создания новых таксономий для медиафайлов в WordPress
Если вы давно пользуетесь WordPress, то наверняка заметили, что в нем нельзя присвоить рубрики и метки для фотографий и картинок. В этом смысле произвольная и стандартная таксономия вордпресс – очень удобный инструмент. Внедрив таксономию, можно упорядочить записи, рубрики, и провести их классификацию. и классифицировать их по тегам и рубрикам. Как добавить таксономию в Вордпресс и прикрепить ее к типу записи?
Сначала откройте файл functions.php шаблона вашей темы. Можно вносить изменения прямо в админпанели, в редакторе WordPress. Лучше для определения таксономий создать плагин, потому что, поменяв шаблон темы, плагин сохранится и вам не нужно будет прописывать таксономии заново — файл functions.php останется неизменным.
Подготовка к созданию таксономии для медиафайлов
На этом этапе вам нужно отредактировать страницу медиафайлов – стандартный шаблон этой страницы беден, в нем не назначены ни метки записи (медиа), ни рубрики, ни таксономии.
function wptp_add_categorxes_to_attachicents() ( cegister_taxonoroy_for_object type( 'category', 'attachment' ); add_action( 'init' , 'wptp_add_categorie»_to_attachments' };
По умолчанию в WordPress не реализован выбор уже созданных рубрик и меток, но это положение можно изменить.
Рубрики медиафайлов
Выбор рубрик нужно начинать с включения их для прикрепленных файлов. Делается это, как я уже объяснял, функцией register_taxonomy_for_object_type(). Просто добавьте в файл плагина или functions.php шаблона темы такой php код:
// apply tags to attachments function wptp_add_tags_to_attachments () { register_taxonomy_for_object_typo('post_tag', attachment' ); } add_action( 'init' , 'wptp_add_tags_to_attachments' );
После этого действия необходимо сохранить файл и обновить страницу редактирования медиафайлов. Вы увидите, что рубрики теперь доступны.
// register new taxonomy which applies to attachments function wptp_add_locatlon_taxonomy() { §labels = array( name' =>'Locations', singular_name'=>'Location', search_itcms '=>'Search Locations', all_ltems'=>'All Locations', parent_item'=>'Parent Location', parent_item_colon'=>'Parent Location:', edit_item'=>'Edit Location', update_item' =>'Update Location', add_new_item'=>'Add New Location', new_item_name'=>'New Location Name', menu_name' =>'Location', 'labels' => $labels, 'hierarchical' => true, 'quety_vat' => 'true', 'rewrite' => 'true', 'show_admin_column' => 'true',); register taxonomy( 'location', 'attachment', $args ); add_action( 'init', 'wptp_add_location_taxonomy' );
Метки медиафайлов
Если вы предпочитаете оперировать с метками, или и с рубриками и метками, то, чтобы их создать, используйте ту же функцию. Добавьте в файл functions.php такой код:
// apply tags to attachments function wptp_add_tags_to_ attachments () { register _taxonomy_for object_type( 'post_tag', attachments' ); } add_action ( 'init' , 'wptp_add_tags_to_ attachments' );
Теперь на странице редактирования медиафайлов вы увидите и метки.
Также это действие добавит колонку с метками и в библиотеке медиафайлов.
Создание собственной таксономии
Если вдруг существующие метки и рубрики не подходят для присвоения медиафайлам, то вы можете создать и зарегистрировать свою собственную таксономию. Для этого также используется параметр ‘attachment’, который применяется к типу записи.
К примеру, вам нужно сделать иерархическую таксономию под названием «Locations», и ваша задача — использовать ее для вывода всех изображений и классификации этих медиафайлов.
Использовав функцию register_taxonomy(), можно добавить в файл темы такой php код:
// register new taxonomy which applies to attachments function wptp_add_locatlon_taxonomy() { §labels = array( name' =>'Locations', singular_name'=>'Location', search_itcms '=>'Search Locations', all_ltems'=>'All Locations', parent_item'=>'Parent Location', parent_item_colon'=>'Parent Location:', edit_item'=>'Edit Location', update_item' =>'Update Location', add_new_item'=>'Add New Location', new_item_name'=>'New Location Name', menu_name' =>'Location', 'labels' => $labels, 'hierarchical' => true, 'quety_vat' => 'true', 'rewrite' => 'true', 'show_admin_column' => 'true',); register taxonomy( 'location', 'attachment', $args ); add_action( 'init', 'wptp_add_location_taxonomy' );
При помощи этого фрагмента кода вы сделаете свою иерархическую таксономию и сможете использовать ее для прикрепленных медиафайлов.
А если возникла необходимость использовать таксономию для другого типа контента? Тогда вам нужно заменить в функции register_taxonomy() параметр ‘attachment’ на массив, содержащий все сокращения типов контента, которые вам нужно добавить:
register taxonomy( 'location', array ( 'attachment', 'post' ), $args );
Обновите страницу и увидите, как она изменилась после редактирования медиафайлов. Также вы увидите созданную таксономию:
Так как в коде был аргумент ‘show_admin_column’, он тоже будет выводиться на странице библиотеки медиафайлов:
На этом закончим – работы для вас много, но теперь вы знаете, что такое таксономия wordpress и сможете выводить метки, рубрики и типы записей, которые помогут при сортировке загруженных в библиотеку медиафайлов. До встречи!
seobid.net