确定您连接的是哪个环路;主要环路还是次要环路?

时间:2011-06-20 作者:mwaterous

确定我在哪个循环中最有效的方法是什么?

我有几个插件,通过连接到WP_Query::get_posts(), 通过通常的嫌疑犯posts_where, posts_join, etc. 但我不想影响每个页面上的每个循环,所以现在我正在运行debug_backtrace() 检查是否存在the main()query_posts() 根据需要发挥作用。

必须有一种更有效的方法来识别每个页面上的主循环和子循环。当我仔细研究查询变量和请求的其他方面时,总是会遗漏一些东西,这些东西对每一个都是独一无二的。你打算怎么做?

2 个回复
SO网友:Michal Mau

只是一个新方法的快速更新is_main_query() 已在WP 3.3中介绍。

示例:

add_action( \'pre_get_posts\', \'foo_modify_query_exclude_category\' );
function foo_modify_query_exclude_category( $query ) {
    if ( $query->is_main_query() && ! $query->get( \'cat\' ) )
    $query->set( \'cat\', \'-5\' );
}
资源:WPDevel:New API in 3.3: is_main_query()is_main_query()Trac Ticket #18677

SO网友:Chip Bennett

如果正确调用二次回路(即,不干扰query_posts(), 通过设置变量$myloop 等于get_posts()new WP_Query), 然后识别所述循环就像引用变量一样简单。

如果需要从主循环中调用第二个循环setup_postdata() 在辅助循环中,您可能需要调用wp_reset_query() 关闭辅助循环时,模板标记将恢复为应用于主循环。

结束

相关推荐

How do I order my loop query?

我的数据库中有一个表,其中包含我试图排序帖子的投票统计。屏幕截图:the table我尝试过这样的方法,它可以显示所有投票的帖子和分页,但不会按DESC排序。如果我接近这一权利,任何建议都将不胜感激。 <?php global $wpdb; $my_posts = $wpdb->get_col(\"SELECT like_pid FROM wp_likes_count ORDER BY like_count\"); $paged = (get_query_var(