web-dev-qa-db-fra.com

Comment afficher plus de 5 messages?

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

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>';
}
3
butlerblog

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
}
?>
3
tfrommen

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.

2
Nicolai