\\u admin()何时可用?
几乎到处都是。我能想到的唯一一个不可用的例子是在文件中的超早期,例如wp-config.php
, 还有一些来访者。但是到了mu-plugin
, 一个主题或插件被加载到当前位置。
现在,可以将每个函数的内部工作封装在一个条件中,但我是否可以将add\\u action()语句封装在if(is\\u admin())中,以避免站点的过滤器列表膨胀?
是的,但在您给出的示例中,更容易admin_init
相反向挂钩中添加东西并不昂贵,当挂钩启动并且函数运行时发生的事情才是昂贵的。
一些额外的注意事项
我看到许多插件由一个在同一个文件中实例化的类组成,例如:
这是一种不好的做法,你有权质疑它,不应照搬。不要在定义其类的同一文件中创建对象,这会带来问题。
function __construct() {
add_action(\'init\', array( __CLASS__, \'baz\' ) );
}
这意味着您创建此对象的那一刻,它将注册挂钩并开始执行操作。这可能会很烦人,或者产生一些问题,通过
run
或
start
作用这也使得编写单元测试非常困难,有时甚至不可能。构造函数应该为工作准备对象,但它不应该这样做。把它想象成买一台洗衣机而不是用它洗衣服。构造器可能会组装机器并准备就绪,但可以方便地说出机器何时运行以及是否运行
add_action(\'init\', array( __CLASS__, \'baz\' ) );
}
static function baz() {
因为函数
bar
是静态的,如果创建了多个此对象,
baz
将运行多次
new My_Plugin();
这里有几个问题:
加载文件会立即创建一个对象并执行一些操作。你可能还不想让它做那些事情,所以你已经失去了对它的控制。创建的对象从来没有分配给任何东西,只是悬而未决。这使得堆栈跟踪和调试变得非常困难,因为它现在是一个匿名类,因为它是匿名的,所以您永远无法解开它的任何操作。要做到这一点,您需要引用对象,但这在这里是不可能的
The TLDR of the original answer though is that you can rely on is_admin
being available, and you should never encounter a situation in a plugin or theme where it\'s unavailable