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

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

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

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

Основные задачи динамических фильтров:

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

Реализовать такие фильтры можно вручную с помощью WP Query и AJAX или использовать готовые решения.

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

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

1. Регистрация таксономии и мета-поля

Предполагается, что произвольная таксономия и мета-поле уже есть. Если нет, их добавляем так:

function wptem_register_product_taxonomy() {
  register_taxonomy('product_cat', 'product', [
    'label' => 'Категории продуктов',
    'hierarchical' => true,
    'public' => true,
  ]);
}
add_action('init', 'wptem_register_product_taxonomy');

function wptem_add_price_meta() {
  register_post_meta('product', 'price', [
    'type' => 'number',
    'single' => true,
    'show_in_rest' => true,
  ]);
}
add_action('init', 'wptem_add_price_meta');

2. Вывод формы фильтра на фронтенде

Добавим в шаблон темы следующий HTML с динамическими значениями:

function wptem_show_product_filter() {
  $terms = get_terms(['taxonomy' => 'product_cat', 'hide_empty' => true]);
  
  echo '<form id="wptem-product-filter">';
  echo '<select name="product_cat"><option value="">Все категории</option>';
  foreach ($terms as $term) {
    echo '<option value="' . esc_attr($term->slug) . '">' . esc_html($term->name) . '</option>';
  }
  echo '</select>';
  
  echo '<input type="number" name="min_price" placeholder="Мин. цена" />';
  echo '<input type="number" name="max_price" placeholder="Макс. цена" />';
  
  echo '<button type="submit">Фильтровать</button>';
  echo '</form>';
}
add_action('wp_footer', 'wptem_show_product_filter');

3. Обработка AJAX-запроса фильтрации

Зарегистрируем AJAX-обработчик и создадим WP_Query с параметрами фильтрации:

function wptem_filter_products_ajax() {
  $cat = isset($_POST['product_cat']) ? sanitize_text_field($_POST['product_cat']) : '';
  $min_price = isset($_POST['min_price']) ? floatval($_POST['min_price']) : 0;
  $max_price = isset($_POST['max_price']) ? floatval($_POST['max_price']) : 0;

  $meta_query = ['relation' => 'AND'];
  if ($min_price) {
    $meta_query[] = [
      'key' => 'price',
      'value' => $min_price,
      'compare' => '>=',
      'type' => 'NUMERIC',
    ];
  }
  if ($max_price) {
    $meta_query[] = [
      'key' => 'price',
      'value' => $max_price,
      'compare' => '<=',
      'type' => 'NUMERIC',
    ];
  }

  $tax_query = [];
  if ($cat) {
    $tax_query[] = [
      'taxonomy' => 'product_cat',
      'field' => 'slug',
      'terms' => $cat,
    ];
  }

  $args = [
    'post_type' => 'product',
    'posts_per_page' => 10,
    'meta_query' => $meta_query,
    'tax_query' => $tax_query,
  ];

  $query = new WP_Query($args);
  ob_start();
  if ($query->have_posts()) {
    echo '<ul>';
    while ($query->have_posts()) {
      $query->the_post();
      echo '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a> — Цена: ' . get_post_meta(get_the_ID(), 'price', true) . '</li>';
    }
    echo '</ul>';
  } else {
    echo '<p>Товары не найдены.</p>';
  }
  wp_reset_postdata();
  $html = ob_get_clean();
  wp_send_json_success($html);
}
add_action('wp_ajax_wptem_filter_products', 'wptem_filter_products_ajax');
add_action('wp_ajax_nopriv_wptem_filter_products', 'wptem_filter_products_ajax');

4. JavaScript для отправки формы AJAX и вывода результата

Вставьте скрипт в футер или подключите отдельным файлом:

document.addEventListener('DOMContentLoaded', function() {
  const form = document.getElementById('wptem-product-filter');
  form.addEventListener('submit', function(e) {
    e.preventDefault();
    const data = new FormData(form);
    data.append('action', 'wptem_filter_products');
    fetch('<?php echo admin_url('admin-ajax.php'); ?>', {
      method: 'POST',
      body: data
    })
    .then(response => response.json())
    .then(result => {
      if (result.success) {
        let container = document.getElementById('wptem-filter-results');
        if (!container) {
          container = document.createElement('div');
          container.id = 'wptem-filter-results';
          form.parentNode.insertBefore(container, form.nextSibling);
        }
        container.innerHTML = result.data;
      }
    });
  });
});

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

Если не хочется писать код, можно воспользоваться проверенными плагинами с поддержкой AJAX и динамического построения фильтров.

1. FacetWP

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

Подробнее: FacetWP на WPSHOP.RU

2. Filter Everything

Этот плагин позволяет создавать фильтры для любых типов записей и таксономий, поддерживает AJAX и имеет гибкие настройки отображения. Бесплатная версия позволяет решить многие задачи.

Подробнее: Filter Everything на WPSHOP.RU

3. WPGPT для расширенной фильтрации

Если у вас есть интеграция с WPGPT, можно использовать его возможности для создания интеллектуальных фильтров через AI, что позволяет создавать более релевантные результаты фильтрации на основе анализа содержимого.

Подробнее: WPGPT на WPSHOP.RU

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

Фильтрация по мета-полям и таксономиям может создавать нагрузку на базу данных, особенно при большом объёме данных. Вот несколько советов, как избежать проблем:

  • Используйте индексы в базе данных — для часто используемых мета-полей (например, price) создайте индексы через SQL, чтобы ускорить запросы.
  • Кэширование результатов фильтрации — можно использовать transient API или плагины кэширования, чтобы не выполнять WP_Query при каждом запросе.
  • Лимитируйте количество выводимых записей — не показывайте все результаты сразу, используйте пагинацию или кнопку «Показать ещё».
  • Оптимизируйте фронтенд — минимизируйте и объединяйте JS, используйте асинхронные запросы.

Заключение по внедрению динамических фильтров

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

Если хотите автоматизировать сбор отзывов или анализ контента с помощью AI для умной фильтрации, обратите внимание на плагин WPGPT.

WooCommerce: автоматическое возврат средств после отмены заказа
07.05.2026
Как изменить метаданные для оценки статьи в WordPress
25.02.2026
Автоматические редиректы в WordPress без плагинов: как настроить с помощью кода
21.12.2025
Успешное обновление WordPress без проблем с плагинами
20.01.2026
Разрешение проблем с хостингом WordPress и использование хуков для оптимизации
07.12.2025