Как создать AJAX фильтр товаров в WordPress

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

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

AJAX (Asynchronous JavaScript and XML) — это технология, позволяющая обмениваться данными с сервером и обновлять часть страницы без её полной перезагрузки. В контексте WordPress AJAX фильтр товаров — это механизм, при котором пользователь выбирает параметры фильтрации (например, по цене, категории, атрибутам), и на странице автоматически обновляется список товаров без перезагрузки.

Преимущества AJAX фильтра:

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

Для WooCommerce и кастомных типов записей AJAX фильтры особенно актуальны, поскольку позволяют эффективно работать с большими каталогами.

Основные шаги создания AJAX фильтра товаров в WordPress

Реализация AJAX фильтра состоит из нескольких этапов:

  1. Создание HTML формы фильтра с нужными параметрами;
  2. Подключение JavaScript для отправки AJAX-запросов при изменении фильтра;
  3. Обработка AJAX-запросов на стороне PHP — получение фильтров и формирование запроса WP_Query;
  4. Возврат отфильтрованных товаров в формате HTML и обновление части страницы;
  5. Оптимизация и кеширование запросов для повышения производительности.

Создаем HTML форму фильтра

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

<form id="wpkit-filter-form">
  <select name="category">
    <option value="">Все категории</option>
    <option value="electronics">Электроника</option>
    <option value="books">Книги</option>
  </select>

  <input type="number" name="min_price" placeholder="Мин. цена" />
  <input type="number" name="max_price" placeholder="Макс. цена" />

  <button type="submit">Фильтровать</button>
</form>

<div id="wpkit-products-list"></div>

Этот блок мы добавим в нужное место шаблона, например, на страницу каталога.

Добавляем JavaScript для AJAX-запросов

Подключим скрипт, который будет перехватывать отправку формы и делать AJAX-запрос:

jQuery(document).ready(function($) {
  $('#wpkit-filter-form').on('submit', function(e) {
    e.preventDefault();
    var data = $(this).serialize();

    $.ajax({
      url: wpkit_ajax_object.ajax_url,
      type: 'POST',
      data: {
        action: 'wpkit_filter_products',
        filter_data: data
      },
      success: function(response) {
        $('#wpkit-products-list').html(response);
      },
      error: function() {
        alert('Ошибка при загрузке товаров');
      }
    });
  });
});

Обратите внимание, что для передачи AJAX-URL и nonce рекомендуется использовать функцию wp_localize_script в PHP.

Обработка AJAX-запроса в PHP

В файле functions.php вашей темы или плагина добавим обработчик:

add_action('wp_ajax_wpkit_filter_products', 'wpkit_ajax_filter_products');
add_action('wp_ajax_nopriv_wpkit_filter_products', 'wpkit_ajax_filter_products');

function wpkit_ajax_filter_products() {
  parse_str($_POST['filter_data'], $filter);

  $args = [
    'post_type' => 'product', // для WooCommerce
    'posts_per_page' => 10,
    'meta_query' => [],
    'tax_query' => []
  ];

  if (!empty($filter['category'])) {
    $args['tax_query'][] = [
      'taxonomy' => 'product_cat',
      'field' => 'slug',
      'terms' => sanitize_text_field($filter['category']),
    ];
  }

  if (!empty($filter['min_price'])) {
    $args['meta_query'][] = [
      'key' => '_price',
      'value' => floatval($filter['min_price']),
      'compare' => '>=',
      'type' => 'NUMERIC'
    ];
  }

  if (!empty($filter['max_price'])) {
    $args['meta_query'][] = [
      'key' => '_price',
      'value' => floatval($filter['max_price']),
      'compare' => '<=',
      'type' => 'NUMERIC'
    ];
  }

  $query = new WP_Query($args);

  if ($query->have_posts()) {
    while ($query->have_posts()) {
      $query->the_post();
      wc_get_template_part('content', 'product'); // шаблон WooCommerce
    }
  } else {
    echo '<p>Товары не найдены.</p>';
  }
  wp_reset_postdata();
  wp_die();
}

Этот обработчик получает данные фильтра, формирует WP_Query с условиями и возвращает HTML товаров.

Примеры плагинов для AJAX фильтрации

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

  • Ajax Filter for WooCommerce — плагин с гибкой настройкой фильтров по атрибутам, цене, категориям;
  • Clearfy Pro — набор инструментов оптимизации, включая улучшенный AJAX функционал;
  • WPRemark — плагин для оценки и фильтрации отзывов с AJAX.

Использование плагинов позволяет сэкономить время и получить дополнительные опции фильтрации без глубокой доработки кода.

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

При работе с AJAX фильтрами важно учитывать нагрузку на сервер и скорость отклика:

  • Используйте кеширование результатов — например, с помощью Transients API или объектов кеша;
  • Минимизируйте количество запросов — обрабатывайте только измененные параметры;
  • Ограничивайте количество выводимых товаров на страницу;
  • Используйте индексы в базе данных для мета-запросов и таксономий;
  • Проверяйте и оптимизируйте фронтенд код, избегайте избыточных перерендерингов.

Правильная архитектура AJAX фильтра позволит сделать сайт быстрым и удобным для посетителей.

Пример использования Transients API для кеширования

function wpkit_ajax_filter_products() {
  parse_str($_POST['filter_data'], $filter);
  $cache_key = 'wpkit_filter_' . md5(serialize($filter));

  if ( false === ($output = get_transient($cache_key)) ) {
    // Здесь формируем WP_Query и генерируем $output
    ob_start();
    // ...код запроса и вывода товаров...
    $output = ob_get_clean();
    set_transient($cache_key, $output, 3600); // кеш на час
  }

  echo $output;
  wp_die();
}

Заключение

Создание AJAX фильтра товаров в WordPress — это отличный способ улучшить взаимодействие пользователей с вашим сайтом. С помощью простого HTML, JavaScript и PHP вы можете реализовать динамическую фильтрацию, а при необходимости — использовать мощные плагины из магазина WPSHOP для расширенных функций и оптимизации. Обязательно следите за производительностью и UX, чтобы ваш сайт оставался быстрым и удобным.

Как создать индивидуальные типы постов в WordPress с поддержкой метаполей
05.03.2026
Как удалить не удаляемые плагины в WordPress: эффективные методы
20.11.2025
WooCommerce: как исключить товары с определёнными атрибутами из корзины
10.05.2026
Как создать автоматически обновляемый сайт на WordPress с помощью WPRemark
12.03.2026
Как настроить автоматическое удаление неактивных пользователей в WordPress
28.03.2026