Мне нужно создать переменную, к которой можно получить доступ через файлы шаблона WordPress Theme (index.php, header.php и т. Д.). Я знаю, что определения функций находятся внутри functions.php
файла шаблона (в пути вашей темы), но для переменных такого понятия не существует.
Например, мне постоянно нужно получать категории в моей теме, поэтому я хотел бы, чтобы это было доступно из любой точки моей темы:
$categories = get_categories(); /* get_categories() is a wordpress function */
Таким образом, я могу просто получить доступ к выделенным данным без необходимости перераспределять их каждый раз, когда мне нужно получить свои категории.
К сожалению, добавление этого фрагмента кода в мой functions.php
файл не работает, равно как и создание переменной global
.
require()
заявления , которые обернуты в функции:get_header()
,get_footer()
и т.д.; которые сами являются обертками вокруг функцииget_template_part()
. Поскольку функции в PHP имеют доступ только к переменным, определенным в них или переданным по ссылке на них, если вы хотите использовать переменную из глобальной области (или определить переменную и сделать ее доступной в глобальной области), вы должны объявить ее сначала с глобальным ключевым словом.Доминик (не знаю, как добавить примечание к его ответу):
определить только принимает скаляры, так что вы не могли сделать,
define( CATS, get_categories() );
и даже неВ противном случае define работает нормально, и это на самом деле безопаснее для скаляров (так как вы можете быть уверены, что константы не могут быть перезаписаны)
источник
Я знаю, что это действительно старый, но есть место для улучшения.
Вам следует рассмотреть возможность использования $ GLOBALS ['category'] вместо просто global.
Для этого есть две причины:
global $categories;
каждый раз.Рассмотрим этот код:
Только если мы инициализируем глобальное состояние прямо перед использованием переменной, довольно сложно сказать, глобально это или нет. И не забудьте повторить это в любом из ваших шаблонных файлов.
Для этого можно использовать соглашения об именах, но, на мой взгляд, есть лучший способ.
Подумайте об использовании
$GLOBALS['categories']
.Нам нужно только один раз инициализировать нашу переменную в functions.php, не думая
global $categories
снова. И мы видим, что это глобальный.print_r ($GLOBALS['categories']);
Проблема производительности не является проблемой вообще в этой ситуации. Я процитирую Сару Големон ( ссылка ):
источник
Это также работает:
в functions.php добавить
define('TEST', 'this is a test');
и в ваш header.php или что-то еще
echo TEST;
Есть ли какое-либо преимущество в производительности одного метода перед другим?
источник