当我将缺点添加到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\' );