Фильтр query_vars в WordPress: Как добавить пользовательские переменные в запросы

Фильтр query_vars в WordPress — мощный инструмент для работы с пользовательскими переменными (параметрами URL) в системе запросов. С его помощью можно добавлять собственные параметры в URL и затем использовать их для фильтрации или настройки контента на страницах сайта.

Как работает query_vars?

Когда WordPress обрабатывает URL-запрос, он разбирает его и преобразует в набор параметров для системы запросов (query). Эти параметры называются переменными запроса (query vars). По умолчанию WordPress поддерживает множество встроенных переменных (например, post_type, category_name, author и другие), которые влияют на то, какие записи и страницы будут показаны пользователю.

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

Пример использования фильтра

Допустим, вы хотите добавить параметр my_param в URL и использовать его для фильтрации контента на сайте. Для этого нужно зарегистрировать этот параметр через фильтр query_vars.

Шаг 1: Добавляем параметр через фильтр query_vars

Чтобы WordPress распознал новый параметр в URL, нужно добавить его с помощью фильтра query_vars. Вот как это сделать:

function add_custom_query_var( $vars ) {
    $vars[] = 'my_param'; // Добавляем нашу переменную в список
    return $vars;
}
add_filter( 'query_vars', 'add_custom_query_var' );

Здесь:

  • $vars — это массив всех допустимых переменных запроса в WordPress.
  • Мы добавляем в этот массив новую переменную my_param, которую можно будет использовать в URL.

Шаг 2: Использование параметра в шаблонах

Теперь, когда my_param зарегистрирован, вы можете использовать его в коде. Например, получить значение этого параметра можно через объект запроса WP_Query или функцию get_query_var().

function display_custom_query_var() {
    // Получаем значение переменной my_param из запроса
    $my_param_value = get_query_var( 'my_param' );

    // Если значение параметра существует, выводим его
    if ( !empty( $my_param_value ) ) {
        echo '<p>Значение параметра my_param: ' . esc_html( $my_param_value ) . '</p>';
    }
}
add_action( 'wp_footer', 'display_custom_query_var' );

Теперь, если вы добавите параметр в URL, например:

https://example.com/?my_param=test

На странице будет выведено:

Значение параметра my_param: test

Шаг 3: Применение пользовательского параметра в запросах

Допустим, вы хотите фильтровать посты в зависимости от значения my_param. Это можно сделать с помощью WP_Query в файле шаблона:

function filter_posts_by_custom_query_var( $query ) {
    if ( $query->is_main_query() && !is_admin() && $query->is_home() ) {
        $my_param_value = get_query_var( 'my_param' );

        // Если параметр существует, фильтруем посты по определённому условию
        if ( $my_param_value ) {
            $query->set( 'meta_key', 'custom_field' );
            $query->set( 'meta_value', $my_param_value );
        }
    }
}
add_action( 'pre_get_posts', 'filter_posts_by_custom_query_var' );

В этом примере:

  • Мы проверяем, что это основной запрос (is_main_query), и что это не админка.
  • Затем получаем значение переменной my_param и используем его для фильтрации постов по пользовательскому полю custom_field.

Как это работает

  1. Фильтр query_vars добавляет параметр my_param в список допустимых переменных для запросов.
  2. WordPress распознает этот параметр, когда он появляется в URL, и сохраняет его как переменную запроса.
  3. Функция get_query_var( 'my_param' ) возвращает значение этого параметра, которое можно использовать для вывода или фильтрации контента.

Зачем использовать query_vars?

Фильтр query_vars полезен, когда нужно:

  • Добавить пользовательские параметры в URL для передачи данных.
  • Фильтровать контент на основе пользовательских значений (например, фильтрация товаров по цене или категории).
  • Использовать переменные в кастомных запросах WordPress для более сложной логики отображения.

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

Почитаем еще?: