在帖子页面的侧边栏中显示子子类别下的所有帖子?

时间:2013-03-08 作者:user2121214

我正在尝试为某些类别的帖子制作一个自定义侧栏。它看起来像这样。

enter image description here

我的类别结构如下所示:

。我会更具体一些,假设我们有3个帖子,其中2个在sub-child 1下,最后一个在sub-child 2下。然后,我只希望子级1下的2篇文章显示在子级1下,第3篇文章仅显示在子级2下。

我已经在网上找了两天了,想知道怎么做,但我不知道我做错了什么。

以下是我的代码和我要修改的内容:

<?php 
$cat = get_the_category();
$catID = get_cat_ID($cat);
$subcats = get_categories(\'child_of=\' . $catID);
    foreach($subcats as $subcat) {
    echo \'<h3>\';
    echo \'<a href="\' . get_category_link($subcat->cat_ID) . \'">\';
    echo \'/\' . $subcat->cat_name . \'\';
    echo \'</a></h3>\';
    echo \'<ul>\';
    $subcat_posts = get_posts(\'cat=\' . $subcat->cat_ID);
    foreach($subcat_posts as $subcat_post) {
        $postID = $subcat_post->ID;
    echo \'<li>\';
    echo \'<a href="\' . get_permalink($postID) . \'">\';
    echo get_the_title($postID);
    echo \'</a></li>\';
    }
    echo \'</ul>\';
} 
?>
有什么想法吗?

3 个回复
最合适的回答,由SO网友:Mike Madern 整理而成

我想你可以用wp_list_categories() 使用walker 向每个项目添加其他无序列表。

The code:

$cat_id = get_query_var( \'cat\' );
$subcats = get_categories( \'child_of=\' . $cat_id ); // child categories

class Cat_Walker extends Walker_Category {
    function end_el( &$output, $page, $depth = 0, $args = array() ) {
        $posts = get_posts( \'cat=\' . $page->term_id );

        if ( sizeof( $posts ) > 0 ) {
            $output .= \'<ul>\';

            foreach ( $posts as $post ) {
                $output .= sprintf( \'<li><a href="%1$s">%2$s</a></li>\', get_permalink( $post->ID ), $post->post_title );
            }

            $output .= \'</ul>\';
        }

        $output .= \'</li>\';
    }
}

foreach ( $subcats as $subcat ) {
    $subsubcats = get_categories( \'child_of=\' . $subcat->term_id ); // sub child categories

    foreach ( $subsubcats as $subsubcat ) {
        $args = array(
            \'title_li\'         => \'\',
            \'show_option_none\' => \'\',
            \'taxonomy\'         => \'category\',
            \'child_of\'         => $subsubcat->term_id,
            \'walker\'           => new Cat_Walker( )
        );

        wp_list_categories( $args );
    }
}

SO网友:awangfaisal

最后,在搜索了一整天之后。。&收集;合并代码。。就是这样:

<?php $categories =  get_categories(\'child_of=\'.get_queried_object()->term_id); if(!empty($categories)):  
        foreach ($categories as $category) {
        $category_id = $category->term_id;
        query_posts(\'cat=\'.$category_id."&order=ASC");
        if ( have_posts() ) :
           ?>        <h3><?php echo $category->name; ?><span></span></h3><?php while ( have_posts() ) : the_post(); ?><ul><li><a href="<?php the_permalink();?>"><?php the_title(); ?></a></li></ul><?php endwhile;?><?php endif; 
    } endif; ?>
享受它:)

SO网友:Yogesh Kumar Panchal

用于获取特定父类别的所有类别及其帖子的函数

function get_cat_subcat_posts($catid){
            $categories =  get_categories(\'child_of=\'.$catid);

            if(!empty($categories)):  

                foreach ($categories as $category) {

                $category_id = $category->term_id;

                query_posts(\'cat=\'.$category_id."&order=ASC");
                if ( have_posts() ) :
            ?>

                 <div class="detail_row">
                 <h3><?php echo $category->name; ?><span></span></h3>
                    <ul>
                <?php 

                // Start the Loop.
                while ( have_posts() ) : the_post();            
                ?>

                      <li><a href="<?php the_permalink();?>"><?php the_title(); ?></a></li>

                     <?php
                        endwhile;

                    ?>
                 </ul>
                  </div>

            <?php
                endif; 
                wp_reset_query();

                // Recall the category posts function
                get_cat_subcat_posts($category_id);

                }

            endif;

            }

结束

相关推荐

Pre_Get_Posts在自定义发布类型上提供404

我试图在一个名为“提问”的子页面上过滤查询,以列出用户最近提交的所有问题,但在进入该页面时,我得到了404。刷新permalink结构并没有解决该问题。当前设置为月和名称。创建一个新问题可以正常工作,我可以访问新帖子。自定义分类法也可以正常工作,但归档页面不能正常工作。这是我正在使用的代码。Post typefunction question_post_type() { $labels = array( \'name\' => _