覆盖用 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 插件的加载顺序只是按字母顺序排列,这意味着在您要覆盖的插件之前命名的所有内容都会先加载。
最简洁的方法是查看插件的源代码以了解它是如何工作的。比如:它什么时候加载包含您要覆盖的函数的文件?如果您想采用干净的方式,这是要回答的重要问题
我正在使用“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 插件的加载顺序只是按字母顺序排列,这意味着在您要覆盖的插件之前命名的所有内容都会先加载。
最简洁的方法是查看插件的源代码以了解它是如何工作的。比如:它什么时候加载包含您要覆盖的函数的文件?如果您想采用干净的方式,这是要回答的重要问题