получить var запроса по сравнению с глобальными переменными запроса?


У меня есть переменные запроса, определенные в functions.php использование:

add_filter('init', 'add_query_vars');

function add_query_vars() {
    global $wp;
    $wp->add_query_var('profession');
}

До сих пор для получения var запроса в шаблонах страниц я использовал $profession = get_query_var('profession');. Аналогичный пример $paged = get_query_var('paged'); также показан для переменной $paged на странице Кодекса для get_query_var(). Однако сегодня я узнал, что переменные запроса доступны как глобальные переменные. Все, что мне нужно сделать, это объявить global $profession;, и я могу начать использовать значение переменной в любом месте шаблона. Это мне кажется быть гораздо лучшим способом доступа к vars запроса без накладных расходов вложенных функций get_query_var().

Есть ли веская причина использовать get_query_var() для извлечения переменных запроса вместо доступа к ним в качестве глобальных переменных? Если нет, то почему get_query_var() вообще существует?

 3
Author: John, 2013-04-18

1 answers

get_query_var() является оболочкой для $wp_query->get($var);. Но глобальный $wp_query не всегда идентичен тому, который был установлен во время запроса. Это главная проблема с query_posts().
И другие плагины также могут непреднамеренно перезаписывать эти переменные. Я видел плагины, помещающие $i в глобальное пространство имен...

И возвращаемые значения различны:

  • $GLOBALS['missing_var'] равно NULL, если такой переменной нет. Строгая проверка типа - это: if ( NULL !== $GLOBALS['missing_var'] ).
  • get_query_var('missing_var'); - пустая строка если эта переменная не существует. Строгая проверка типа - это: if ( '' !== get_query_var('missing_var').

Когда другим программистам приходится работать с вашим кодом, они всегда могут следовать get_query_var(), чтобы увидеть резервное значение. Это невозможно с глобальными переменными.

А затем планируется уменьшить количество глобальных переменных в WordPress. Используйте API (функцию), и вы, вероятно, в безопасности. С другой стороны, доступ к глобальным переменным может привести к проблемам.

 5
Author: fuxia, 2017-04-13 12:37:49