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

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

Почему важно использовать динамические параметры в URL

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

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

Как добавить собственные параметры в URL WordPress

Для начала нужно зарегистрировать параметры, которые WordPress будет распознавать. Это делается с помощью фильтра query_vars. Добавим в functions.php вашей темы или в плагин следующий код:

function wpbono_add_query_vars( $vars ) {
    $vars[] = 'filter_price';
    $vars[] = 'filter_color';
    return $vars;
}
add_filter( 'query_vars', 'wpbono_add_query_vars' );

В данном примере мы регистрируем два параметра: filter_price и filter_color.

Теперь WordPress будет принимать эти параметры из URL, например: https://site.ru/shop?filter_price=100-500&filter_color=red

Обработка и использование параметров в шаблоне

Чтобы использовать значения параметров, нужно получить их с помощью функции get_query_var(). Например, в шаблоне архива товаров можно добавить фильтрацию:

$price = get_query_var('filter_price');
$color = get_query_var('filter_color');

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

if ( $price ) {
    list($min, $max) = explode('-', $price);
    $args['meta_query'][] = [
        'key' => '_price',
        'value' => [(float)$min, (float)$max],
        'compare' => 'BETWEEN',
        'type' => 'NUMERIC',
    ];
}

if ( $color ) {
    $args['tax_query'][] = [
        'taxonomy' => 'product_color',
        'field' => 'slug',
        'terms' => $color,
    ];
}

$query = new WP_Query( $args );

Здесь мы формируем запрос с учётом параметров из URL: фильтруем товары по цене и цвету. Важно, чтобы в вашем WordPress были настроены соответствующие мета-поля и таксономии.

Использование фильтра pre_get_posts для глобальной фильтрации

Если нужно изменить основной запрос WordPress на страницах архива или каталога, можно использовать хук pre_get_posts. Пример:

function wpbono_filter_products( $query ) {
    if( !is_admin() && $query->is_main_query() && is_post_type_archive('product') ) {
        $price = get_query_var('filter_price');
        $color = get_query_var('filter_color');

        if ( $price ) {
            list($min, $max) = explode('-', $price);
            $meta_query = [
                'key' => '_price',
                'value' => [(float)$min, (float)$max],
                'compare' => 'BETWEEN',
                'type' => 'NUMERIC',
            ];
            $query->set('meta_query', [$meta_query]);
        }

        if ( $color ) {
            $tax_query = [
                'taxonomy' => 'product_color',
                'field' => 'slug',
                'terms' => $color,
            ];
            $query->set('tax_query', [$tax_query]);
        }
    }
}
add_action('pre_get_posts', 'wpbono_filter_products');

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

Отображение текущих фильтров и создание ссылок с параметрами

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

function wpbono_add_query_arg( $url, $key, $value ) {
    $url_parts = parse_url($url);
    parse_str($url_parts['query'] ?? '', $params);
    $params[$key] = $value;
    $query = http_build_query($params);
    return $url_parts['scheme'] . '://' . $url_parts['host'] . $url_parts['path'] . '?' . $query;
}

Или проще — использовать add_query_arg() из WordPress:

$new_url = add_query_arg( 'filter_color', 'blue', get_post_type_archive_link('product') );

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

Полезные плагины для работы с фильтрами и параметрами URL

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

  • Clearfy Pro — плагин для оптимизации и расширения функционала, включая управление URL и фильтрами.
  • WPRemark — улучшает работу с комментариями и может помочь с фильтрацией по параметрам.

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

При работе с параметрами в URL всегда проверяйте и фильтруйте входящие данные, чтобы избежать уязвимостей, например, SQL-инъекций или XSS. Используйте функции WordPress для очистки данных — sanitize_text_field(), intval(), и т.д.

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

Выводя фильтры, старайтесь делать URL человеко-читаемыми и логичными, что улучшит UX и повысят конверсию.

WooCommerce: как запретить повторное создание заказа при наличии активного
03.06.2026
Как использовать хуки WordPress для удаления стилей и скриптов: практические решения и примеры
06.12.2025
Как создать динамические таблицы в WordPress с помощью шорткода и AJAX
11.03.2026
WooCommerce: принудительная авторизация пользователя при оформлении заказа
23.04.2026
Как создать и использовать REST API Endpoint в WordPress
28.11.2025