是否覆盖插件中的可插拔函数?

时间:2013-01-04 作者:Itay Moav -Malimovka

WordPress有一个名为pluggable.php 它包含一个可以在插件中重写的函数列表。

我面临的问题(我压倒一切wp_authenticate) 对于我网络中的每个博客,我尝试激活此插件,我得到:

失败,无法重新声明之前在pluggable中声明的wp\\U authenticate。php

这在某种程度上破坏了易用性,我必须在插件文件中对函数进行注释,激活插件,取消对函数的注释以使其正常工作。

正确的方法是什么
不能指望下载插件的用户会这么做。

我使用的是3.5+多站点配置

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

将函数包装到if( ! function_exists( \'wp_authenticate\' ) ) 要消除错误并成功激活插件,请执行以下操作:

if( ! function_exists( \'wp_authenticate\' ) ){
    function wp_authenticate(){}
}
这是必要的,因为在激活插件的上下文中,功能确实存在,只有在激活后,插件才会首先加载并覆盖pluggable.php. 插件在沙盒中被激活,以捕获任何可能阻止激活和成功恢复到工作状态的致命错误。

SO网友:Rick Hellewell

但是如果你的插件需要pluggables中的函数。php(如wp\\u safe\\u redirect),然后您必须手动包含该文件。否则,对于该插件中的函数,会出现“调用未定义函数”错误。php文件。

我是这样做的

    if ( !function_exists(\'wp_safe_redirect\')) {
        require_once (ABSPATH . WPINC . \'/pluggable.php\');
     }
将函数名(在本例中为“wp\\u safe\\u redirect”)替换为所需的函数。

也许这会节省一些人我花了几个小时试图找出那个错误。

结束

相关推荐

调试寄存器_ACTIVATION_HOOK()

我很好奇WordPress或PHP是否存在已知的问题,环境可能会退化到WordPress忽略register\\u activation\\u hook()调用的程度。我在运行MAMP的本地环境中紧张地工作了一个小时,这时我让一位同事在她的机器上测试代码;完全相同的代码在一台机器上工作,但在另一台机器上不工作。在本例中,我只是想将消息附加到日志文件中,我正在实时跟踪该日志文件。error_log(\"Plugin code is being processed\"); register_