When is is_admin() available?

时间:2018-10-11 作者:Isaac Lubow

我看到很多插件都是由一个在同一个文件中实例化的类组成的,例如:

class My_Plugin {

  function __construct() {
    add_action(\'init\', array( __CLASS__, \'baz\' ) ); 
  }

  static function baz() {
    // some stuff that should happen in admin
  }

}

new My_Plugin();
现在,可以将每个函数的内部工作封装在一个条件中,但是我可以将add_action() 中的语句if( is_admin() ) 取而代之的是,避免网站的过滤器列表膨胀?

1 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

\\u admin()何时可用?

几乎到处都是。我能想到的唯一一个不可用的例子是在文件中的超早期,例如wp-config.php, 还有一些来访者。但是到了mu-plugin, 一个主题或插件被加载到当前位置。

现在,可以将每个函数的内部工作封装在一个条件中,但我是否可以将add\\u action()语句封装在if(is\\u admin())中,以避免站点的过滤器列表膨胀?

是的,但在您给出的示例中,更容易admin_init 相反向挂钩中添加东西并不昂贵,当挂钩启动并且函数运行时发生的事情才是昂贵的。

一些额外的注意事项

我看到许多插件由一个在同一个文件中实例化的类组成,例如:

这是一种不好的做法,你有权质疑它,不应照搬。不要在定义其类的同一文件中创建对象,这会带来问题。

function __construct() {
  add_action(\'init\', array( __CLASS__, \'baz\' ) ); 
}
这意味着您创建此对象的那一刻,它将注册挂钩并开始执行操作。这可能会很烦人,或者产生一些问题,通过runstart 作用这也使得编写单元测试非常困难,有时甚至不可能。构造函数应该为工作准备对象,但它不应该这样做。把它想象成买一台洗衣机而不是用它洗衣服。构造器可能会组装机器并准备就绪,但可以方便地说出机器何时运行以及是否运行

   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

结束

相关推荐

如何找到WordPress主题设置的php变量

我不熟悉PHP和WordPress,但我对python有一些经验,我的网站使用了Traveler主题。如何找到主题设置中存在的汇率变量(屏幕截图上的红色方块)?我需要用另一个功能自动更改,而不是通过主题设置手动更改。有什么可能的方法可以找到这样的变量,或者是否有存储所有主题变量的约定?我找到的唯一一段最接近的代码是截图#2(wp-content/themes/traveler/inc/st-theme-options.php),但我不确定这是否是我所需要的&;如何重新分配。谢谢