Фильтр query_vars
— это мощный инструмент WordPress, который позволяет разработчикам добавлять собственные переменные запроса (query variables). Эти переменные могут быть использованы для кастомизации URL и дальнейшей обработки на уровне шаблонов или плагинов.
WordPress по умолчанию обрабатывает множество переменных запроса, таких как p
, post_type
, category_name
, tag
, и т.д. Однако, если вы хотите использовать свои собственные переменные в URL для обработки запросов, вам понадобится фильтр query_vars
.
Как работает query_vars
Фильтр query_vars
позволяет вам добавить свои переменные в массив переменных запроса, которые могут быть использованы в WP_Query
. Эти переменные будут доступны для обработки через глобальный объект $wp_query
.
Синтаксис фильтра
add_filter( 'query_vars', 'custom_query_vars' );
function custom_query_vars( $vars ) {
$vars[] = 'custom_var'; // Добавляем нашу переменную
return $vars;
}
- $vars: Массив существующих переменных запроса.
- Возвращается обновлённый массив с вашими пользовательскими переменными.
Пример использования
Допустим, вы хотите добавить переменную author_name
в URL, чтобы фильтровать посты по имени автора. Вам нужно добавить эту переменную с помощью фильтра query_vars
и обработать её в коде:
Шаг 1: Добавляем переменную через query_vars
add_filter( 'query_vars', 'custom_query_vars' );
function custom_query_vars( $vars ) {
$vars[] = 'author_name';
return $vars;
}
Шаг 2: Обрабатываем переменную в шаблоне
Теперь, когда переменная добавлена, она может быть использована в запросе или в вашем шаблоне. Например, вы можете получить значение переменной и использовать его для кастомного запроса:
function custom_author_query() {
global $wp_query;
// Получаем значение нашей переменной из URL
$author_name = get_query_var( 'author_name' );
if ( $author_name ) {
$args = array(
'post_type' => 'post',
'author_name' => $author_name,
);
$custom_query = new WP_Query( $args );
if ( $custom_query->have_posts() ) {
while ( $custom_query->have_posts() ) {
$custom_query->the_post();
the_title( '<h2>', '</h2>' );
the_excerpt();
}
} else {
echo 'Нет постов от автора ' . esc_html( $author_name );
}
wp_reset_postdata();
}
}
add_action( 'template_redirect', 'custom_author_query' );
Теперь вы можете перейти по URL типа http://example.com/?author_name=john
, и WordPress выведет посты, написанные автором с именем «john».Использование кастомных переменных в rewrite rules
Для улучшения пользовательского опыта вы можете настроить человекопонятные URL-адреса для ваших кастомных переменных запроса, используя правила перезаписи (rewrite rules
).Шаг 3: Добавляем правила перезаписи
Шаг 4: Перегенерация rewrite правил
Не забудьте перегенерировать правила перезаписи после их добавления:
Вы можете добавить этот вызов временно после регистрации rewrite правил, а затем удалить его, чтобы не перегенерировать правила на каждом хите.
Пример добавления нескольких переменных
Вы можете добавить несколько переменных в массив:
add_filter( 'query_vars', 'custom_query_vars' );
function custom_query_vars( $vars ) {
$vars[] = 'custom_var1';
$vars[] = 'custom_var2';
return $vars;
}
Эти переменные теперь могут быть использованы в запросах, URL и обработаны через функции, как в примерах выше.