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

В повседневной работе с WordPress часто возникает задача организовать удобный и функциональный фильтр по пользовательским полям (custom fields) для улучшения поиска и навигации по записям. Особенно это актуально для сайтов с большим количеством контента, таких как каталоги, блоги с обзорами, портфолио и интернет-магазины. В этой статье мы подробно разберём, как самостоятельно создать такой фильтр с примерами кода и полезными плагинами.

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

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

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

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

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

Для примера создадим фильтр записей, где будем искать по одному или нескольким мета-полям. Предположим, у нас есть записи с мета-полями color и size.

Пример запроса с meta_query

$args = [
    'post_type' => 'post',
    'meta_query' => [
        'relation' => 'AND',
        [
            'key' => 'color',
            'value' => 'red',
            'compare' => '='
        ],
        [
            'key' => 'size',
            'value' => 'large',
            'compare' => '='
        ]
    ]
];
$query = new WP_Query($args);

Это вернёт все публикации, у которых мета-поле color равно red и size равно large.

Динамический фильтр на основе GET-параметров

Чтобы фильтр работал через URL, нужно получить параметры из запроса и формировать meta_query динамически.

function wponline_get_filtered_posts() {
    $meta_query = ['relation' => 'AND'];

    if (!empty($_GET['color'])) {
        $meta_query[] = [
            'key' => 'color',
            'value' => sanitize_text_field($_GET['color']),
            'compare' => '='
        ];
    }

    if (!empty($_GET['size'])) {
        $meta_query[] = [
            'key' => 'size',
            'value' => sanitize_text_field($_GET['size']),
            'compare' => '='
        ];
    }

    $args = [
        'post_type' => 'post',
        'meta_query' => $meta_query
    ];

    return new WP_Query($args);
}

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

Создание формы фильтра для пользователей

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

<form method="get" action="">
    <label for="color">Цвет:</label>
    <select name="color" id="color">
        <option value="">Любой</option>
        <option value="red">Красный</option>
        <option value="blue">Синий</option>
        <option value="green">Зелёный</option>
    </select>

    <label for="size">Размер:</label>
    <select name="size" id="size">
        <option value="">Любой</option>
        <option value="small">Маленький</option>
        <option value="medium">Средний</option>
        <option value="large">Большой</option>
    </select>

    <button type="submit">Применить фильтр</button>
</form>

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

Плагины для расширенной фильтрации по мета-полям

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

  • FacetWP — мощный плагин с поддержкой фильтрации по любым полям, таксономиям и даже кастомным запросам. Отлично подходит для каталогов и магазинов.
  • Search & Filter — бесплатный плагин с возможностью создавать фильтры по пользовательским полям, категориям, тегам и другим параметрам.
  • WPShop — фильтры продуктов

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

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

Для повышения удобства пользователей полезно сделать фильтр с подгрузкой результатов без перезагрузки страницы. Вот упрощённый пример:

add_action('wp_ajax_wponline_filter_posts', 'wponline_ajax_filter_posts');
add_action('wp_ajax_nopriv_wponline_filter_posts', 'wponline_ajax_filter_posts');

function wponline_ajax_filter_posts() {
    $color = sanitize_text_field($_POST['color'] ?? '');
    $size = sanitize_text_field($_POST['size'] ?? '');

    $meta_query = ['relation' => 'AND'];
    if ($color) {
        $meta_query[] = ['key' => 'color', 'value' => $color, 'compare' => '='];
    }
    if ($size) {
        $meta_query[] = ['key' => 'size', 'value' => $size, 'compare' => '='];
    }

    $args = ['post_type' => 'post', 'meta_query' => $meta_query];
    $query = new WP_Query($args);

    if ($query->have_posts()) {
        while ($query->have_posts()) {
            $query->the_post();
            echo '<h2>' . get_the_title() . '</h2>';
            echo '<p>' . get_the_excerpt() . '</p>';
        }
    } else {
        echo '<p>Ничего не найдено</p>';
    }
    wp_die();
}

В JavaScript отправляйте AJAX-запрос при изменении фильтра и обновляйте результаты без перезагрузки.

Советы по оптимизации фильтрации по мета-полям

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

  • Используйте индексы в базе данных на колонках meta_key и meta_value, особенно если фильтруете по часто используемым полям.
  • Минимизируйте количество условий в meta_query, объединяйте их логически.
  • Используйте transient API для кэширования результатов фильтра, если данные не обновляются часто.
  • Рассмотрите специализированные поисковые движки, например ElasticSearch, если у сайта очень большой объем данных.

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

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

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

Как добавить автоматическое удаление старых отзывов в WordPress
07.02.2026
Как использовать WPCommunity для создания форума в WordPress
16.01.2026
Как настроить автоматическое удаление неиспользуемых вариаций товаров в WooCommerce
27.04.2026
Как отключить автоматическое удаление старых изображений в медиабиблиотеке WordPress
26.03.2026
Как создать собственный шорткод в WordPress
06.11.2025