is_main_query()
函数是一个开发者常用的函数,它能帮助主题或者插件开发者确定当前查询是主查询还是辅助查询,以便于开发者使用不同逻辑。使用这个函数可以帮助我们实现WordPress提速优化,达到0sql的效果。当然实现起来得修改主题代码,建议没有开发经验的朋友们不要尝试。
函数介绍
is_main_query()
用以确定查询是否为主查询。
返回值
是主查询返回true,不是返回false。
官方描述
is_main_query()
函数是一个条件函数,可用于计算当前查询(例如循环中的查询)是否是“主”查询(与辅助查询相反)。这个函数在钩子中最常用,用于区分WordPress的主查询(用于页面、POST或归档)和自定义/辅助查询。is_main_query()
可以与前端查询(主题模板、插件等)以及管理查询一起使用。如果当前查询是主查询,则返回true;如果不是,则返回false。
此函数不接受任何参数。相反,它会自动将$wp_query
对象(即“当前查询”)与$wp_the_query
对象(“主查询”)进行比较,该函数是WP_Query类下is_main_query()
方法的别名。在传递WP_Query
对象(如‘preget_post’)的Filter或action挂钩回调中,调用此函数是循环的。相反,直接调用传递对象的方法。例如,如果您的过滤器回调将传递的WP_Query
对象分配给$query
,您将调用如下方法:$query->is_main_query()
。
add_action( 'pre_get_posts', 'foo_modify_query_exclude_category' ); function foo_modify_query_exclude_category( $query ) { if ( ! is_admin() && $query->is_main_query() && ! $query->get( 'cat' ) ) $query->set( 'cat', '-5' ); }
使用WP_Query->is_main_query()
代替is_main_query()
(无效)的示例
/** * If the global query is for a category, exclude category 5. * * @param WP_Query $query Global WP_Query instance. */ function wpdocs_modify_query_exclude_category( $query ) { if ( ! is_admin() && $query->is_main_query() && ! $query->get( 'cat' ) ) $query->set( 'cat', '-5' ); } add_action( 'pre_get_posts', 'wpdocs_modify_query_exclude_category' );
评论 (0)