如何查询有下级的帖子(层次化自定义帖子类型)?

时间:2014-03-01 作者:JPollock

我试图找出如何在我的分层自定义帖子类型中查询帖子,可能是使用具有子帖子的WP\\u查询。我可以通过设置\'post_parent\' => 0 在我的WP\\u Query参数中,但这将返回所有非子级的帖子。我只需要有子帖子的帖子。

2 个回复
SO网友:birgire

您可以使用post_parent__not_in 参数:

$args = array( 
           \'post_type\'           => \'cpt\',
           \'post_parent__not_in\' => array( 0 ) 
);
$query = new WP_Query( $args );
检索cpt类型的子帖子。

然后,生成的SQL将包括以下部分:

wp_posts.post_parent NOT IN (0)

SO网友:Sudeep K Rana

据我所知,你的要求,我想这就是你所需要的。

我已经记录了代码,请检查一下。

<?php
/*
Idea:   Collecting all the posts child posts by --->\'post_parent__not_in\' => array( 0 )<--- 
        in wp_query. Then find their parent posts by eliminating duplicates.
*/

    $query_array = array(
            //Change this post type to your Custom-Post-Type.
        \'post_type\' => \'news\',
            //Showing all posts
        \'posts_per_page\' => -1, 
            //Giving all child posts only
        \'post_parent__not_in\' => array( 0 ) 
        );

    $the_query = new WP_Query($query_array);
        //Array to collect all parent posts
    $collect_parents = array();
    while($the_query->have_posts()):
        $the_query->the_post();
            //if condition is used to eliminate duplicates, generated by same child post of parent.
        if(!in_array($post->post_parent, $collect_parents)){
            //$collect_parents contains all the parent post id\'s
            $collect_parents[] = $post->post_parent;
        }

    endwhile;
        //Printing all the parent posts
    foreach($collect_parents as $parent){
        ?>
        <!-- Printing parent post title -->
        <h2><a href="<?php echo get_permalink($parent ); ?>"> <?php echo get_the_title($parent); ?></a></h2>
        <!-- Printing parent post content -->
        <p><?php echo get_post_field( \'post_content\', $parent); ?></p>
        <?php
    }
?>

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post