файл функций, плагин и область видимости темы в WordPress Mu - PullRequest
1 голос
/ 25 июня 2010

У меня есть плагин, который объявлен и подключен в соответствии с рекомендациями, описанными в этом связанном вопросе:

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 did_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();

Выходы -> «no MyFoo set»

Это может бытьСовершенно неудивительно, но это то, что мне нужно / я хочу работать, поэтому, если кто-нибудь сможет объяснить, что происходит, это будет оценено.Почему файл функций темы (или другие файлы плагинов в mu-плагинах) не может найти объект $ MyFoo?

1 Ответ

2 голосов
/ 25 июня 2010

Читать на переменная область действия . Переменная $MyFoo недоступна в функции do_some_foo_stuff(), если вы сначала не объявите ее глобальной;

function do_some_foo_stuff()
{
    global $MyFoo;
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...