扩展Wordpress插件类

时间:2016-11-17 10:16:42

标签: php wordpress class oop extend

我是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

有没有办法正确创建“子”插件,以便“主”插件正在运行,我的自定义插件只是添加了一些额外的功能?

2 个答案:

答案 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;
}