Фильтр 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
.
Как это работает
- Фильтр
query_vars
добавляет параметрmy_param
в список допустимых переменных для запросов. - WordPress распознает этот параметр, когда он появляется в URL, и сохраняет его как переменную запроса.
- Функция
get_query_var( 'my_param' )
возвращает значение этого параметра, которое можно использовать для вывода или фильтрации контента.
Зачем использовать query_vars
?
Фильтр query_vars
полезен, когда нужно:
- Добавить пользовательские параметры в URL для передачи данных.
- Фильтровать контент на основе пользовательских значений (например, фильтрация товаров по цене или категории).
- Использовать переменные в кастомных запросах WordPress для более сложной логики отображения.
Фильтр query_vars
расширяет возможности WordPress, позволяя добавлять и использовать пользовательские параметры в запросах. Это полезно для создания динамических страниц, фильтрации контента, передачи данных через URL и многого другого.