我有一个插件,按照相关问题中描述的最佳实践声明并挂钩:
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对象?
答案 0 :(得分:2)
阅读variable scope。变量$MyFoo
在函数do_some_foo_stuff()
中无法访问,除非您首先将其声明为全局变量;
function do_some_foo_stuff()
{
global $MyFoo;
...
}