我是OOP的新手,学习了基本的想法和逻辑,现在想扩展一个wordpress插件,而不是用来扩展它(据我所知):
class Main_Plugin {
...
function __construct() {
add_action('admin_notice', array($this, 'somefunction');
}
...
}
enter code here
new Main_plugin
到目前为止一切顺利。现在我的自定义插件的代码:
class Custom_Plugin extends Main_Plugin {
...
}
new Custom_Plugin
根据我的理解,“main”插件的对象已初始化,而我的“child”插件则表示admin_notice
。
有没有办法正确创建“子”插件,以便“主”插件正在运行,我的自定义插件只是添加了一些额外的功能?
答案 0 :(得分:1)
您认为正确的方向,但在Wordpress中,最好不要使用相同的操作名称执行不同的插件。您可以随意扩展Main_Plugin类,但请将您的操作名称更改为另一个,并在模板中使用它。所以,你的代码将如此:
class Custom_Plugin extends Main_Plugin {
function __construct() {
add_action('admin_notice_v2', array($this, 'somefunction');
}
}
new Custom_Plugin
如果您想完全覆盖以前的操作,请删除上一个操作并按照此处所述添加您的操作:https://wordpress.stackexchange.com/questions/40456/how-to-override-existing-plugin-action-with-new-action 如果您想扩展操作,只需从您的操作中调用父操作
答案 1 :(得分:1)
如果使用Main_Plugin
检查主插件类是否存在,则实际上不需要扩展class_exists
类。
if(class_exists('Main_Plugin')){
new Custom_Plugin;
}
您可以拆分主类,一个用于每次加载所需的一个,一个用于扩展。
编辑:
还有其他方法可以在其他类
中触发一些自定义数据在Main_Plugin
中,您可以定义自己的操作/过滤器或使用现有的操作/过滤器:
$notice_message = apply_filters('custom_notice', $screen, $notice_class, $notice_message);// you need to define parameters before
在任何自定义插件中,您都可以轻松地挂钩$ notice_message:
public function __construct(){
add_filter('custom_notice', array($this, 'get_notice'), 10, 3);
}
public function get_notice($screen, $notice_class, $notice_message){
$notice_message = __('New notice', 'txt-domain');
return $notice_message;
}