Nombre d'articles sur une page

Par hatfab, il y a 11 ans


Salut à tous,
je voudrais savoir s'il y a un moyen de configuer un page article de façon différente que le réglage global du site, celui des option de lecture. Concrètement je voudrais que ma page d'accueil affiche 4 articles, ce qui est le cas, mais lorsque l'on est dans une page catégorie et qu'on les liste archives mensuelles par exemple, je voudrais qu'une dizaine d'articles s'affichent. C'est possible ?
Merci !

12 réponses

Axel - Valkyri0s, il y a 11 ans

Oui il faut que tu crées un template, et dans ta boucle wordpress choisir le nombre d'articles que tu veux.

<?php $args = array('posts_per_page' => '10'); $query = new WP_query($args); while($query->have_posts()) : $query->the_post(); ?> <article> <ul> <?php foreach (get_the_category() as $category) : ?> <?php $cate = $category->cat_name; ?> <li> <?= $cate; ?> </li> <?php endforeach; ?> </ul> <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2><br> <?php the_post_thumbnail(); ?> <p><?php the_excerpt(); ?></p> </article> <?php endwhile; ?>

Le code contenu dans la boucle while n'est qu'un exemple. À toi de le modifier.

hatfab, il y a 11 ans

Super, merci ! J'ai réussi à afficher plus de posts dans ma page en modifiant ma boucle suivant tes indications. En revanche je n'arrive pas à lui dire de n'afficher que les posts d'avril ou de mars par exemple. Je ne sais pas comment préciser ce paramètre.

hatfab, il y a 11 ans

En fait je ne comprends pas bien pourquoi ma page affiche tous les posts au lieu d'afficher uniquement les posts du mois. L'URL affichée est bien http://monsite/date/2015/03 et pourtant j'ai les posts de mars et avril qui s'affichent.
Voilà le code de ma boucle :

<?php $args = array('posts_per_page' => '100'); $query = new WP_query($args); ?> <?php if($query->have_posts()): while($query->have_posts()): $query->the_post(); ?> <div class="left-post"> <h2 class="left-post-title"><?php the_title(); ?></h2> <div class="left-post-content"> <div class="left-post-thumb"><a href="<?php the_permalink(); ?>"><?php the_post_thumbnail('thumbnail'); ?></a></div> <div class="left-post-txt"> <?php the_content('[lire la suite...]'); ?> </div> <div class="postdate">Posté le <?php echo get_the_time('l j F Y'); ?> dans <?php echo get_the_category_list(', '); ?></div> <div class="cb"></div> </div> </div> <hr> <?php endwhile; endif; ?>
JC_Pires, il y a 11 ans

C'est normal car tu redéfinis la requête.

essai ça:

<?php query_posts('posts_per_page=5' ); if($query->have_posts()): while($query->have_posts()): $query->the_post(); ?> <div class="left-post"> <h2 class="left-post-title"><?php the_title(); ?></h2> <div class="left-post-content"> <div class="left-post-thumb"><a href="<?php the_permalink(); ?>"><?php the_post_thumbnail('thumbnail'); ?></a></div> <div class="left-post-txt"> <?php the_content('[lire la suite...]'); ?> </div> <div class="postdate">Posté le <?php echo get_the_time('l j F Y'); ?> dans <?php echo get_the_category_list(', '); ?></div> <div class="cb"></div> </div> </div> <hr> <?php endwhile; endif; wp_reset_query();?>
hatfab, il y a 11 ans

Ça génère une erreur :
Fatal error: Call to a member function have_posts() on a non-object in /homepages/27/d557181032/htdocs/wp-content/themes/olga/archive.php on line 18

JC_Pires, il y a 11 ans

Ah ben oui normal la variable $query n'existe plus il faut donc l'enlever

essai ça:

<?php query_posts('posts_per_page=5' ); if(have_posts()): while(have_posts()): the_post(); ?> <div class="left-post"> <h2 class="left-post-title"><?php the_title(); ?></h2> <div class="left-post-content"> <div class="left-post-thumb"><a href="<?php the_permalink(); ?>"><?php the_post_thumbnail('thumbnail'); ?></a></div> <div class="left-post-txt"> <?php the_content('[lire la suite...]'); ?> </div> <div class="postdate">Posté le <?php echo get_the_time('l j F Y'); ?> dans <?php echo get_the_category_list(', '); ?></div> <div class="cb"></div> </div> </div> <hr> <?php endwhile; endif; wp_reset_query();?>
hatfab, il y a 11 ans

là ça bug plus effectivement, mais il m'affiche toujoursles posts de mars et d'avril sur la même page alors que dans la barre d'URL j'ai http://www.monsite.paris/date/2015/03

JC_Pires, il y a 11 ans

essai ça, j'ai refais l'indentation au passage:

<?php $args = array( 'date_query' => array( array( 'year' => get_query_var('year') , 'month' => get_query_var('monthnum') ), ), 'posts_per_page' => 5, ); $query = new WP_Query( $args ); ?> <?php if($query->have_posts()): ?> <?php while($query->have_posts()): $query->the_post(); ?> <div class="left-post"> <h2 class="left-post-title"><?php the_title(); ?></h2> <div class="left-post-content"> <div class="left-post-thumb"> <a href="<?php the_permalink(); ?>"><?php the_post_thumbnail('thumbnail'); ?></a> </div> <div class="left-post-txt"> <?php the_content('[lire la suite...]'); ?> </div> <div class="postdate"> Posté le <?php echo get_the_time('l j F Y'); ?> dans <?php echo get_the_category_list(', '); ?> </div> <div class="cb"></div> </div> </div> <hr> <?php endwhile;?> <?php endif; ?> <?php wp_reset_query();?>
hatfab, il y a 11 ans

Super ! Ça marche parfaitement, merci. Le problème maintenant c'est que je n'ai rien compris :). Là j'ai pas le temps de regarder en détail ton code mais tu m'as sortie d'un mauvais pas urgent. J'essayerai de comprendre en détail un peu plus tard. Merci encore !

JC_Pires, il y a 11 ans

Source: https://codex.wordpress.org/Class_Reference/WP_Query#Date_Parameters

En gros dans ton objet WP_Query(), tu peut lui passer un tas de parametres comme pour notre problème la date. D'où le

$args = [ 'date_query' =>[ array( 'year' => ... , 'month' => ... ], ], ]; $query = new WP_Query( $args );

D'où sors le get_query_var('year')?

Source: https://codex.wordpress.org/Function_Reference/get_query_var

En gros lorsque tu créés des liens avec les fonctions générées de wordpress, il passe des paramètre $_GET et pour year $_GET['year'] qui valais 2015 pour toi. C'est vraiment en gros l'explication des query_var() mais c'est pour que tu comprennes facilement. En gros tout les paramètres que wordpress a dans les url peuvent être retrouvé avec get_query_var() "la categorie, l'année, la page, ..." il te suffit de var_dump(et_query_var() ) sur n'importe qu'elle page pour voir quels sont les query_var() que tu peut récupérer.

hatfab, il y a 11 ans

Merci Jean-Christophe, je vais regarder tout ça…

JC_Pires, il y a 11 ans

Là, la pagination si tu l'a mets en place ne marchera pas, c'est à dire qu'il te sortira toujours les mêmes 5 post il faut que tu ajoutes ça à $args, ta requêtes deviens, et ajoutons la pagination par la même occasion, et organisons les:

<?php $paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1; // On lui dis récupère l'argument 'page' et si il n'existe pas page=1 $args = array( 'date_query' => array( array( 'year' => get_query_var('year') , 'month' => get_query_var('monthnum') ), ), 'posts_per_page' => 5, 'paged' => $paged, 'orderby' => 'date', 'order' => 'DESC', ); $query = new WP_Query( $args ); <?php if($query->have_posts()): ?> <?php while($query->have_posts()): $query->the_post(); ?> <div class="left-post"> <h2 class="left-post-title"><?php the_title(); ?></h2> <div class="left-post-content"> <div class="left-post-thumb"> <a href="<?php the_permalink(); ?>"><?php the_post_thumbnail('thumbnail'); ?></a> </div> <div class="left-post-txt"> <?php the_content('[lire la suite...]'); ?> </div> <div class="postdate"> Posté le <?php echo get_the_time('l j F Y'); ?> dans <?php echo get_the_category_list(', '); ?> </div> <div class="cb"></div> </div> </div> <hr> <?php endwhile;?> <?php posts_nav_link(); ?> // On ajoute la navigation « Previous Page — Next Page » pour pouvoir naviguer si il y a + de 5 posts <?php endif; ?> <?php wp_reset_query();?>

Source de pagination: https://codex.wordpress.org/Function_Reference/posts_nav_link