Фильтр 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 и обработаны через функции, как в примерах выше.