显示最近的孙子(第三层)页面列表

时间:2015-04-21 作者:Rob

我目前有一段代码,用于显示最近三篇“特殊”自定义帖子类型的列表,其中将显示这些帖子的图像、标题和内容。

我试图修改代码,只显示第三层帖子(去掉父页面和子页面,只显示孙页面)。

我使用的代码如下:

<?php
                $query_args = array(
                    \'post_type\' => \'special\',
                    \'posts_per_page\' => 3,
                    \'order\' => \'DESC\',
                );
                $query = new WP_Query($query_args);
                while($query->have_posts()) : $query->the_post();
            ?>
如前所述,这非常适合显示最新的帖子,但我无法让它只显示第三层。

例如,我尝试了以下方法:

\'child_of\' =>\'.$post->ID.\'
无济于事。

我还尝试了从多个线程实现建议:

Best Practice For Querying Grandchildren?

任何帮助都将不胜感激。

干杯

抢劫

编辑-

我取得了一些进展。我已经成功地从显示中删除了顶级帖子,但仍然保留了第二级项目。我的代码如下:

在函数中。php

 function wpse29897_no_parents( $where, $query )
 {
     if( isset( $query->query_vars[\'special\'] ) && \'special\' ==        $query->query_vars[\'post_type\'] )
{
    if( \'\' != $where )
    {
        $where .= \' AND post_parent !=  0\';
    }
    else
    {
        $where .= \' post_parent != 0\';
    }
}
return $where;
 }
模板中的我的查询:

 <?php
            add_filter( \'posts_where\', \'wpse29897_no_parents\', 10, 2 );
                $query_args = array(
                    \'post_type\' => \'special\',
                    \'posts_per_page\' => 3,
                    \'order\' => \'DESC\',
                );
                $query = new WP_Query($query_args);
                while($query->have_posts()) : $query->the_post();
            ?>

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

唯一(简单)的方法是查询所有special, 计算其深度,然后构建一个新的三层深度堆栈:

$grandkids = array();
$specials  = get_posts(
    array(
        \'posts_per_page\' => -1,
        \'order\' => \'DESC\',
    )
);

foreach ( $specials as $special ) {
    if ( count( get_post_ancestors( $special ) ) === 2 ) {
        $grandkids[] = $special;

        if ( count( $grandkids ) === 3 )
            break;
    }
}

foreach ( $grandkids as $post ) {
    setup_postdata( $post );

    // Do your stuff
}

结束

相关推荐

Query post Pagination Problem

我正在使用以下代码进行查询帖子,但我没有得到分页链接。以下代码的问题在哪里。<div id=\"primary\" class=\"content-area\"> <main id=\"main\" class=\"site-main\" role=\"main\"> <?php $arr = array( \'post_type\' => \'post