Как создать произвольные таксономии в WordPress

Многие люди считают WordPress инструментом исключительно для блоггинга, потому как в ВП есть записи, рубрики, теги и т.д. Чего большинство из них не знает, так это того, что все записи, рубрики и теги могут быть заменены произвольными типами записей и произвольными таксономиями. В этой статье мы покажем вам как создать произвольную таксономию в WordPress, а также как вывести эту таксономию в своей теме WordPress.

Что такое таксономия?

Таксономия в WordPress — это одна из тех вещей, которую все используют, но не знают, что они используют именно ее. Таксономии WordPress используются для группировки записей и произвольных типов записей между собой. В ВП есть две самых популярных таксономии, которые люди постоянно используют: Рубрики и Теги. Можно использовать произвольные таксономии для создания произвольных групп и объединения их под одним «началом». Например, у вас есть произвольный тип записи под названием Книги. Даже если вы используете рубрики, возможно вы не хотите смешивать два вида Книг между собой, потому что они в корне отличаются друг от друга. Для решения этой проблемы можно зарегистрировать новую произвольную таксономию под названием Тематики. Можно добавить термы тематик типа: Приключения, Романы, Фантастика и т.д. Это позволит вам и вашим пользователям сортировать книги по тематикам. Таксономии также могут иметь иерархию, что означает у вас могут быть основные тематики типа: Фентези, Фантастика и Детские. А уже у этих тематик могут быть подтемы в каждой рубрике, как например в разделе Фентези могут быть триллеры в виде подтемы.

Теперь, когда мы прояснили, что такое произвольная таксономия, давайте выясним как создавать произвольные таксономии в WordPress. Мы покажем два способа создания произвольных таксономий. Способ 1 будет использовать плагин для тех, кто не захочет возиться с кодом. Способ 2, напротив же, будет использовать код и подойдет для тех, кто предпочитает делать всё без помощи плагинов.

Создание произвольных таксономий — Простой способ

Давайте же начнем создание произвольной таксономии. Первым делом вам необходимо установить и активировать плагин Simple Taxonomy. Далее, переходим в раздел Настройки » Custom Taxonomies где и создаем новую:

create-taxnomy-screen[1]

В начале создания произвольной таксономии нужно задать ей название, которое должно состоять из строчных букв и НЕ содержать «странных» символов. Второй опцией мы задаем будет ли эта таксономия иерархической. Если вы хотите создать таксономию типа рубрик, где сможете добавлять родительские и дочерние термы, тогда выбирайте True, иначе же — задавайте false, если вы хотите чтобы термы добавлялись как теги.

Третья опция позволяет ассоциировать эту таксономию с типом записей, а последняя — разрешит указать, нужно ли добавлять термы автоматически, выберите none.

Но мы еще не закончили. Давайте предположим, что вы создаете таксономию и назвали ее Тематики. Теперь нужно сообщить WordPress, как она должна переводиться в интерфейсе пользователя.

translate-taxonomy[1]

После указания переводов для интерфейса, нажмите на кнопку Add Taxonomy. После того, как произвольная таксономия будет создана, она появится под меню Записи и будет выглядеть так же как и Рубрики, и Теги. Также поле произвольной таксономии появится в в окне редактора записей.

custom-taxonomy-post-edit[1]

Создание произвольных таксономий вручную

Добавляем следующий код в файл 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), которая максимально будет соответствовать вашим задачам.

Напишите, как вы используете произвольные таксономии на своих сайтах.

По всем вопросам и отзывам просьба также писать в комментарии ниже.

Не забывайте, по возможности, оценивать понравившиеся записи количеством звездочек на ваше усмотрение.

VN:F [1.9.22_1171]
Rating: 4.4/5 (18 votes cast)

Об авторе ADv

Занимаюсь разработкой сайтов и магазинов на WordPress. Оказываю платные помощь и консультации. Skype: advokat_b
  • campusboy

    Создал новую таксономию. С админки перехожу по ссылке, мне выдается 404 ошибка. Какой файл должен отвечать за вывод? Тему пишу с нуля.

    • ADv

      По-умолчанию, берется single.php если не ошибаюсь. Но дело вряд ли в нем. Скорее всего ошибка в коде.

  • Здравствуйте. Спасибо. Как раз то, что нужно. А ошибка 404 (вопрос в комменте ниже). Структура ссылок причина.

  • Андрей

    Здравствуйте!
    Отличный код и работает! Но….
    Тоже возникла проблема с 404:
    если в адресной строке ввести

    имя_сайта.ру/topic/созданный_термин

    то ошибка 404 вылезает. Вопросы:
    1) как исправить
    2) в админке в свойствах Записи, когда добавляю ранее созданные Топики (также в админке), не появляются подсказки, как у тэгов — как этого добиться?

  • Александр Кравченко

    Для того, чтобы убрать ошибку 404: заходим в админке

    «Настройки постоянных ссылок» и жмём сохранить изменения. Всё.

Scroll To Top