我目前有一段代码,用于显示最近三篇“特殊”自定义帖子类型的列表,其中将显示这些帖子的图像、标题和内容。
我试图修改代码,只显示第三层帖子(去掉父页面和子页面,只显示孙页面)。
我使用的代码如下:
<?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();
?>
最合适的回答,由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
}