web-dev-qa-db-ja.com

投稿ページのサイドバーにある子サブカテゴリの下にあるすべての投稿を表示しますか?

特定のカテゴリの投稿にカスタムサイドバーを作成しようとしています。それはこのように見えるでしょう。

enter image description here

私のカテゴリ構造は次のようになります。

  • 親1
    • 子供1
      • サブチャイルド1
      • サブチャイルド2
    • 子供1
      • サブチャイルド1
      • サブチャイルド2
  • 親2

私がしたいのは、Sub Child 1とSub Child 2の下にすべての投稿を表示することです。具体的に、3つの投稿があり、そのうちの2つがSub Child 1の下にあり、最後の投稿がSub Child 2の下にあるとします。サブチャイルド1の下にある2つのポストをサブチャイルド1の下に表示し、3:ポストをサブチャイルド2の下にのみ表示するようにします。

私はこれをどのように行うかを理解するためにインターネット上で今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>';
} 
?>

何か案は?

2
user2121214

wp_list_categories()walkerと共に使用して、すべての項目に追加の番号なしリストを追加するという大きな一歩を踏み出すことができると思います。

コード

$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 );
    }
}
4
Mike Madern

最後に、一日中検索した後..コードを集めて結合します..これはそれです:

<?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; ?>

楽しめ :)

1
awangfaisal

特定の親カテゴリのすべてのカテゴリとその投稿を取得するための機能

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;

            }