是否可以替代QUERY_POSTS FOR Main循环?

时间:2011-06-28 作者:Tom Auger

Possible Duplicate:
When to use WP_query(), query_posts() and pre_get_posts

我今天才注意到the documentation for query_posts() 提到了使用query\\u post更改主循环的一些“缺点”,特别是:“导致额外的SQL查询”。

这似乎意味着还有另一种方法/更好的方法。显然,对于二次循环有get\\u posts()和WP\\u Query,但我不认为它们解决了Codex文档中列出的“缺点”。

我可以看到,通过等待,直到您在模板中运行query\\u帖子,WordPress已经运行了一次查询,现在这是第二个查询,对第一个查询进行了重击(第一个查询基本上被忽略)。这听起来确实效率低下(虽然可能没什么大不了的,谁知道呢?)

我的问题是:除了query\\u帖子之外,有没有其他不添加“额外SQL查询”的选项,或者Codex文档只是在欺骗?

1 个回复
最合适的回答,由SO网友:scribu 整理而成

当我将缺点添加到Codex中时,我主要考虑使用“request”过滤器作为query\\u posts()的替代方法。

该过滤器仅针对主查询运行,因此解决了“pre\\u get\\u posts”的问题,它针对每个查询激发。

缺点是您无法访问诸如is\\u single()等查询标志。

这里有一种方法可以访问它们,而无需实际执行SQL查询:

function alter_the_query( $request ) {
    $dummy_query = new WP_Query();  // the query isn\'t run if we don\'t pass any query vars
    $dummy_query->parse_query( $request );

    // this is the actual manipulation; do whatever you need here
    if ( $dummy_query->is_home() )
        $request[\'category_name\'] = \'news\';

    return $request;
}
add_filter( \'request\', \'alter_the_query\' );

结束

相关推荐

WordPress Codex的本地副本?

有时我想在没有网络连接的情况下开发WordPress主题。我需要Function Reference 和Template Tags 要有生产力。我搜索了一份可下载或SVN版本的Codex 但找不到。最后我试着用镜子把它照出来wget, 但结果参差不齐(太大了!)。有更好的办法吗?