У меня есть плагин, который объявляется и сцепил применяющие лучшие методы, описанные в этом связанном вопросе:
Wordpress: доступ к функции плагина от темы
Таким образом, это смотрит (платонически) как это:
if ( !class_exists( 'Foo' ) ) {
class Foo {
...
public function do_stuff() {
// does stuff
}
}
}
if ( class_exists( 'Foo' ) ) {
$MyFoo = new Foo();
}
Теперь, если я называю $MyFoo-> do_stuff () из файла темы, такой как, скажем, single.php, $MyFoo на самом деле does_stuff, и я вижу вывод на странице.
Однако, если я пишу функцию в functions.php, который хочет назвать $MyFoo-> do_stuff () и затем вызвать ту функцию от single.php, объект не найден. Таким образом,
Работы:
in themes/my_theme/single.php:
if (isset($MyFoo))
$MyFoo->do_stuff();
Не работает:
in themes/my_theme/functions.php:
function do_some_foo_stuff() {
...
if (isset($MyFoo)) {
$MyFoo->do_stuff();
} else {
echo "no MyFoo set";
}
...
}
themes/my_theme/single.php:
if (isset($MyFoo))
do_some_foo_stuff();
Выводы-> "никакой MyFoo устанавливают"
Это может быть полностью неудивительно, но это - что-то, что я должен работать, поэтому если бы кто-либо может объяснить, что продолжается, это ценилось бы. Почему функции темы не могут зарегистрировать (или другие сменные файлы в mu-плагинах в этом отношении) находят объект $MyFoo?
Прочитайте о области видимости переменной. Переменная $MyFoo
недоступна в функции do_some_foo_stuff()
, если сначала не объявить ее глобальной;
function do_some_foo_stuff()
{
global $MyFoo;
...
}