Первый плагин, основной вопрос… Я пытаюсь напечатать переменную $xavi
из плагина в тему следующим образом:
add_action('init', '_load_options');
function _load_options() {
global $xavi;
}
Чтобы я мог использовать его в файле темы следующим образом:
<?=$xavi;?>
Это не похоже init
на то, что это правильный хук действия для этого, но единственный другой, который имеет смысл, wp_head
и не работает
Любые идеи, какой хук я должен использовать или как мне определить переменные (возможно, с помощью существующей функции/метода WP вместо создания с нуля)?
Спасибо!
Ваш веб-хост отключен
register_globals
в php.ini, поэтому вам нужно «регистрировать» свои переменные вручную каждый раз, когда вы хотите его использовать. Например:Другой подход использует
$GLOBALS
массив:Но, на мой взгляд, вам следует избегать использования глобальных переменных. Вместо этого используйте простой класс реестра, в который вы можете добавлять/получать свои значения.
РЕДАКТИРОВАТЬ
Это не специальное решение для WordPress и может быть немного излишним для этого простого вопроса. Шаблон реестра является официальным шаблоном проектирования программирования. То же самое касается шаблона singleton, который я использовал и здесь.
Что мы делаем здесь, так это сохраняем наш контент в объекте реестра. Это синглтон, поэтому создается только один экземпляр.
Я знаю, проблема не решена на самом деле. Вместо использования массива $GLOBALS мы используем класс реестра, который действительно также является «глобальным», поскольку мы вызываем экземпляр каждый раз, когда он нам нужен. У вас нет контроля, где вы это называете. Кроме того, тестирование одноэлементного класса может быть проблематичным. Если вам нужен больший контроль, просто посмотрите на фабричный шаблон с внедрением зависимостей.
В вашем плагине/теме вам нужно только вернуть экземпляр, и вы готовы его использовать:
Интересно… можете ли вы показать пример использования класса для регистрации таких переменных?
да, пожалуйста, я искал примеры, но ничего не нашел, и я бы предпочел пойти этим путем, чем использовать глобальные переменные
Я добавил пример своего класса реестра, который я использую в своих плагинах. Надеюсь это поможет.
Спасибо, Ян, хотя я бы предпочел как можно меньше изменять тему (только при повторении переменной)
Другой вариант — использовать шорткод. В Кодексе Водпесса подробно описаны все детали. Но в основном настройте функцию, которая возвращает вашу переменную. Добавьте шорткод в wordpress, затем вызовите
do_shortcode( '[shortcode]' )
внутри своего PHP-кода, и вы можете повторить его или сохранить для дальнейшей обработки. Вы можете использовать шорткод внутри контента.Вы можете использовать функции в темах. Если я прав, вы можете добавить в свой шаблон следующее:
Должно сработать. Однако _, вероятно, означает, что это частная функция, поэтому вам может потребоваться сделать функцию общедоступной.
Внутри вашего плагина
Затем напечатайте переменную в свой шаблон/тему
мой источник: https://gist.github.com/aahan/7444046