Как добавить динамические фильтры в WordPress

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

Зачем нужны динамические фильтры в WordPress

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

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

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

Создание динамических фильтров через код в WordPress

Рассмотрим пример добавления динамического фильтра по пользовательской таксономии product_brand для типа записи product. Фильтр будет выводить список брендов, и при выборе будет показывать только записи с этим брендом.

Регистрация пользовательской таксономии

Если таксономия еще не создана, добавим её в файл functions.php вашей темы или в плагин:

function wptem_register_product_brand_taxonomy() {
    $labels = array(
        'name' => 'Бренды',
        'singular_name' => 'Бренд',
        'search_items' => 'Искать бренды',
        'all_items' => 'Все бренды',
        'edit_item' => 'Редактировать бренд',
        'update_item' => 'Обновить бренд',
        'add_new_item' => 'Добавить новый бренд',
        'new_item_name' => 'Название нового бренда',
        'menu_name' => 'Бренды',
    );
    register_taxonomy('product_brand', 'product', array(
        'hierarchical' => true,
        'labels' => $labels,
        'show_ui' => true,
        'show_admin_column' => true,
        'query_var' => true,
        'rewrite' => array('slug' => 'brand'),
    ));
}
add_action('init', 'wptem_register_product_brand_taxonomy');

Вывод фильтра в шаблоне

Добавим в файл шаблона (например, archive-product.php) вывод списка брендов с ссылками:

function wptem_get_product_brand_filter() {
    $terms = get_terms(array(
        'taxonomy' => 'product_brand',
        'hide_empty' => true,
    ));
    if (!empty($terms) && !is_wp_error($terms)) {
        echo '<ul class="wptem-filter-brands">';
        echo '<li><a href="'.esc_url(get_post_type_archive_link('product')).'">Все бренды</a></li>';
        foreach ($terms as $term) {
            $term_link = get_term_link($term);
            echo '<li><a href="'.esc_url($term_link).'">'.esc_html($term->name).'</a></li>';
        }
        echo '</ul>';
    }
}

В нужном месте шаблона вызовите wptem_get_product_brand_filter().

Фильтрация записей по выбранной таксономии

WordPress сам обработает параметр в URL и выведет записи по выбранному термину таксономии благодаря стандартному запросу архива. Если нужно добавить дополнительные параметры или фильтровать по нескольким параметрам, используйте хук pre_get_posts:

function wptem_filter_products_by_brand($query) {
    if (!is_admin() && $query->is_main_query() && is_post_type_archive('product')) {
        if (!empty($_GET['brand'])) {
            $query->set('tax_query', array(
                array(
                    'taxonomy' => 'product_brand',
                    'field' => 'slug',
                    'terms' => sanitize_text_field($_GET['brand']),
                )
            ));
        }
    }
}
add_action('pre_get_posts', 'wptem_filter_products_by_brand');

Теперь можно формировать URL вида https://your-site.ru/product/?brand=brand-slug для фильтрации.

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

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

  • Filter Everything — мощный плагин для создания фильтров по любым таксономиям, метаполям, типам записей. Позволяет строить AJAX-фильтры.
  • WOOF – Products Filter for WooCommerce — отлично подходит для интернет-магазинов на WooCommerce, умеет фильтровать по атрибутам, ценам, категориям.
  • FacetWP — платный, но очень удобный и быстрый фильтр с поддержкой AJAX, кэширования и сложных условий.
  • Clearfy Pro — содержит оптимизации и дополнительные расширения, которые могут помочь с фильтрами и производительностью.

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

Добавление AJAX-фильтра для улучшения UX

Чтобы фильтр не перезагружал всю страницу, а обновлял результаты динамически, можно сделать AJAX-реализацию.

Пример AJAX фильтрации по таксономии

1. В шаблоне выводим фильтр с чекбоксами:

<form id="wptem-filter-form">
<?php
$terms = get_terms('product_brand');
foreach ($terms as $term) {
    echo '<label><input type="checkbox" name="brand[]" value="'.esc_attr($term->slug).'">'.esc_html($term->name).'</label> <br>';
}
?>
<button type="submit">Фильтровать</button>
</form>
<div id="wptem-filter-results"></div>

2. JavaScript для отправки AJAX-запроса:

jQuery(document).ready(function($) {
    $('#wptem-filter-form').on('submit', function(e) {
        e.preventDefault();
        var brands = [];
        $('input[name="brand[]"]:checked').each(function() {
            brands.push($(this).val());
        });
        $.ajax({
            url: wptem_ajax_object.ajax_url,
            type: 'POST',
            data: {
                action: 'wptem_filter_products',
                brands: brands
            },
            success: function(response) {
                $('#wptem-filter-results').html(response);
            }
        });
    });
});

3. PHP обработчик AJAX в functions.php:

function wptem_filter_products_ajax() {
    $brands = isset($_POST['brands']) ? array_map('sanitize_text_field', $_POST['brands']) : array();
    $args = array(
        'post_type' => 'product',
        'posts_per_page' => 10,
    );
    if (!empty($brands)) {
        $args['tax_query'] = array(
            array(
                'taxonomy' => 'product_brand',
                'field' => 'slug',
                'terms' => $brands,
                'operator' => 'IN',
            ),
        );
    }
    $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_reset_postdata();
    wp_die();
}
add_action('wp_ajax_wptem_filter_products', 'wptem_filter_products_ajax');
add_action('wp_ajax_nopriv_wptem_filter_products', 'wptem_filter_products_ajax');

4. Не забудьте локализовать скрипт и передать AJAX URL:

function wptem_enqueue_scripts() {
    wp_enqueue_script('wptem-filter', get_template_directory_uri() . '/js/wptem-filter.js', array('jquery'), null, true);
    wp_localize_script('wptem-filter', 'wptem_ajax_object', array(
        'ajax_url' => admin_url('admin-ajax.php'),
    ));
}
add_action('wp_enqueue_scripts', 'wptem_enqueue_scripts');

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

При создании фильтров важно учитывать производительность и безопасность:

  • Используйте sanitize_text_field и другие функции очистки для входных данных.
  • Кэшируйте результаты запросов, особенно если фильтров много и запросы сложные.
  • Используйте AJAX для улучшения UX, но не забывайте об обработке ошибок и fallback.
  • Минимизируйте количество запросов к базе, оптимизируя WP_Query.
  • Для крупных проектов рассмотрите использование плагинов с поддержкой индексации и быстрого поиска.

Заключение

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

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

WooCommerce: автоматическое удаление неактивных корзин и заказов
02.06.2026
Автоматические редиректы в WordPress без плагинов: как настроить с помощью кода
21.12.2025
Как динамически изменять заголовки страниц в WordPress
18.12.2025
Как автоматизировать удаление спама в комментариях WordPress
18.02.2026
Как избежать конфликтов между плагинами WordPress: практические решения
27.01.2026