muplugins_loaded 挂钩未触发
muplugins_loaded hook is not triggered
我正在创建我的第一个 Wordpress 插件。我打算把它做成一个包装器,所以它应该在其他元素初始化之前初始化,并在其他元素完成之后完成。
我一直在研究 here and thought muplugins_loaded and shutdown 应该是适合我的场景的事件。
muplugins_loaded
应该被执行
After must-use plugins are 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 );
}
我收到这个错误:
Call to a member function finalize() on a non-object in
清楚地指向这一行:
WordpressBenchmarker::finish();
相信我,这肯定意味着 initWordpressBenchmark
没有被执行。这让我认为该插件未被执行,因为它不是必须使用的插件。我应该把它作为必须使用的插件吗?有没有更好的办法?作为替代方案,我正在考虑使用 plugins_loaded
挂钩,其值小于任何其他值。在搜索 plugins_loaded
的参考资料后,我发现优先级的最小数字是 0。我想知道优先级
是否为负值
add_action( 'plugins_loaded', 'initWordpressBenchmark', -1 );
会是一个很好的解决方案。
muplugins_loaded 不会为非必须使用的插件触发。使我的基准测试插件成为必须使用的插件将是一种非正统的方法,因为根据定义,基准测试不是必须使用的功能,而是在需要优化时需要使用的插件。所以,我决定不让我的插件成为必须使用的插件。取而代之的是,我修改了我的钩子,使其在 plugins_loaded
而不是 muplugins_loaded
时触发。我添加了优先级为 -1 的挂钩,并为 shutdown
挂钩使用了低优先级。这显然解决了问题:
add_action( 'plugins_loaded', 'initWordpressBenchmark', -1 );
add_action( 'shutdown', 'finalizeWordpressBenchmark', 1001 );
我正在创建我的第一个 Wordpress 插件。我打算把它做成一个包装器,所以它应该在其他元素初始化之前初始化,并在其他元素完成之后完成。
我一直在研究 here and thought muplugins_loaded and shutdown 应该是适合我的场景的事件。
muplugins_loaded
应该被执行
After must-use plugins are 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 );
}
我收到这个错误:
Call to a member function finalize() on a non-object in
清楚地指向这一行:
WordpressBenchmarker::finish();
相信我,这肯定意味着 initWordpressBenchmark
没有被执行。这让我认为该插件未被执行,因为它不是必须使用的插件。我应该把它作为必须使用的插件吗?有没有更好的办法?作为替代方案,我正在考虑使用 plugins_loaded
挂钩,其值小于任何其他值。在搜索 plugins_loaded
的参考资料后,我发现优先级的最小数字是 0。我想知道优先级
add_action( 'plugins_loaded', 'initWordpressBenchmark', -1 );
会是一个很好的解决方案。
muplugins_loaded 不会为非必须使用的插件触发。使我的基准测试插件成为必须使用的插件将是一种非正统的方法,因为根据定义,基准测试不是必须使用的功能,而是在需要优化时需要使用的插件。所以,我决定不让我的插件成为必须使用的插件。取而代之的是,我修改了我的钩子,使其在 plugins_loaded
而不是 muplugins_loaded
时触发。我添加了优先级为 -1 的挂钩,并为 shutdown
挂钩使用了低优先级。这显然解决了问题:
add_action( 'plugins_loaded', 'initWordpressBenchmark', -1 );
add_action( 'shutdown', 'finalizeWordpressBenchmark', 1001 );