好的,我正在开发一个插件,其中我的插件文件是一个类,它包含与插件启动相关的所有函数,这样我就可以通过启动该类来简单地提供所有插件功能。根据各种文档,我以某种方式开发了一些东西,将插件的所有功能作为回调挂接到相应的挂钩上。回调在类中定义为公共函数,回调通过类构造函数挂钩;像这样:
if ( ! class_exists( \'MyPluginClass\' ) ) {
class MyPluginClass {
public function __construct() {
add_action( \'admin_menu\', array( $this, \'my_admin_menus\' );
}
public function my_admin_menus() {
add_menu_page( ... );
}
}
}
好吧,所有这些都奏效了。现在,当再次检查插件时;看着最后一个插件,看到大约50个公共回调,我觉得很奇怪。这就是为什么我试图私有化插件的所有主文件回调,例如将上面的代码更改为:
if ( ! class_exists( \'MyPluginClass\' ) ) {
class MyPluginClass {
public function __construct() {
add_action( \'admin_menu\', function() { $this->my_admin_menus(); };
}
private function my_admin_menus() {
add_menu_page( ... );
}
}
}
好吧,现在不要误会我的意思,我的问题不是关于这个过渡,因为有很多帖子都在回答这个问题;而是说这种转变到底有多大意义。此外,我还面临着几个挑战,其中一个挑战我还没有解释清楚:当我更改回调时,回调创建了一个自定义的post类型
register_post_type
从存在
public
存在
private
(正是如上所述,所以我不会在这里粘贴整个庞大的代码);支持列从自定义帖子类型管理页面中消失(即,不再有作者、标题等列,只有一个表,每个创建的帖子都有一行,没有列描述)。这些问题,以及我需要编写代码以实现大部分回调所需的几个难题和解决方法
private
让我强烈感觉到wordpress插件开发不是为了使用私有回调而设计的。是我错了,还是我做错了什么,而且(在安全方面)将主插件回调私有化确实更好?
最合适的回答,由SO网友:Q Studio 整理而成
WordPress挂钩仅适用于全局函数(或类内的公共函数)-私有或受保护的方法因其可见性级别而不可用,因此不适用于WP调用操作或筛选器的方式。
您试图做的是使用一个类来整理代码,以包含所有函数(称为类内的方法),这似乎是一个好主意,直到您查看它-然后您注意到糟糕的代码气味-您正在编写代理OOP-而不是真正的OOP-这提供了很少的正当好处。
WordPress负有部分责任,但插件设计也负有责任-你需要了解模式并重构你的计划-或者不需要。。因为也许它作为过程代码比OOP工作得更好。。。