在UL LI中显示自定义帖子类型的层次结构

时间:2019-07-22 作者:Uday Sutaria

我有两种自定义帖子类型“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;

?>

1 个回复
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\' );

相关推荐

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

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