2016-11-17 66 views
1

我很新的OOP,学会了基本思路和逻辑,现在要延长其不用于扩展它(据我可以告诉)一个WordPress插件:扩展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 

从我的理解“主”插件的对象初始化,以及我的“孩子”插件,这意味着admin_notice

有什么方法可以正确创建“子”插件,以便“主”插件正在运行,并且我的自定义插件只是添加了一些附加功能?

回答

1

如果您使用class_exists来检查主插件类是否存在,那么您并不需要扩展Main_Plugin类。

if(class_exists('Main_Plugin'){ 
     new Custom_Plugin; 
} 

你可以拆分你的主类,一个用于你需要的每个负载,一个用于扩展。

编辑:

还有其他的方式来触发其他类

一些定制DATAS在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; 
} 
+0

好吧,但如果主已包含另一个功能,如: 'if($ pagenow ==='wp-login.php'){ global $ error,$ interim_login,$ action,$ user_login; @require_once ABSPATH。 'WP-的login.php'; 死亡; }' 当我的插件在主要权限之后运行时,将无法更改此行为?如果情况不符合我的条件,我将不得不编写一个在主插件之前运行的插件,以便让主插件完成剩下的工作。 – adrianwell

+0

是的,为什么我告诉你分班 – Benoti

+0

好的谢谢。即使我不想更改原始插件(更新覆盖等),这对我有帮助。 – adrianwell

0

你认为在正确的方向,但在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 如果你想只延长行动,那么从你的动作调用父动作

+0

对不起但我不认为这会帮助我...插件不会影响我的模板,并且在我看来,wordpress动作钩子意味着多次使用。让我以不同的方式解释:我可以使用remove_action函数来阻止我的插件显示主插件的admin_notive两次。但是所有其他函数会在我的插件正确之前初始化主插件的对象时再次运行?有没有办法扩展主插件并单独初始化扩展对象? – adrianwell