我想知道如何从插件中重新声明主题的函数。问题是,我在尝试激活插件时遇到了一个“致命错误:无法重新声明”。但是如果我将代码添加到已经激活的插件中,那么一切都会按照预期工作。有什么明显的东西我遗漏了吗?
下面是我正在使用的代码的简化示例:
// In my theme I use function_exists check
if ( ! function_exists( \'my_awesome_function\' ) ) {
function my_awesome_function() {
return "theme";
}
}
// Now I want to override \'my_awesome_function\' output in a plugin
function my_awesome_function() {
return "plugin";
}
编辑:
在给定的示例中,我需要my_awesome_function()
返回plugin
如果插件处于活动状态theme
否则所以我需要保留主题中的原始函数。
基本上,我认为如果这种方法适用于儿童主题,那么它也应该适用于插件。但很明显,我错了。
SO网友:Tom J Nowell
只能声明一次函数。
我的建议是,将函数放入插件中,然后使用过滤器覆盖主题,例如。
在插件中:
function my_awesome_function() {
return apply_filters( \'my_awesome_function\', "plugin" );
}
在您的主题中:
add_filter( \'my_awesome_function\', function( $value ) {
return "theme";
} );
现在,每个呼叫
my_awesome_function();
将返回“主题”而不是“插件”