从另一个插件/扩展类覆盖插件的功能

时间:2013-08-12 14:58:49

标签: php wordpress class wordpress-plugin override

我有一个“免费增值”插件,我正在做一些重大更新。最初,购买专业版的用户将卸载免费插件,然后安装专业版。凌乱,但我是初学者。所以现在我希望用户能够安装免费插件,然后能够安装专业版升级,以便按计划扩展功能。

我当前的插件使用了一个类:class MyFreePlugin {__construct()...}我的升级插件正在扩展类:class MyProPlugin扩展MyFreePlugin {...}

这是我的问题。我想在插件的设置页面和tnyMCE弹出窗口中添加功能,并完全覆盖免费版本的一些操作,过滤器和功能。

示例:免费插件有

add_action('admin_head',array(&$this,'my_free_admin_head_fn'));

它在管理菜单中添加/排队一些脚本。我想删除/覆盖原始操作并将pro插件中的脚本排入队列:

add_action('admin_head',array(&$this,'pro_other_admin_head_fn').

另外,作为php类的新手,特别是在WordPress的上下文中,我的扩展类如何获取父类的变量值?

这一切是否可能,如果是这样,怎么样?如果你有例子,那就更好了。我已经通过php手册进行了挖掘,但在尝试覆盖过滤器和操作时它并没有那么有用。谢谢你的帮助!

... 为了对抗你的回答Janw, 不幸的是,这似乎不起作用。这是一个例子:在免费插件的__construct()中,我有这个:

add_action('admin_menu', array(&$this,'add_plugin_menu'));

调用将菜单添加到管理侧栏的功能。在我的插件的“专业版”中,我正在测试是否可以在使用以下任何内容触发之前删除该操作:

remove_action('admin_menu', array(&$this,'add_plugin_menu')); (nothing)
remove_action('admin_menu', array(parent,'add_plugin_menu')); (nothing)
remove_action('admin_menu', array(&parent,'add_plugin_menu')); (throws an error)
remove_action('admin_menu', 'parent::add_plugin_menu'); (nothing)

等。基本上,免费插件是在专业版之前加载的,所以在我删除/覆盖它们之前,动作似乎正在发生。另外,我无法得到父母的变量,除非我将它们全部公开,我宁愿不这样做。

1 个答案:

答案 0 :(得分:0)

您可以使用remove_action()删除免费版本所执行的功能。 在专业版中,您只能包含MyFreePlugin文件,然后再扩展。