WordPress как на ладони
wordpress jino

get_query_var() WP 1.5

Получает переменные запроса (параметры запроса) из WP_Query, который устанавливается в глобальную переменную $wp_query.

Чтобы установить переменную запроса, используйте set_query_var()

Работает на основе: WP_Query::get()
✈ 1 раз = 0.000021с = очень быстро | 50000 раз = 0.06с = скорость света

Хуков нет.

Возвращает

Разное. Различные значение переменных.

Использование

$var = get_query_var( $var );
$var(строка) (обязательный)
Ключ переменной, которую нужно получить.
По умолчанию: нет
$default(строка)
Значение, которое нужно вернуть, если запрашиваемый параметр не установлен.
По умолчанию: ''

Примеры

#1. Получим текущий номер страницы пагинации:

$paged = get_query_var('paged') ? get_query_var('paged') : 1;

echo 'Мы находимся на странице: '. $paged;

#1.2. Текущий номер страницы пагинации на главной странице

Чтобы получить текущий номер пагинации на главной странице (она указана как статическая, используется шаблон страницы), нужно использовать ключ page:

$paged = (get_query_var('page')) ? get_query_var('page') : 1;
echo "Мы на странице:". $paged ." на главной странице блога, указанной как статическая.

#2. Запрос поиска

Получим запрос, который был введен в строку поиска, на странице результатов поиска:

$search_query= get_query_var('s');
echo "По запросу '$search_query' ничего не найдено.";

#2.1. Запрос поиска по словам

Или мы можем получить поисковой запрос отдельно по словам, записываются они в переменную search_terms:

$search_terms = get_query_var('search_terms');
print_r($search_terms);

Если запрос был "красивые картинки", то получим:

Array(
	[0] => красивые 
	[1] => картинки
)

Список всех ключей в get_query_var('ключ').

Некоторые значения заполняются на соответствующих страницах. Например, мы не можем получить параметры запроса search_terms или s, если будем получать их не на странице поиска - эти параметры на всех страницах, кроме поиска будут пустыми.

  • cpage - страница комментариев
  • paged - пагинация
  • s - запрос поиска
  • search_terms - слова поиска array()
  • page - 0
  • pagename - Например, если страница называется "Страница", то будет - stranica
  • error
  • post_parent
  • attachment
  • attachment_id
  • name - название поста
  • static
  • page_id - 0
  • category_name - uncategorized
  • tag
  • cat
  • taxonomy
  • tag_id
  • meta_key
  • meta_value
  • author_name
  • preview
  • post_type
  • posts_per_page - 10
  • comments_per_page - 10
  • order — DESC
  • second
  • minute
  • hour
  • day - 0
  • monthnum - 0
  • year - 0

и еще

  • subpost
  • subpost_id
  • w - 0
  • sentence
  • fields
  • menu_order
  • feed
  • m - 0
  • p - 0
  • tb
  • ignore_sticky_posts
  • suppress_filters
  • cache_results
  • update_post_term_cache - 1
  • update_post_meta_cache - 1
  • nopaging
  • no_found_rows
  • category__in - Array()
  • category__not_in - Array()
  • category__and - Array()
  • post__in - Array()
  • post__not_in - Array()
  • tag__in - Array()
  • tag__not_in - Array()
  • tag__and - Array()
  • tag_slug__in - Array()
  • tag_slug__and - Array()

Код get query var: wp-includes/query.php WP 4.8.2

<?php
function get_query_var( $var, $default = '' ) {
	global $wp_query;
	return $wp_query->get( $var, $default );
}

Cвязанные функции

Из метки: query (запрос)

Еще из раздела: Основной запрос

get_query_var 19 комментариев
Полезные 3 Все
  • CanaBeasT65 cайт: bezvreda.com

    Как получить айди элемента текущей произвольной таксономии на странице данного элемента(термина) таксономии
    так не работает sad

    $term_id= get_query_var('term_id')
    Ответить3.2 года назад #
  • Виталий

    К списку можно добавить еще один ключ:
    get_query_var('cpage')
    Получаем страницы комментариев.

    Ответить3 года назад #
  • Артем

    Еще одна полезная штука: get_query_var('term') – так вы получите ярлык текущего элемента таксономии.

    Ответить2.9 года назад #
  • Подскажите возникла такая проблема при использовании:
    query_posts( array ( 'posts_per_page' => 1, 'orderby' => 'title', 'order' => 'ASC' ) );
    появляется пагинация, но суть в том, что количество страниц пагинации превышает количество записей в рубрике к которой применяется query_posts. В моем случае их 5 а страниц пагинации 9 - что является количеством всех постов. В чем может быть проблема? Ну и соответственно в следствии перехода на некоторые страницы их не существует.

    Ответить2.6 года назад #
  • campusboy1848 cайт: wp-plus.ru

    Так же можно передать аргумент "taxonomy", что довольно полезно для некоторых условиях.

  • an0maly cайт: homeless.su

    В списке ключей:

    pagename - stranica

    Может русским языком "страница" написать? smile

    • Kama4464

      Имеется ввиду:

      Например, если страница называется "Страница", то будет - stranica

      Я это дописал, спасибо! thank_you

  • campusboy1848 cайт: wp-plus.ru

    У функции есть второй необязательный параметр $default

    1
    Ответить4 месяца назад #
  • Otshelnik-Fm182 cайт: across-ocean.otshelnik-fm.ru @

    @since 4.4.0 Removed the comments_popup public query variable.

    comments_popup - удалена.

    Тимур - а для комментариев нет, получается, варианта получить ссылку на комментарий по его id?
    Я имею ввиду что механизм /?p=post_id - работает для любых чпу. Просто при включенном чпу выдает 301 редирект. И это сильно упрощает жизнь когда пишу свои дополнения. Не нужно лишних запросов делать.

    Нет такого /?comment=comment_id - чтобы вело на нужный комментарий в записи?

    Придется мне походу свою реализацию писать - тикет двухгодичной давности не интересен по этому вопросу, а мне для функционала - чтобы легче работал это необходимо. Да и не первый раз. Ради ссылки кучу запросов к бд гнать - ну нафиг.
    get_comment_link - тяжелая функция чтобы просто урл получить на камент. Лучше писать что-то типа /?comment=comment_id и потом по факту перехода через темплейт редирект ловить GET-запрос, вычислять урл комментария (и постраничную навигацию к нему) и редиректить на него. Ведь не все юзеры будут переходить по всем ссылкам (например в последних комментариях)

    Просто чтобы не писать свой велосипед решил спросить - точно такого для комментариев нет?

    1
    Ответить4 месяца назад #
    • Kama4464

      Нет, такого нет но идея мне нравится. Как время будет подумаю о ней. Ну и если ты чего надумаешь скинь сюда плз.

      Ответить4 месяца назад #
      • Otshelnik-Fm182 cайт: across-ocean.otshelnik-fm.ru @

        Вот - на отдельную запись не тянет - может в сниппеты только.
        (от тебя Тимур жду комментариев - может я где не совсем прав)

        // добавим в массив новую переменную запроса
        function otfm_add_query_vars($vars){
        	$vars[] = 'comment_id';
        	return $vars;
        }
        add_filter('query_vars', 'otfm_add_query_vars');
        
        // ловим ссылку на комментарий вида ваш-сайт/?comment_id=16 (16 - id комментария)
        function otfm_catch_comment_link(){
        	if(!empty( get_query_var('comment_id') )){
        		$comment_link = get_comment_link( intval(get_query_var('comment_id')) );
        
        		wp_redirect($comment_link);
        		exit;
        	}
        }
        add_action('template_redirect', 'otfm_catch_comment_link');
        • тут надо уточнить что хук pre_get_posts, или как я выбрал template_redirect, отрабатывают верно. Но какой из них самый лучший? Я всегда template_redirect использую

        Теперь я с меньшими запросами к бд могу выводить ссылку вида /?comment_id=id и по факту клика по ней - уже запрашиваю полный адрес до комментария. И через 302 редирект я буду находиться на нужной странице комментария. У самого комментария.
        Полезно будет тем, кто пишет плагины последних комментариев или как я: пишу дополнение для WP-Recall - пользовательской активности.

        Жаль что сам ВП не позволяет подобного "из коробки"

        upd. метрика такого подхода:
        Было в моем дополнении сформировано 10 ссылок на комментарии. Стандартной функцией get_comment_link я делал 130 запросов к бд, когда заменил на свой метод - вышло 110. т.е. минус 20 запросов. т.к. по сути это html + php.

        Ответить4 месяца назад #
        • Kama4464

          По коду все хорошо... Один вопрос, почему не 301 редирект?

          П.С. хорошо бы это дело в отдельную мини статью (может тебе права автора дать?). Тема вроде полезная, хотя все же требует выяснения стоит ли так делать в целях производительности и SEO...

          Ответить3 месяца назад #
          • Otshelnik-Fm182 cайт: across-ocean.otshelnik-fm.ru @

            Эх, уведомления не было. Отвечаю сейчас:
            302 редирект - прочитал что он верней. Но я не СЕО-шник - поэтому спорить не буду.
            Насчет статьи - что тут писать то. Полезный сниппет в копилку. Ну хочешь - опубликуй отдельно, я не против.
            Сейчас у меня этот метод применяется для комментариев, ссылок на группы (wp-recall) и ссылок на темы форума и конкретные сообщения к prime-forum. Работает отлично. Проблем нету - главное нет холостых запросов к БД.
            Я делаю один доп - он выводит пользовательскую активность (по типу ВК) - и там то очень важно все делать думая о запросах - т.к. лента активности может быть большая. А не каждый листая ее будет переходить по ссылкам. Ну это уже оффтоп. Просто хотел поделиться

            1
            Ответить2 месяца назад #

Здравствуйте, !

Ваш комментарий