没有触发muplugins_loaded钩子

时间:2015-08-28 21:29:56

标签: wordpress wordpress-plugin wordpress-hook

我正在创建我的第一个Wordpress插件。我打算将它作为一个包装器,所以它应该在其他元素初始化之前初始化,并在完成其他元素之后完成。

我一直在研究行动here,并认为muplugins_loadedshutdown应该适合我的方案。

muplugins_loaded应该被执行

  

加载必须使用的插件后

所以,我有一个这样的代码:

defined( 'ABSPATH' ) or die( 'No script kiddies please!' );

//Checking whether queries are to be saved
if ( defined( 'SAVEQUERIES' ) && SAVEQUERIES ) {

    //definition of the WordpressBenchmarker class    

    function initWordpressBenchmark() {
        WordpressBenchmarker::initialize();
    }

    function finalizeWordpressBenchmark() {
        WordpressBenchmarker::finish();
    }

    add_action( 'muplugins_loaded', 'initWordpressBenchmark', 1 );
    add_action( 'shutdown', 'finalizeWordpressBenchmark', 20 );

}

我收到此错误:

  

中的非对象上调用成员函数finalize()

明确指出这一行:

WordpressBenchmarker::finish();

,相信我,这肯定意味着initWordpressBenchmark没有被执行。这让我觉得插件没有被执行,因为它不是必须使用的插件。我应该把它作为必须使用的插件吗?有没有更好的办法?作为替代方案,我在考虑使用plugins_loaded钩子,其值小于任何其他值。在搜索plugins_loaded的引用后,我看到优先级的最小数字是0.我想知道是否将负值作为优先级

add_action( 'plugins_loaded', 'initWordpressBenchmark', -1 );

将是一个很好的解决方案。

1 个答案:

答案 0 :(得分:1)

没有触发muplugins_loaded必须使用的插件。将基准测试插件作为必须使用的插件是一种非正统的方法,因为基准测试不是定义所必需的功能,而是需要在需要优化时使用的插件。所以,我决定不让我的插件成为必须使用的插件。而不是那样,我已经修改了我的钩子,而不是plugins_loaded而不是muplugins_loaded。我添加了优先级为-1的钩子,并为shutdown钩子使用了低优先级。这显然解决了这个问题:

add_action( 'plugins_loaded', 'initWordpressBenchmark', -1 );
add_action( 'shutdown', 'finalizeWordpressBenchmark', 1001 );