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

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

Почему стандартные фильтры WooCommerce не всегда подходят

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

Например, если вы продаёте билеты (что может быть актуально для сайта wpticket.ru), вам может понадобиться фильтр по дате события, месту проведения, типу билета и другим параметрам, которых нет в стандартном наборе.

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

Обзор популярных плагинов для расширенных фильтров

1. FacetWP

FacetWP — мощный плагин для создания фильтров на основе пользовательских полей, таксономий и метаданных. Он легко интегрируется с WooCommerce и позволяет создавать фильтры по любым параметрам.

Преимущества:

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

Недостаток — платный плагин, но для профессиональных проектов он себя оправдывает.

2. WOOF – Products Filter for WooCommerce

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

Подходит для тех, кто хочет получить функциональный фильтр без больших затрат.

Создание собственного уникального фильтра товаров на WordPress

Если вы хотите максимально контролировать функциональность и внешний вид фильтра, можно сделать собственное решение. Ниже я приведу пример создания простого фильтра по пользовательскому полю "Место проведения" для товаров WooCommerce.

Шаг 1. Добавляем пользовательское поле к товару

Для начала добавим метаполе для товаров в админке. Для этого используем хук add_action('woocommerce_product_options_general_product_data', 'wpticket_add_custom_field');:

function wpticket_add_custom_field() {
    woocommerce_wp_text_input(
        array(
            'id' => '_wpticket_event_location',
            'label' => __('Место проведения события', 'wpticket'),
            'desc_tip' => true,
            'description' => __('Введите место проведения события для этого товара.', 'wpticket')
        )
    );
}
add_action('woocommerce_product_options_general_product_data', 'wpticket_add_custom_field');

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

function wpticket_save_custom_field($post_id) {
    $location = isset($_POST['_wpticket_event_location']) ? sanitize_text_field($_POST['_wpticket_event_location']) : '';
    update_post_meta($post_id, '_wpticket_event_location', $location);
}
add_action('woocommerce_process_product_meta', 'wpticket_save_custom_field');

Шаг 2. Выводим фильтр на страницу каталога

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

function wpticket_display_location_filter() {
    global $wpdb;
    $locations = $wpdb->get_col("SELECT DISTINCT meta_value FROM {$wpdb->postmeta} WHERE meta_key = '_wpticket_event_location' AND meta_value != ''");
    if (empty($locations)) return;
    echo '<form method="GET" id="wpticket-location-filter">';
    echo '<select name="wpticket_location" onchange="this.form.submit()">';
    echo '<option value="">Выберите место проведения</option>';
    foreach ($locations as $location) {
        $selected = (isset($_GET['wpticket_location']) && $_GET['wpticket_location'] === $location) ? 'selected' : '';
        echo "<option value=\"$location\" $selected>" . esc_html($location) . "</option>";
    }
    echo '</select>';
    echo '</form>';
}
add_action('woocommerce_before_shop_loop', 'wpticket_display_location_filter', 20);

Шаг 3. Фильтруем товары по выбранному месту

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

function wpticket_filter_products_by_location($query) {
    if (!is_admin() && $query->is_main_query() && (is_shop() || is_product_category() || is_product_tag())) {
        if (!empty($_GET['wpticket_location'])) {
            $meta_query = array(
                array(
                    'key' => '_wpticket_event_location',
                    'value' => sanitize_text_field($_GET['wpticket_location']),
                    'compare' => '='
                )
            );
            $query->set('meta_query', $meta_query);
        }
    }
}
add_action('pre_get_posts', 'wpticket_filter_products_by_location');

Дополнительные советы по созданию фильтров

Оптимизация запросов

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

AJAX-подгрузка результатов

Для повышения удобства пользователей реализуйте фильтрацию без перезагрузки страницы с помощью AJAX. Это требует написания JavaScript-кода и использования WordPress AJAX API.

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

Иногда удобнее создавать собственные таксономии (например, "Место проведения"), что позволит использовать стандартные инструменты WordPress для фильтрации и архивирования.

Заключение

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

Как создать практическую систему обратной связи в WordPress с примерами кода
13.12.2025
Как добавить автоматическое удаление старых тикетов в WordPress
06.04.2026
Автоматическое присвоение ответственных сотрудников тикетам в WordPress
22.02.2026
Как сделать автоматический резерв журналов ошибок WordPress
13.02.2026
Как автоматизировать управление обработкой тикетов в WordPress
24.12.2025