我能说的最好的情况是,这些默认小部件在构建类时会从数据库中获得选项,因此如果不完全禁用这些小部件,就无法阻止DB查询。根据您的需要,您可能需要轻微的性能提升,而不需要小部件,在这种情况下,您可以使用此代码禁用它们(放在functions.php中):
// Remove unneeded widgets that have undesirable query overhead
add_action( \'widgets_init\', \'remove_unneeded_widgets\' );
function remove_unneeded_widgets() {
unregister_widget(\'WP_Widget_Pages\');
unregister_widget(\'WP_Widget_Calendar\');
unregister_widget(\'WP_Widget_Tag_Cloud\');
unregister_widget(\'WP_Nav_Menu_Widget\');
}
有关更多默认窗口小部件类名,请参见此处:
http://codex.wordpress.org/Function_Reference/unregister_widgetUPDATE:
我做了更多的研究,发现这四个小部件没有任何自动加载选项,即使其他几个小部件在
wp_install_defaults()
中的函数
/wp-admin/includes/upgrade.php
. 这可能是一种疏忽。在任何情况下,如果这些小部件从未加载到侧栏中
WP_Widget
父类或小部件类从未有机会设置任何默认值。其他小部件是构建和使用的
get_option()
但不要生成查询,因为它们自动加载了许多其他WordPress选项。这四个没有自动加载选项,所以
get_option()
必须为每个查询数据库。
最简单的解决方案就是在第一次激活主题时指定默认值,如下所示:
// Clean up widget settings that weren\'t set at installation
add_action( \'after_switch_theme\', \'set_missing_widget_options\' );
function set_missing_widget_options( ){
add_option( \'widget_pages\', array ( \'_multiwidget\' => 1 ) );
add_option( \'widget_calendar\', array ( \'_multiwidget\' => 1 ) );
add_option( \'widget_tag_cloud\', array ( \'_multiwidget\' => 1 ) );
add_option( \'widget_nav_menu\', array ( \'_multiwidget\' => 1 ) );
}