如何在不进行编辑的情况下将代码添加到先前存在的函数

时间:2012-08-25 作者:Chris

这就是我想做的:

假设我有一个父插件、插件X和一个子插件(一个扩展,其目的是增强X)Y。

插件X中有一个函数,我想从插件Y中向其添加代码。换句话说,我正在编写插件Y。

使用WordPress,我知道有一种方法可以覆盖插件X的类似功能:

移除动作插件X的函数添加动作Y的函数,但还有其他方法吗?我不想每次插件X的作者更改函数代码时都要修改插件,这样插件的用户就可以享受到新版本的所有好处

看起来,如果插件X的作者添加了动作过滤器之类的东西,我可以以某种方式连接到它并在那里添加代码?不确定这是否重要,但我正在编辑的功能是后端代码(即没有输出给用户)。

建议?想法?

1 个回复
最合适的回答,由SO网友:Chris_O 整理而成

这将取决于插件的结构方式。如果只是程序性的,那么你的运气就差多了。如果它是在类中编写的,则可以扩展或创建它的新实例并重写方法。以我的media tools plugin 我通过调用

 if ( class_exists( \'Regenerate_Thumbnails\' ) {
        $regen = new Regenerate_Thumbnails();

        $regen->class_method();

        $regen->another_method();  
    }
}
要重写方法,请执行以下操作:

 if ( class_exists( \'Regenerate_Thumbnails\' ) {

   My_Class extends Regenerate_Thumbnails {

         function __construct() {
            parent::__construct();
         }

     parent_function_to_override() {
        //do stuff
        }
}
}

$barorfoo = new My_Class();
$barorfoo->parent_function_to_override();
同样,这完全取决于父插件的构造方式。

结束

相关推荐

Custom Post Row Actions

我偶然发现this question 在写这个问题的时候。我有一个问题是关于这个问题的。我发现你用的是get_delete_post_link 筛选为我的操作创建一个新的url(或一个类似的函数——在任何情况下,我都会将该函数与布尔值一起使用)。唯一的问题是,I don\'t know how to capture the event now. 考虑到我在谷歌上找不到很多关于行后操作的例子,我将不胜感激-/public function _wp_filter_get_delete_post_link( $