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

Фильтр 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: Добавляем правила перезаписи

function custom_rewrite_rules() { add_rewrite_rule( ‘^author/([^/]*)/?’, ‘index.php?author_name=$matches[1]’, ‘top’ ); } add_action( ‘init’, ‘custom_rewrite_rules’ );

Шаг 4: Перегенерация rewrite правил

Не забудьте перегенерировать правила перезаписи после их добавления:

flush_rewrite_rules();

Вы можете добавить этот вызов временно после регистрации rewrite правил, а затем удалить его, чтобы не перегенерировать правила на каждом хите.

Пример добавления нескольких переменных

Вы можете добавить несколько переменных в массив:

add_filter( 'query_vars', 'custom_query_vars' );

function custom_query_vars( $vars ) {
    $vars[] = 'custom_var1';
    $vars[] = 'custom_var2';
    return $vars;
}

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

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