0

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

我一直在研究这里的操作,并认为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 );

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

4

1 回答 1

1

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

add_action( 'plugins_loaded', 'initWordpressBenchmark', -1 );
add_action( 'shutdown', 'finalizeWordpressBenchmark', 1001 );
于 2015-09-03T12:37:19.187 回答