覆盖用 if (!function_exists) 包装的函数

override a function wrapped with if (!function_exists)

我正在使用“Advanced Scripts plugin”修改其他插件的函数,我试图修改的函数是用 if( !function_exists('some_function') 包装的。

插件里面的功能是这样的

if( !function_exists('send-invoice') ){
 function send-invoice(){
  //The Plugin Invoice
 }
}

这就是我所做的

function send-invoice(){
 //My Custom Invoice
}
add_action('init', 'send-invoice');

如何确保我的代码在插件代码之前运行? 插件加载在主题之前,我尝试了插件加载的钩子但没有任何改变

您可以使用 anonymous function 例如:

add_action('init', function() {
   //code here
});

更详细的是here

或者使用另一个钩子muplugins_loaded:

function send-invoice(){
 //My Custom Invoice
}
add_action('muplugins_loaded', 'send-invoice');

如果没有其他方法对您有用,您可以创建一个自定义插件,将其命名为“aaamyplugin”之类的名称,然后只需在其中插入一个包含您要覆盖的功能的 .php 文件。这是确保您的代码覆盖插件功能的最简单(不是最干净)的方法。

这是因为 Wordpress 插件的加载顺序只是按字母顺序排列,这意味着在您要覆盖的插件之前命名的所有内容都会先加载。

最简洁的方法是查看插件的源代码以了解它是如何工作的。比如:它什么时候加载包含您要覆盖的函数的文件?如果您想采用干净的方式,这是要回答的重要问题