我有两种自定义帖子类型“Sections”和“Articles”。我想使用这两种帖子类型创建侧栏导航。
“Section”自定义帖子类型只是带有页面标题的简单帖子,页面标题是文章自定义帖子类型中的ACF关系字段。
文章为分级自定义帖子类型,可以有多级子帖子
我成功地获得了所有与section\\u组元值匹配的帖子(section自定义帖子类型的post\\u title),但我想在层次结构中显示它们,直到没有子帖子为止。
下面的结构1、2、3是page\\u标题表单部分。在此情况下,所有条款都有AFC海关备案(关系)。
E、 g级
快速入门
家长文章1家长文章2您需要什么
母条款1子条款3子条款如何运作
父文章1子文章曾孙文章子文章我希望有如上结构。
下面是代码,我首先查询了Section Custom post type,然后使用meta\\u value将其与文章的ACS关系进行匹配,这将为我提供相同LI中的所有子帖子和孙帖子。
<?php
$sections = new WP_Query(
array(
\'posts_per_page\' => -1,
\'post_type\' => \'sections\',
\'order\' => \'ASC\',
)
);
if ( $sections->have_posts() ) : ?>
<ul class="list-unstyled main">
<?php while ( $sections->have_posts() ) :
$sections->the_post(); ?>
<li>
<?php the_title() // Page title from Section Custom post Type ?>
<?php $section_id = get_the_ID();
$articles = new WP_Query(
array(
\'posts_per_page\' => -1,
\'post_type\' => \'articles\',
\'order\' => \'ASC\',
\'meta_query\' => array(
array(
\'key\' => \'section_group\',
\'value\' => $section_id,
\'compare\' => \'LIKE\'
)
)
)
); ?>
<ul class="list-unstyled sub">
<?php
if ( $articles->have_posts() ) :
while ( $articles->have_posts() ) :
$articles->the_post(); ?>
<li class="this"><a href="<?php the_permalink(); ?>"><?php the_title() ?></a></li>
<!-- Sub LI Ends -->
<?php endwhile;
endif; ?>
</ul> <!-- Sub UL Ends -->
</li> <!-- Main LI Ends-->
<?php endwhile; ?>
</ul> <!-- Main UL Ends -->
<?php endif;
?>
SO网友:Sohan Zaman
高级解决方案是Walker. 但最简单的解决方案是递归函数,它的工作方式和Walker一样。您可以使用以下选项之一:
function wpse343409_get_recursive_posts( $type = \'page\', $parent_id = 0 ) { // default parent 0 means only top level posts
$posts = new WP_Query( array(
\'post_type\' => $type,
\'posts_per_page\' => -1,
\'post_parent\' => $parent_id,
\'ignore_sticky_posts\' => 1, // In case of sticky posts, page may fall into an infinite loop
) );
if( $posts->have_posts() ) :
echo \'<ul>\';
while( $posts->have_posts() ) : $posts->the_post();
printf( \'<li><a href="%s">%s</a>\', esc_url( get_permalink() ), esc_html( get_the_title() ) );
wpse343409_get_recursive_posts( $type, get_the_ID() );
echo \'</li>\';
endwhile;
echo \'</ul>\';
endif;
}
wpse343409_get_recursive_posts( \'sections\' );