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 :

Argument Description Valeur par défaut Type
base Ré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
format Numé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
total Montant total de pages 1 Entier
current Numéro de la page courante 0 Entier
show_all Boolé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 page False Booléen
end_size Nombre de numéros de page apparaissant lorsque l’on est en début ou en fin de liste 1 Entier
mid_size Nombre de numéros de page apparaissant à droite et à gauche du numéro de la page courante, non compris celle-ci 2 Entier
prev_next Booléen true/false spécifiant si les liens ‘précédent et ‘suivant’ doivent être affichés True Booléen
prev_text Texte affiché pour la page précédente (marche si l’argument ‘prev_next’ est paramétré à ‘true’ __(‘« Previous’) String
next_text Texte affiché pour la page suivante (marche si l’argument ‘prev_next’ est paramétré à ‘true’ __(‘Next »’) String
type Ce 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.
plain String
add_args Tableau d’arguments False Tableau
add_fragment Chaîne de caractère à ajouter à chaque lien String

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 *