Php wordpress mu中的函数文件、插件和主题范围
我有一个插件,它声明并连接了以下相关问题中描述的最佳实践: 所以看起来(柏拉图式的)是这样的:Php wordpress mu中的函数文件、插件和主题范围,php,plugins,wordpress,Php,Plugins,Wordpress,我有一个插件,它声明并连接了以下相关问题中描述的最佳实践: 所以看起来(柏拉图式的)是这样的: if ( !class_exists( 'Foo' ) ) { class Foo { ... public function do_stuff() { // does stuff } } } if ( class_exists( 'Foo' ) ) { $MyFoo = new Foo(); } 现在,如果我从一个主题文件调用$MyFoo->do
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实际上执行_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\u some\u foo\u stuff()
中不可访问,除非先声明为全局变量
function do_some_foo_stuff()
{
global $MyFoo;
...
}
谢谢,这是一个有效的解决方案,但我想我仍然不太了解WP架构,无法理解为什么插件变量在主题描述文件(如single.php和home.php)中可以直接访问(没有全局声明),但在functions.php文件中不在范围之内。对于变量作用域的参考资料,您是否有任何特定于wordpress的建议?这与wordpress无关,而与PHP变量作用域有关。主题文件只是脚本中包含的PHP文件,可以访问父范围内的变量。就我个人而言,我尽量避免通俗易懂——我认为一个单身班更适合你的目的-