Je suis en cours d'exécution du code qui affiche les catégories enfants et toutes les publications dans les catégories enfants. Mais s'il y a plus de 5 articles dans une catégorie, seuls les 5 derniers articles sont affichés.
Comment puis-je tout afficher ou au moins définir un nombre tel que 9 messages, etc.?
Mon code:
<?php
$args = array(
'child_of' => 1
);
$categories = get_categories( $args );
foreach ($categories as $category) {
echo '<li><a>'.$category->name.'</a>';
echo '<ul>';
foreach (get_posts('cat='.$category->term_id) as $post) {
setup_postdata( $post );
echo '<li><a href="'.get_permalink($post->ID).'">'.get_the_title().'</a></li>';
}
echo '</ul></li>';
}
?>
Je pense que vous pourriez utiliser l'argument posts_per_page
dans votre requête get_posts
:
$args = array( 'child_of' => 1 );
$categories = get_categories( $args );
foreach ($categories as $category) {
echo '<li><a>'.$category->name.'</a>';
echo '<ul>';
$posts_args = array(
'posts_per_page' => 9,
'category' => $category->term_id
);
foreach (get_posts($posts_args) as $post) {
setup_postdata( $post );
echo '<li><a href="'.get_permalink($post->ID).'">'.get_the_title().'</a></li>';
}
echo '</ul></li>';
}
Le nombre de messages est fixé à 5 par défaut, vous devez donc le définir à votre guise. Si vous voulez afficher tous les articles, c’est alors -1
et le nombre que vous voulez sinon.
Vous devriez également mettre les fonctions hors des boucles (comme dans votre seconde foreach
), donc voici votre code, optimisé:
<?php
$args = array(
'child_of' => 1,
);
$categories = get_categories($args);
if (count($categories)) {
?>
<ul>
<?php
foreach ($categories as $category) {
?>
<li><a><?php echo $category->name; ?></a>
<ul>
<?php
$args = array(
'posts_per_page' => -1, // query ALL posts
'post_status' => 'publish',
'cat' => $category->term_id,
);
$query = new WP_Query($args);
while ($query->have_posts()) {
$query->the_post();
?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php
}
wp_reset_postdata();
?>
</ul></li>
<?php
}
?>
</ul>
<?php
}
?>
Vous devez utiliser le paramètre post_per_page
ou numberposts
de get_posts()
. Le paramètre par défaut est 5
, voir source , il suffit de choisir la valeur que vous souhaitez réellement pour votre appel get_posts()
et la valeur par défaut sera remplacée.