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

В этой статье разберем, как с помощью WordPress API создать собственные таксономии, которые помогут структурировать контент сайта более гибко и удобно. Кастомные таксономии — отличный инструмент для расширения стандартных категорий и меток и позволяют создавать новые типы группировок для постов и других типов записей.

Что такое кастомные таксономии в WordPress

Таксономии в WordPress — это способ группировки записей по определенным признакам. По умолчанию это категории и метки, но для создания более сложной структуры сайта часто требуется добавить свои таксономии. Например, для сайта с фильмами можно создать таксономию «Жанры», для портфолио — «Типы работ» и т.д.

Кастомные таксономии позволяют:

  • Группировать записи по уникальным критериям;
  • Улучшить навигацию по сайту;
  • Повысить удобство создания и управления контентом;
  • Расширить возможности фильтрации и поиска.

Для создания таксономий используется функция register_taxonomy. Рассмотрим ее применение с примерами.

Как зарегистрировать кастомную таксономию в WordPress

Для регистрации новой таксономии нужно использовать хук init, чтобы код выполнялся после инициализации WordPress. Вот базовый пример регистрации таксономии «Жанр» для типа записи «post»:

function wpapi_register_taxonomy_genre() {
    $labels = array(
        'name'              => 'Жанры',
        'singular_name'     => 'Жанр',
        'search_items'      => 'Поиск жанров',
        'all_items'         => 'Все жанры',
        'edit_item'         => 'Редактировать жанр',
        'update_item'       => 'Обновить жанр',
        'add_new_item'      => 'Добавить новый жанр',
        'new_item_name'     => 'Название нового жанра',
        'menu_name'         => 'Жанры',
    );

    $args = array(
        'labels'            => $labels,
        'hierarchical'      => true, // древовидная таксономия, как категории
        'public'            => true,
        'show_ui'           => true,
        'show_admin_column' => true,
        'rewrite'           => array('slug' => 'genre'),
    );

    register_taxonomy('genre', array('post'), $args);
}
add_action('init', 'wpapi_register_taxonomy_genre');

Здесь мы определяем набор ярлыков для удобства администратора, задаем параметры таксономии и привязываем ее к стандартному типу записи «post».

Пояснения по параметрам

hierarchical — если true, таксономия работает как категории (иерархия, подкатегории), если false — как метки (плоская структура).

public — делает таксономию доступной на фронтенде и в админке.

show_ui — отображение в админке.

show_admin_column — добавляет колонку с таксономией в список записей.

rewrite — параметры ЧПУ для URL таксономии.

Использование кастомных таксономий в шаблонах темы

После регистрации таксономии можно выводить ее значения в шаблонах, например, в файле single.php рядом с заголовком поста. Для этого используйте функцию wpapi_get_the_terms_list (создадим обертку для удобства):

function wpapi_get_the_terms_list($post_id, $taxonomy, $before = '', $sep = ', ', $after = '') {
    $terms = get_the_terms($post_id, $taxonomy);
    if (empty($terms) || is_wp_error($terms)) {
        return '';
    }
    $term_links = array();
    foreach ($terms as $term) {
        $term_links[] = '<a href="' . esc_url(get_term_link($term)) . '">' . esc_html($term->name) . '</a>';
    }
    return $before . join($sep, $term_links) . $after;
}

Теперь в шаблоне можно вывести жанры поста так:

echo wpapi_get_the_terms_list(get_the_ID(), 'genre', 'Жанры: ');

Это выведет список жанров с ссылками на архивные страницы по ним.

Как добавить таксономию к кастомному типу записи

Если у вас есть кастомный тип записи, например, «movie», то для добавления таксономии нужно указать этот тип при регистрации таксономии:

function wpapi_register_taxonomy_movie_genre() {
    $labels = array(
        'name'          => 'Жанры фильмов',
        'singular_name' => 'Жанр фильма',
        // остальные ярлыки как в примере выше
    );
    $args = array(
        'labels'            => $labels,
        'hierarchical'      => true,
        'public'            => true,
        'show_ui'           => true,
        'show_admin_column' => true,
        'rewrite'           => array('slug' => 'movie-genre'),
    );
    register_taxonomy('movie_genre', array('movie'), $args);
}
add_action('init', 'wpapi_register_taxonomy_movie_genre');

Важно, чтобы сам кастомный тип записи был зарегистрирован заранее. Таксономия корректно привяжется и отобразится в админке.

Использование плагинов для управления кастомными таксономиями

Если вы не хотите писать код вручную, есть несколько популярных плагинов, которые позволяют создавать кастомные таксономии через удобный интерфейс:

  • Custom Post Type UI — самый популярный плагин для создания кастомных типов записей и таксономий без кода.
  • Pods — мощный инструмент для создания и управления типами записей, таксономиями и полями.
  • Toolset Types — коммерческий плагин с расширенными возможностями.

Эти плагины позволяют быстро настроить структуру сайта и затем использовать созданные таксономии в шаблонах и запросах.

Запросы WP_Query с использованием кастомных таксономий

Для вывода постов с определенной таксономией используется параметр tax_query в WP_Query. Например, чтобы получить все посты с жанром «боевик»:

$query = new WP_Query(array(
    'post_type' => 'post',
    'tax_query' => array(
        array(
            'taxonomy' => 'genre',
            'field'    => 'slug',
            'terms'    => 'boevik',
        ),
    ),
));

if ($query->have_posts()) {
    while ($query->have_posts()) {
        $query->the_post();
        echo '<h2>' . get_the_title() . '</h2>';
    }
    wp_reset_postdata();
} else {
    echo 'Посты не найдены';
}

Это позволит вывести только записи, относящиеся к нужному жанру.

Оптимизация и советы по работе с кастомными таксономиями

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

  • Для древовидных таксономий используйте hierarchical => true, чтобы создать удобную структуру и навигацию.
  • Указывайте параметр show_admin_column => true для удобства управления в админке.
  • Регулярно проверяйте корректность ЧПУ и ссылок, используйте flush_rewrite_rules() после регистрации новых таксономий, например при активации плагина.
  • Используйте кэширование запросов с таксономиями для ускорения работы сайта.
  • Не забывайте про безопасность и проверку прав пользователя при выводе и изменении терминов.

Шаблоны для WP Плагины для WP