Mémos

M é m o - l a b .

La pagination

WordPress propose des fonctions dédiées à l’intégration d’un système de pagination.

Notions abordeées : previous_posts_link(), next_posts_link(), posts_nav_link(), the_posts_navigation(), the_posts_pagination() , previous_post_link(), next_post_link().

Lorsque l’on souhaite n’intégrer qu’un certain nombre de contenus par page, il est nécessaire d’utiliser un système de pagination permettant de naviguer entre les différentes pages.
L’utilisation des fonctions previous_posts_link() et next_posts_link() offrent la possibilité de gérer séparément les liens « précédents » et « suivants ».
Les fonctions the_posts_navigation(), posts_nav_link() et the_posts_pagination() offrent un système de pagination intégrant les 2 liens.

La particularité de la fonction the_posts_pagination() réside dans le fait qu’elle affiche un système de pagination intégrant les numéros de page.

Les fonctions previous_post_link() et next_post_link() permettent respectivement d’accéder au précedent article et à l’article suivant.

La compréhension par le code





Navigation entre pages
Cas de la loop WordPress

<!-- Dans un template php -->
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
    <h1><?php the_title(); ?></h1>
    <p><?php the_content(); ?></p>
<?php endwhile; endif; ?>

<?php 
    previous_posts_link('« Page précedente'); ?> -- <?php next_posts_link('Page suivante »');
?>


 
Navigation entre pages
Cas de la loop WordPress personnalisée

<!-- Dans un template php -->
<?php
	// $current_page_num représente le numéro de la page courante
    $current_page_num = (get_query_var('page')) ? get_query_var('page') : 1;

	$q = new WP_Query([
	    'post_type' => 'post',
	    // Nbre de posts par page à afficher
	    'posts_per_page' => 3,
	    'paged' => $current_page_num
	]);
?>
<?php 
    if ($q->have_posts()) :
	    while ($q->have_posts() ) : $q->the_post(); ?>
	        <h1><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h1>
	    	<p><?php the_content(); ?></p>
		<?php endwhile; ?>

		<?php
		    // Pagination
	            if (function_exists(my_pagination)) { 
	        	// $q->max_num_pages représente le nombre total de pages
	        	// calculé en fonction du paramètre post_per_pages de la requète
	        	my_pagination($q->max_num_pages, $current_page_num);
	        }
	        // Clean up after the query and pagination.
			wp_reset_postdata();
	    ?>
<?php endif; ?>

<!-- Dans functions.php -->
<?php
    function my_pagination($total_number_pages, $current_page_num) {
        // Réglages de la pagination
        $paginate_links = paginate_links([
            // retourne l'url de base de la page
            'base'            => get_pagenum_link(1) .'%_%',
            // Format de l'url lors de la navigation .../page/x
            'format'          => 'page/%#%',
            // Nombre total de pages
            'total'           => $total_number_pages,
            // Numéro de la page courante
            'current'         => $current_page_num,
            // Affichage des liens précédents et suivants
            'prev_next'       => True,
            // Le lien précédent
            'prev_text'       => __('«'),
            // Le lien suivant
            'next_text'       => __('»')
        ]);

        // Affichage de la pagination
        if ($paginate_links) {
            $html = '<nav>';
            $html .= 'page ' .$current_page_num .' / ' .$total_number_pages;
            $html .= '<br>';
            $html .= $paginate_links;
            $html .= '</nav>';

            echo $html;
        }
    }
?>



Navigation entre articles
<!-- Dans un template php -->

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
    <h1><?php the_title(); ?></h1>
    <p><?php the_content(); ?></p>
<?php endwhile; endif; ?>

<?php 
    next_post_link('%link', '« %title '); ?> | <?php previous_post_link('%link', '%title »'); 
?>