Wordpress模板 - 显示按子类别分隔的父类别下的所有帖子

时间:2016-11-15 15:09:45

标签: wordpress

我想创建一个类别模板,显示父类别标题,子类别标题以及每个子类别下的所有帖子。

所以它看起来像这样

父 子目录 发布#1 发布#2 子目录 发布#3 发布#4

到目前为止,这是我所拥有的,但我仍然坚持如何前进。

   <?php if ( have_posts() ) : ?>

            <div class="section-header">
                <h1 class="page-title"><?php single_cat_title(''); ?></h1>
                <!-- <?php
                    the_archive_title( '<h1 class="page-title">', '</h1>' );
                    the_archive_description( '<div class="taxonomy-description">', '</div>' );
                ?> -->
            </header><!-- .page-header -->
            <p>Some text</p>

                <?php

                    // The Query
                    $the_query = new WP_Query( array( 'cat' => 72 ) );

                    // The Loop
                    if ( $the_query->have_posts() ) {
                        echo '<ul>';
                        while ( $the_query->have_posts() ) {
                            $the_query->the_post();
                            echo '<li>' . get_the_title() . '</li>';
                        }
                        echo '</ul>';
                        /* Restore original Post Data */
                        wp_reset_postdata();
                    } else {
                    // no posts found
                    }

                    ?>


        <?php else : ?>

            <?php ?>

        <?php endif; ?>

1 个答案:

答案 0 :(得分:1)

主题functions.php

中的

function display_category_posts($cat_id) {
    echo get_cat_name($cat_id);
    $the_query = new WP_Query( array( 'cat' => $cat_id ) );
    // you loop code
    wp_reset_query(); //or wp_reset_postdata(), not put it in have_posts() block, we should always reset query even there no posts found.
}

在您的类别模板中

// get current category of viewing page.
$current_cat_obj = get_queried_object();

// try to get sub categories.
$sub_cat_ids = get_terms( 'category', array(
    'parent'    => $current_cat_obj->term_id,
    'hide_empty' => false,
    'fields' => 'ids'
) );

// if the category of current page is a top-level category and has sub categories, display is as sub category posts view.
if(!$current_cat_obj->parent && !empty($sub_cat_ids)) {
    foreach($sub_cat_ids as $sub_cat_id) {
        display_category_posts($sub_cat_id);
    }
} else {
   // otherwise, display it as normal category view.
}