更改循环查询中的POST类型

时间:2014-02-15 作者:fxguillois

我创建了一个名为“taxonomy myword.php”的模板,并试图打印与此自定义类别相关的帖子。不幸的是,我的帖子也会受到自定义帖子类型的影响。

我尝试了正确的方法:

function customize_customtaxonomy_query ( $query ) {
    $query->set(\'post_type\', array(\'business\') );
    return $query;
}
add_action( \'pre_get_posts\', \'customize_customtaxonomy_query\' );
糟糕的是:

global $wp_query;
$args = array_merge( $wp_query->query_vars, array( \'post_type\' => \'business\' ) );
query_posts( $args );
不幸的是,只有第二个代码可以工作。我想知道为什么。。。

1 个回复
SO网友:s_ha_dum

要使第一个代码块用于辅助查询,您需要:

function customize_customtaxonomy_query ( $query ) {
    $query->set(\'post_type\', array(\'business\') );
    // return $query; // not necessary; actions do not return anything
}
add_action( \'pre_get_posts\', \'customize_customtaxonomy_query\' );
$q = new WP_Query($args);
之后应该将其移除,以免干扰其他循环。

要使该筛选器在主查询上工作,需要在主查询运行之前应用它,这意味着(通常)它需要在functions.php 或插件文件。

然而,如果您正在创建一个二次循环(无法判断是否是),那么过滤器看起来像是杀伤力过大。只需传递您想要的参数。未经测试,但类似于此:

$args = array_merge( $wp_query->query_vars, array( \'post_type\' => \'business\' ) );
$q = new WP_Query( $args );
这是很多猜测,但我希望能有所帮助。

结束

相关推荐