J'essaie de créer une barre latérale personnalisée pour mes publications dans certaines catégories. Cela ressemblera à quelque chose comme ça.
Ma structure de catégories ressemble à ceci:
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?
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 );
}
}
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 :)
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;
}