Qu’est-ce qu’un shortcode ?
Un shortcode WordPress est un raccourci qui permet d’encapsuler du code dans n’importe quel type de contenu, une page, un article, une page d’administration…
C’est très utile lors de la création d’un site internet pour obtenir un comportement personnalisé et dépendant du contexte.
Dans cet article, je prends l’exemple d’un shortcode qui affiche le nombre de vues d’une page, dans la couleur de son choix :
[sukellos_page_views color="orange"]
Ce qui donne :
Déclaration du shortcode
La déclaration d’un shortcode est très similaire à celle d’un hook. Elle s’effectue grâce à la fonction :
add_shortcode( string $tag, callable $callback )
Développons une première étape qui génère un simple Bonjour dans la couleur passé en paramètre à l’aide de color
:
Lorsque le shortcode [sukellos_page_views]
est détecté par WordPress, il est remplacé par le retour d’exécution de la fonction sukellos_page_views_shortcode
définie comme callback.
La ligne extract(shortcode_atts( array( 'color' => null ), $atts ) );
permet de filtrer et de récupérer les paramètres du shortcode directement en tant que variables. Le paramètre color
peut donc être utilisé directement comme $color
dans la suite du code.
C’est le retour de cet appel, donc le contenu de $html_content
qui est affiché à l’endroit où est inséré le shortcode.
Compter les vues d’une page
Le compte des vues d’une page peut être implémenté facilement en combinant l’utilisation de :
- Le hook
template_redirect
qui est appelé avant chaque génération de page - Un postmeta associé à la page concernée, nommé
sukellos_page_views_shortcode
, qui est incrémenté à chaque visite.
global $post
permet de récupérer le type de contenu courant dans la « boucle » d’exécution de WordPress.
Le cas échéant, cela permet de récupérer les informations sur la page courante. Dans ce cas, l’attribut $post->post_type
est égal à page
.
Il suffit ensuite de gérer l’incrémentation du postmeta sukellos_page_views_shortcode
Le code intégral
Le code complet comprend l’implémentation du shortcode et de la gestion du compte des vues de page. Le code est adapté afin d’être intégré à une classe dédiée : Sukellos_Page_Views
. Il peut être inséré dans un fichier dédié à la classe, ou dans le fichier functions.php
dans votre thème enfant.
La classe Sukellos_Page_Views
gère à la fois le traitement du comptage des pages, et celui du shortcode pour son affichage. Il est intéressant de centraliser tout le code dans une classe et de l’écrire dans un fichier qui lui est propre, par exemple class-sukellos-page-views-shortcode.php
.
Les raisons sont multiples :
- Respect des concepts de programmation orienté-objet par le fait de centraliser la responsabilité dans une classe experte, c’est-à-dire qui gère l’information liée au compte des vues : création, modification, affichage
- Lisibilité ,donc maintenabilité du code, puisqu’il n’est pas agloméré dans un fichier unique comme
functions.php
, qui deviendrait vite énorme et donc difficile à comprendre et à évoluer.
Attention à bien gérer l’instance de Sukellos_Page_Views
afin qu’elle reste unique. Dans le cas contraire, le compte des pages serait démultiplié par le nombre d’instances. En effet, si N instances de Sukellos_Page_Views
existent et ont chacune inscrit leur propre shortcode, la méthode action_template_redirect
sera appelée N fois à chaque visite de page, et donc le compteur incrémenté N fois également.