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

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

Что такое таксономии в WordPress и зачем нужны фильтры

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

Фильтры по таксономиям позволяют посетителям сайта быстро находить нужный контент, выбирая интересующие параметры. Без них пользователям приходится листать большие списки записей, что ухудшает UX и снижает конверсию.

В WordPress есть встроенные таксономии (category, post_tag), но часто создают кастомные таксономии для уникальных задач. Важно уметь создавать фильтры, которые будут работать с любыми таксономиями.

Создание пользовательского фильтра по таксономии с помощью кода

Рассмотрим пример, как вывести фильтр по кастомной таксономии wpfinder_genre для типа записи book. Для начала, создадим таксономию, если её ещё нет:

function wpfinder_register_taxonomy() {
    register_taxonomy('wpfinder_genre', 'book', array(
        'labels' => array(
            'name' => 'Жанры',
            'singular_name' => 'Жанр'
        ),
        'hierarchical' => true,
        'public' => true,
        'show_ui' => true,
        'rewrite' => array('slug' => 'genre'),
    ));
}
add_action('init', 'wpfinder_register_taxonomy');

Теперь создадим форму фильтра с чекбоксами для всех терминов таксономии:

function wpfinder_display_genre_filter() {
    $terms = get_terms(array(
        'taxonomy' => 'wpfinder_genre',
        'hide_empty' => false,
    ));
    if (!empty($terms) && !is_wp_error($terms)) {
        echo '<form method="GET" id="wpfinder-filter-form">';
        foreach ($terms as $term) {
            $checked = isset($_GET['genre']) && in_array($term->slug, (array) $_GET['genre']) ? 'checked' : '';
            echo '<p><label><input type="checkbox" name="genre[]" value="' . esc_attr($term->slug) . '" ' . $checked . ' /> ' . esc_html($term->name) . '</label></p>';
        }
        echo '<p><button type="submit">Фильтровать</button></p>';
        echo '</form>';
    }
}

Чтобы отфильтровать записи по выбранным жанрам, воспользуемся хуком pre_get_posts:

function wpfinder_filter_books_by_genre($query) {
    if (!is_admin() && $query->is_main_query() && is_post_type_archive('book')) {
        if (!empty($_GET['genre'])) {
            $query->set('tax_query', array(
                array(
                    'taxonomy' => 'wpfinder_genre',
                    'field' => 'slug',
                    'terms' => array_map('sanitize_text_field', $_GET['genre']),
                )
            ));
        }
    }
}
add_action('pre_get_posts', 'wpfinder_filter_books_by_genre');

Теперь достаточно вывести функцию wpfinder_display_genre_filter() в шаблон архива книг (например, в archive-book.php) перед циклом, чтобы пользователи могли фильтровать записи по жанрам.

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

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

  • FacetWP — мощный плагин для создания фильтров с ajax-подгрузкой. Позволяет строить фильтры по любым таксономиям, произвольным полям и другим параметрам.
  • Filter Everything — бесплатный и простой в использовании плагин для фильтрации по различным атрибутам и таксономиям.
  • WPFinder Filter (гипотетический, учитывая тематику домена) — если на сайте используется собственный набор плагинов, можно рассмотреть их возможности для кастомных фильтров.

При использовании плагинов обратите внимание на совместимость с вашей темой и нагрузку на сервер, особенно при большом количестве терминов и записей.

Советы по оптимизации и UX при создании фильтров по таксономиям

Фильтры должны быть быстрыми и удобными. Вот несколько рекомендаций:

  • Используйте ajax-подгрузку результатов, чтобы не перезагружать страницу полностью.
  • Добавляйте индексы к таблицам базы данных, если работаете с большим объёмом таксономий и записей.
  • Сортируйте термины по популярности или алфавиту, чтобы облегчить поиск нужного фильтра.
  • Позаботьтесь о мобильной версии фильтров — используйте выпадающие списки или слайдеры.
  • Если фильтров много, добавьте кнопку "Сбросить фильтры".

Пример расширенного фильтра с ajax и WP_Query

Для более продвинутого решения можно добавить ajax-обработчик, который будет подгружать отфильтрованные записи без перезагрузки страницы. Пример ajax-обработчика:

add_action('wp_ajax_wpfinder_filter_books', 'wpfinder_ajax_filter_books');
add_action('wp_ajax_nopriv_wpfinder_filter_books', 'wpfinder_ajax_filter_books');

function wpfinder_ajax_filter_books() {
    $genres = isset($_POST['genres']) ? array_map('sanitize_text_field', $_POST['genres']) : array();

    $args = array(
        'post_type' => 'book',
        'posts_per_page' => 10,
    );

    if (!empty($genres)) {
        $args['tax_query'] = array(
            array(
                'taxonomy' => 'wpfinder_genre',
                'field' => 'slug',
                'terms' => $genres,
            ),
        );
    }

    $query = new WP_Query($args);

    if ($query->have_posts()) {
        while ($query->have_posts()) {
            $query->the_post();
            echo '<div><a href="' . get_permalink() . '">' . get_the_title() . '</a></div>';
        }
    } else {
        echo '<p>Нет записей по выбранным фильтрам.</p>';
    }

    wp_die();
}

На фронтенде потребуется написать JavaScript, который будет собирать выбранные чекбоксы и отправлять ajax-запрос на сервер, подгружая результаты в нужный контейнер.

Такой подход значительно улучшит юзабилити, особенно на больших сайтах.

Заключение

Создание фильтров по таксономиям в WordPress — важный навык для разработчика, который помогает улучшить структуру и удобство сайта. С помощью простого кода можно реализовать базовый функционал, а для сложных задач — подключить специализированные плагины или реализовать ajax-фильтрацию.

Если хотите использовать готовые решения с расширенным функционалом, обратите внимание на плагины, доступные на WPSHOP.ru.

Как изменить размер изображений в WordPress без создания новых файлов
19.02.2026
Как запретить индексацию определённых страниц в WordPress
05.03.2026
Как использовать REST API WordPress для автоматического управления контентом
19.03.2026
Как добавить автоматическое удаление старых кеш-файлов в WordPress
12.04.2026
Диагностика и решение проблем с неработающим AJAX в WooCommerce
23.05.2026