wordpress mu中的函数文件,插件和主题范围

时间:2010-06-24 20:38:57

标签: php plugins wordpress

我有一个插件,按照相关问题中描述的最佳实践声明并挂钩:

Wordpress: Accessing A Plugin's Function From A Theme

所以看起来(柏拉图式)是这样的:

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-plugins中的其他插件文件)找不到$ MyFoo对象?

1 个答案:

答案 0 :(得分:2)

阅读variable scope。变量$MyFoo在函数do_some_foo_stuff()中无法访问,除非您首先将其声明为全局变量;

function do_some_foo_stuff()
{
    global $MyFoo;
    ...
}