问题描述
我试图找出一些机制来加载插件,根据页面的 url,以提高性能。
我的主要关注点是,我在用户在页面上处于活动状态时,会有一些重复出现的 admin-ajax.php 调用。我尝试对这些调用进行了分析,发现大多数为 ajax 调用加载的插件是不必要的。
虽然我可以使用 is_admin()
来识别 ajax 调用,但我希望 WordPress 和插件代码保持不变。此外,is_admin()
不区分 ajax 调用和管理面板。
我一直在研究插件加载过程。我只看到'muplugins_loaded'
,'plugins_loaded'
动作,没有过滤器进入加载过程。我检查了 wp_get_active_and_valid_plugins
,显然更改插件加载的唯一方法是 update_option('active_plugins')
,这不是一个可行的选择。其他东西都是硬编码的。
(我想提到这个插件 http://wordpress.org/extend/plugins/selective-loading/使用 update_option
方法,这在我看来只适用于 non-ajax 环境,否则选项更改不会是原子的。)
我想知道是否还有一些方法来实现选择性插件加载?
最佳解决方案
过滤 option_active_plugins
。您可以在此处更改 get_option()
的结果,而无需实际更改数据库。
if ( defined( 'DOING_AJAX' ) && DOING_AJAX )
add_filter( 'option_active_plugins', 'disable_plugins_temporary' );
function disable_plugins_temporary( $plugins )
{
// unset plugins you don't need, then
return $plugins;
}
Background
wp_get_active_and_valid_plugins()
调用 get_option( 'active_plugins', array() )
获取活动插件。在 get_option( $option, $default = false )
中,我们发现这个过滤器:
return apply_filters( 'option_' . $option, maybe_unserialize( $value ) );
所以我们的过滤器的结果名称是 option_active_plugins
。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。