web-dev-qa-db-fra.com

Afficher toutes les publications de la sous-catégorie enfant dans la barre latérale de la page de publication?

J'essaie de créer une barre latérale personnalisée pour mes publications dans certaines catégories. Cela ressemblera à quelque chose comme ça.

enter image description here

Ma structure de catégories ressemble à ceci:

  • Parent 1
    • Enfant 1
      • Sous-enfant 1
      • Sous-enfant 2
    • Enfant 1
      • Sous-enfant 1
      • Sous-enfant 2
  • Parent 2

Ce que je veux faire, c’est d’afficher tous les articles des sous-enfants 1 et 2. Je serai plus précis. Disons que nous avons 3 articles. Deux d’entre eux sont sous-enfant 1 et le dernier est sous-enfant 2. Ensuite, seulement souhaite que les 2 articles sous le sous-enfant 1 soient affichés sous le sous-enfant 1 et que le 3 e post ne s'affiche que sous le sous-enfant 2.

Cela fait deux jours que je regarde sur Internet pour savoir comment faire cela, mais je ne comprends pas ce que je fais de mal.

Voici mon code et ce que je tente de modifier:

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

Des idées?

2
user2121214

Je suppose que vous pourriez faire un grand pas en utilisant wp_list_categories() avec un walker pour ajouter une liste non ordonnée supplémentaire à chaque élément.

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

Enfin, après avoir cherché toute la journée .. collecter et combiner le code .. c’est ça:

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

profitez-en :)

1
awangfaisal

Fonction permettant d'obtenir toutes les catégories et leur publication pour une catégorie parent particulière

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;

            }
0