Ajouter un bouton "page suivante" dans Wordpress
2013-01-13 09:21 — WordPress
Curiosité de Wordpress, il existe dans l'éditeur un bouton "insérer balise More" (qui sert à séparer l'extrait), mais pas de bouton "insérer balise page suivante". Forçant à aller dans le code source (mode Texte) et saisir manuellement le tag <!--nextpage-->, pénible pour les personnes non habituées.
Or la fonctionnalité existe, il faut l'activer, tout simplement.
J'avoue ne pas m'être cassé trop la tête pour cet article. Il s'agit de résumer le premier résultat apparaissant dans Google... Certes, sur un forum anglais (celui de Wordpress). Mais bon, cela va répondre à la question de quelques élèves du dernier module, tout en ajoutant quelques infos.
Il y a deux trucs cités dans l'article: ajouter le bouton manquant, ou exploiter à fond celui existant.
Ajouter le bouton Page Suivante
C'est très simple, il suffit de saisir copier/coller ces quelques lignes dans le fichier functions.php de votre thème, dont le but est d'ajouter le bouton dans la barre d'outils.
La fonction charge les boutons existants, repère le bouton more, et insère dans le tableau un nouveau bouton, le fameux wp_page qui nous intéresse.
function wysiwyg_editor($mce_buttons) {
$pos = array_search('wp_more', $mce_buttons, true);
if ($pos !== false) {
$tmp_buttons = array_slice($mce_buttons, 0, $pos + 1);
$tmp_buttons[] = 'wp_page';
$mce_buttons = array_merge($tmp_buttons, array_slice($mce_buttons, $pos + 1));
}
return $mce_buttons;
}
add_filter('mce_buttons', 'wysiwyg_editor');
Et hop.
Preuve s'il en est que la fonctionnalité existe, puisque l’icône est déjà prévue...
Exploiter More, encore et encore...
Cette deuxième solution, assez élégante, consiste à se dire que, si la balise <!--more--> sert à séparer l'extrait du reste de l'article, les autres balises <!--more--> dans l'article ne servent à rien.
Donc, le bout de code (toujours à placer dans le fichier functions.php) ci dessous va automatiquement les remplacer en balise <!--nextpage--> au moment de la sauvegarde de l'article.
function filter_more_with_nextpage($content){
$content = str_replace('<!--more-->','<!--nextpage-->',$content);
$content = preg_replace('/<!--nextpage-->/i','<!--more-->',$content,1);
return $content;
}
add_filter('content_save_pre','filter_more_with_nextpage');
Remarquons au passage le filtre content_save_pre qui va s'appliquer avant la sauvegarde, permettant d'effectuer sur notre contenu tout nettoyage qui pourrait s'avérer utile.
Les deux solutions peuvent d'ailleurs cohabiter assez facilement (mais bon, n'abusons pas des bonnes choses).
Ah, et la pagination ?
Bien entendu, pour faire apparaître la pagination, vous n'oublierez pas de prévoir de mettre en place, dans les fichiers page.php et single.php la fonction adhoc.
Par exemple via:
<?php wp_link_pages(array( 'before' => '<p>Pages:', 'after' => '</p>' )); ?>
Voili voilou...