получить 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()
вообще существует?
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 (функцию), и вы, вероятно, в безопасности. С другой стороны, доступ к глобальным переменным может привести к проблемам.