Область переменных темы WordPress

Мне нужно создать переменную, доступ к которой можно получить во всех файлах шаблона темы WordPress (index.php, header.php и т. д.). Я знаю, что определения функций входят в файл шаблона functions.php (в вашем пути к тегам), но переменных нет.

Например, мне постоянно нужно получать категории в моей теме, поэтому я хотел бы, чтобы это было доступно из любой точки моей темы:

$categories = get_categories(); /* get_categories() is a wordpress function */ 

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

К сожалению, добавление этой части кода в мой файл functions.php не работает, также не делает переменную global

7 голосов | спросил Luca Matteis 6 52009vEurope/Moscow11bEurope/MoscowFri, 06 Nov 2009 17:16:53 +0300 2009, 17:16:53

4 ответа


5

По-видимому global делает трюк. Проблема заключалась в том, что моя переменная $categories должна была быть переопределена с помощью global перед этим, в каждом шаблоне мне нужно было его использовать.

ответил 6 52009vEurope/Moscow11bEurope/MoscowFri, 06 Nov 2009 17:36:28 +0300 2009, 17:36:28
1

Доминик (не знаю, как добавить примечание к его ответу):

определяет только принимает скаляры, поэтому вы не могли сделать define( CATS, get_categories() ); и даже не

$categories = get_categories();
define( CATS, $categories );

В противном случае определение работает нормально, и это действительно безопасно для скаляров (так как вы можете быть уверены, что константы не могут быть перезаписаны)

ответил 27 J000000Wednesday11 2011, 00:24:53
0

Это также работает:

в функции.php add define('TEST', 'this is a test');
и в вашем header.php или любом другом echo TEST;

Есть ли какое-либо преимущество для одного метода над другим?

ответил Dominic 30 22010vEurope/Moscow11bEurope/MoscowTue, 30 Nov 2010 18:35:07 +0300 2010, 18:35:07
0

Я знаю, что этот действительно старый, но есть место для улучшения.

Вам следует рассмотреть возможность использования $ GLOBALS ['categories'] вместо глобального.

Для этого есть две причины:

  1. Нам не нужно писать global $categories; каждый раз.
  2. Это кристально чисто, тогда мы используем глобальный, а затем нет.

Рассмотрим этот код:

global $categories;

// a lot of PHP code here

<?php print_r ($categories) ?>

Только если мы инициализируем глобальное состояние перед использованием переменной, это довольно сложно сказать, если оно глобально или нет. И не забудьте повторить его в любом из файлов шаблонов, которые у вас есть.

Для этого можно использовать соглашения об именах, но, на мой взгляд, есть лучший способ.

Рассмотрим использование $GLOBALS['categories'].

Нам нужно только инициализировать нашу переменную один раз в functions.php, не задумываясь о global $categories снова. И мы видим, что это глобальный.

print_r ($GLOBALS['categories']);

В этой ситуации проблема с производительностью не является проблемой. Я приведу Сара Големона ( ссылка ):

  

Что это значит для использования массива $ GLOBALS? Это верно,   глобальное ключевое слово технически быстрее. Теперь я хочу быть действительно   ясно об одном здесь. Небольшое значение скорости, предоставляемое с использованием   ваши глобальные переменные как локализованные [скомпилированные переменные] должны быть серьезно   сопоставимо с удобством просмотра вашего кода в пять   лет и зная, что $ foo происходит из глобальной сферы.   something_using ($ GLOBALS [ 'Foo']); ВСЕГДА будет яснее вам   строка, чем глобальная $ foo; /* buncha code * /something_using ($ foo);   Не будьте мудрыми и фунтами глупыми.

ответил Your Filthy Rich Neighbor 2 J000000Thursday15 2015, 11:33:26

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132