Une pagination WordPress sans plugin

A vous, bloggeurs professionnels ou du dimanche, qui avez cherché pendant des jours, des semaines, des mois un super plug-in pour afficher clairement une belle pagination entre les articles de votre merveilleux blog, et qui l’avez installé vaillament, saviez-vous qu’en fait vous auriez pu vous en passez?
En effet, WordPress possède une fonction intégrée implémentant cette fonctionnalité! Si, si.

Le plus marrant, c’est qu’elle date de la version 2.1 du CMS et qu’elle est ridiculement moins grosse qu’un plug-in comme WP-PageNavi.


Cette fonction est brillamment nommée « paginate_links »et vous trouverez toute la documentation relative dans le codex WordPress ici.

Faisant partie des fonctions contenues dans wp-includes/general-template.php, elle n’est nativement utilisée que pour la pagination des pages d’archives.

Je vous propose donc de voir ce qu’elle a dans le ventre et comment l’utiliser dans un système de pagination « fait maison ».

La fonction native

Elle possède 13 arguments dont voici la liste, la description et la valeur par défaut :

ArgumentDescriptionValeur par défautType
baseRéférence l’url utilisée pour créer les liens de pagination. La valeur par défaut ‘%_%’ dans l’exemple suivant: ‘http://exemple.com/all_posts.php%_%’ est remplacé par l’argument ‘format’ ci-dessous.%_%String
formatNuméro de page. Pour les permaliens modifiés, cela pourrait par exemple être ‘/page/%#%’, où le ‘%#%’ sera remplacé par le numéro de page.?page=%#%String
totalMontant total de pages1Entier
currentNuméro de la page courante0Entier
show_allBooléen true /false spécifiant si tous les numéros de pages seront affichés ou si il ne sera affiché qu’un nombre restreint de numéros de pageFalseBooléen
end_sizeNombre de numéros de page apparaissant lorsque l’on est en début ou en fin de liste1Entier
mid_sizeNombre de numéros de page apparaissant à droite et à gauche du numéro de la page courante, non compris celle-ci2Entier
prev_nextBooléen true/false spécifiant si les liens ‘précédent et ‘suivant’ doivent être affichésTrueBooléen
prev_textTexte affiché pour la page précédente (marche si l’argument ‘prev_next’ est paramétré à ‘true’__(‘« Previous’)String
next_textTexte affiché pour la page suivante (marche si l’argument ‘prev_next’ est paramétré à ‘true’__(‘Next »’)String
typeCe paramètre spécifie le format de la pagination. Trois valeurs sont possibles :
– plain : une chaîne de caractère,
– array : un tableau,
– list: une list HTML non ordonnée.
plainString
add_argsTableau d’argumentsFalseTableau
add_fragmentChaîne de caractère à ajouter à chaque lienString

Utilisation

Vous pouvez directement vous servir de cette fonction en l’appelant via le bout de code suivant :

<?php echo paginate_links( $args ) ?>

Vous pouvez également l’enrober de chocolat en écrivant votre propre fonction afin de modifier les paramètres par défaut de la fonction native.
Par exemple, vous pouvez modifier les paramètres suivants :
– les textes à afficher pour les billets antérieurs et les billets postérieurs
– les nombres de liens à afficher selon que l’on se trouve en milieu ou bien en extrémité de pagination…

Voici un exemple de code utilisant la fonction paginate_links de façon simple:
– récupération du nombre de pages (variable $max) et du numéro de la page courante (variable $num_courant),
– dans un tableau, alimentation des nouvelles valeurs des arguments,

function ma_pagination() {

global $wp_query, $wp_rewrite;

// Variables
$pages = «  »;
$max = $wp_query->max_num_pages;
if (!$num_courant = get_query_var(‘paged’)) $num_courant = 1;
$total = 1;

//Alimentation du tableau d’arguments
$args[‘base’] = str_replace(999999999, ‘%#%’, get_pagenum_link(999999999));
$args[‘total’] = $max;
$args[‘current’] = $num_courant;
$args[‘mid_size’] = 5;
$args[‘end_size’] = 1;
$args[‘prev_text’] = « « Précédent »;
$args[‘next_text’] = « Suivant » »;

// Ecriture de la pagination
if ($max > 1) echo ‘<div class= »pagination »>’;
if ($total == 1 && $max > 1) $pages = ‘Page ‘ . $num_courant . ‘ sur ‘ . $max . ‘‘. »\r\n »;
echo $pages.paginate_links($args); // Appel de la fonction native
if ($max > 1) echo ‘</div>’;

}

Cette fonction doit être implémentée dans le fichier functions.php de votre template. Pour l’utiliser, vous devez l’appeler par le code suivant, à placer à l’endroit de votre choix dans vos pages.

<?php if (function_exists(‘ma_pagination’)) ma_pagination(); ?>

Il ne vous restera plus qu’à styliser votre pagination via les CSS en utilisant les classes générées par la fonction native (classes current, next, page-numbers,..), les vôtres ainsi que les balises span et a, comme sur l’exemple ci-dessous.

.pagination { text-align : center; color : #000; }
.pagination span { font-size : 20px; }
.current { color : #FFF; }

.page-numbers { background-color : #1294AA; padding: 5px; }

.next a:link, .previous a:link {
background-color: #377B87;
border-radius: 5px 5px 5px 5px;
box-shadow: 5px 5px 5px #555555;
font-style : italic;
margin: 15px;
font-size: 18px;
padding: 2px 5px;
}
.next a:hover , .previous a:hover {
color: #FFFFFF;
text-decoration: none;
}

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *