我有一个称为“的分层自定义帖子类型”courses”.
当你到达一个课程帖子时,会检查帖子是否有孩子。如果课程发布has 它运行的儿童get_posts 显示这些子级的列表。
这就是我挣扎的地方;子列表项的一部分详细信息是显示子帖子的子项数量。因此,我尝试在get\\u posts中运行get\\u posts,但这并没有按预期工作。
为了把事情放在背景中,也许可以更好地解释事情,下面是一些层次结构:
Adobe>Acrobat>入门课程Adobe” 他们得到了孩子们的名单,两个项目:
杂技演员&制框机在这些标题下面应该是关于有多少子课程可用的详细信息,所以Acrobat应该这样说;“1门课程可用”,Framemaker应该说“2门课程可用”。
这行不通。潜艇get_posts
不返回任何内容。我的具体问题是;当一个孩子在一个get_posts
环还是我应该尝试另一种方法?
我当前的(简化)代码。。。
$postid = get_the_ID();
$kids = array(
\'post_type\' => \'courses\',
\'post_parent\' => $postid
);
$children = get_posts( $kids );
if ( $children ) {
echo \'<ul>\';
foreach( $children as $child ) {
$childid = $child->ID;
$coursetitle = get_the_title( $childid );
$grandkids = get_posts( array(
\'post_type\' => \'courses\',
\'post_parent\' => $childid
) );
$grandchildren = count($grandkids);
echo \'<li>\';
echo $coursetitle;
echo $grandchildren . \'courses available\';
echo \'</li>\';
}
}
如果您能提供任何帮助,我们将不胜感激。
最合适的回答,由SO网友:Pieter Goosen 整理而成
您的代码应该可以工作,可能是后端中的每页帖子选项设置为1
. 明确设置posts_per_page
在查询参数中。如果只需要知道孙辈帖子的数量,就可以返回帖子ID,这样也可以加快代码的速度。
下面是一个示例:(从代码中复制和修改)
$postid = get_the_ID();
$kids = array(
\'posts_per_page\' => -1,
\'post_type\' => \'courses\',
\'post_parent\' => $postid
);
$children = get_posts( $kids );
if ( $children ) {
echo \'<ul>\';
foreach( $children as $child ) {
$childid = $child->ID;
$coursetitle = get_the_title( $childid );
$grandkids = get_posts( array(
\'posts_per_page\' => -1,
\'fields\' => \'ids\', // Only get post id\'s, much faster
\'post_type\' => \'courses\',
\'post_parent\' => $childid
) );
$grandchildren = count( $grandkids );
echo \'<li>\';
echo $coursetitle;
echo $grandchildren . \'courses available\';
echo \'</li>\';
}
}
如果这不起作用,那么您很可能有什么东西干扰了您的查询,可能是一个坏消息
pre_get_posts
在某处行动。要对此进行测试,请添加
remove_all_actions( \'pre_get_posts\' );
在您的查询之前。
你也可以看看get_pages()
运行不会被正常WP_Query
筛选器和操作