【问题标题】:Overriding a plugin's function from another plugin/extended class从另一个插件/扩展类覆盖插件的功能
【发布时间】:2013-08-12 14:58:48
【问题描述】:

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

我当前的插件正在使用一个类:class MyFreePlugin { __construct() ... },而我的升级插件正在扩展该类:class MyProPlugin extends 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)

等等。基本上,免费插件是在 pro 之前加载的,所以这些操作似乎在我删除/覆盖它们之前就已经发生了。另外,除非我将它们全部公开,否则我无法获取父级的变量,我不想这样做。

【问题讨论】:

    标签: php class wordpress overriding


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2015-10-29
      • 2011-09-07
      • 1970-01-01
      • 2022-10-14
      • 1970-01-01
      • 2011-07-16
      • 2016-01-13
      • 2012-08-23
      相关资源
      最近更新 更多