Afficher cinq cents articles sur une seule page d’archive serait aussi peu pratique pour le visiteur que coûteux pour le serveur ; WordPress découpe donc systématiquement les résultats d’une requête par lots.
Fonctionnement dans WordPress
Le nombre d’articles par page se règle globalement dans Réglages → Lecture, ou localement via l’argument posts_per_page d’un WP_Query. Le numéro de la page courante est porté par la variable de requête paged (ou page pour une page statique paginée avec le tag <!--nextpage-->). Les fonctions the_posts_pagination() et paginate_links() génèrent les liens vers les pages suivantes et précédentes.
Exemple
$paged = get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1;
$requete = new WP_Query( array(
'posts_per_page' => 10,
'paged' => $paged,
) );
Pièges fréquents
Dans une requête personnalisée, utiliser page au lieu de paged casse silencieusement la pagination ; c’est l’une des confusions les plus signalées sur le forum support de WordPress.org, la requête principale utilisant l’un ou l’autre selon le contexte.
Bon à savoir
Sur une page trop avancée dans la pagination, WordPress renvoie normalement une page 404 plutôt qu’une liste vide, un comportement par défaut qui surprend parfois les développeurs testant leur thème avec un jeu de données limité.
Sur une page de recherche ou d’archive personnalisée, il est facile d’oublier que posts_per_page à -1 désactive totalement la pagination et charge tous les résultats d’un coup, un réglage à réserver aux petits jeux de données sous peine de ralentir fortement l’affichage.