如何更改循环上的默认POST类型?

时间:2013-12-22 作者:Manolo

我想在默认查询中包括一些帖子。循环开始时:

        if ( have_posts() ) :
            // Start the Loop.
            while ( have_posts() ) : the_post();
默认post类型为\'post\', 因此其他类型的帖子不会进入循环(例如,我有一个自定义的帖子类型,名为\'news\').

我可以使用WP查询对象并执行以下操作:

    $type = \'news\';
    $args = array (\'post_type\' => $type);
    $temp = $wp_query; // assign ordinal query to temp variable for later use  
    $wp_query = null;

    $wp_query = new WP_Query($args); 

 while ( $wp_query->have_posts() ) : $wp_query->the_post();
这就行了。但是,有没有办法让其他类型的帖子不必担心在任何地方更改循环?

Edit:

我也试过pre_get_posts 没有成功:

// Load Home Page Posts( reviews and news )
function search_home_posts( $query ) {
    if( $query->is_home() && $query->is_main_query() && !is_admin() ) {
        $query->set( \'post_type\', array( \'reviews\', \'news\' ) );
    }
}
add_action( \'pre_get_posts\', \'search_home_posts\' );
但什么都没做。我尝试了更多的组合,比如$query->set( \'post_type\', \'reviews\' );, 但同样的行为。有什么想法吗?

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

您应该使用pre_get_posts 钩子,它允许您精确地定位一个(或多个)查询,并对其进行更改,以便一切正常工作(这很少是在模板中操纵主查询的结果,尤其是分页)。

SO网友:JMau

您可以使用此选项:

$query = new WP_Query( \'post_type=any\' );
检索除“exclude\\u from\\u search”设置为TRUE的修订和类型之外的任何类型

Source

结束

相关推荐

Get 1 more post in loop

例如,在简单循环中:$loop = new wp_query(array(\'posts_per_page\' => 3)); while($loop->have_posts()) : $loop->the_post(); if(get_post_meta($post->ID, \'skip_me\', true) == true){ // do something to ask for one more post, &#x