Installer des extensions (plugins) permet d’ajouter des services variés à un site WordPress. Mais comment faire lorsqu’on veut personnaliser son site sans trouver ce que l’on souhaite dans les extensions disponibles ?
WordPress permet de choisir d’insérer son propre code :
- dans le fichier « functions.php » qui est associé au thème actif,
- dans une extension (plugin ou mu-plugin) qui est indépendante du thème et que l’on peut activer ou désactiver.
Pour que le code soit exécuté au moment voulu, les fonctions doivent être associées à des « crochets » (hooks).
Il est fortement déconseillé de modifier les fichiers du noyau WordPress, car la mise à niveau suivante de WordPress viendrait effacer vos modifications.
Ne jamais modifier les fichiers du noyau WordPress ou d’un thème
Le noyau WordPress est l’ensemble des programmes qu’on installe sur son serveur pour créer un site WordPress. Lorsqu’on souhaite modifier le fonctionnement d’un site, le premier réflexe est d’intervenir dans les fichiers du noyau. Cela peut fonctionner… jusqu’à la prochaine version de WordPress.
Une version WordPress est une évolution des fichiers du noyau WordPress (avec éventuellement une modification de la Base de Données WordPress) pour apporter des fonctionnalités nouvelles et des améliorations dans le fonctionnement de WordPress (plus rapide, plus sûr…). Autrement dit, les modifications que vous faites dans des fichiers de programmes du noyau seront effacées lors de la mise à jour suivante de WordPress.
De même, si vous modifiez les fichiers d’un thème, vos modifications pourront disparaître lors de la mise à jour du thème. La bonne technique consiste à créer un « thème enfant » (child theme), qui est un thème dérivé d’un thème « parent ». Dans ce cas, les fichiers du thème enfant sont stockés dans un répertoire différent du thème parent, ce qui fait qu’ils ne sont pas modifiés par les mises à jour du thème parent.
Les crochets (hooks)
Les crochets permettent d’associer une fonction personnalisée à des moments précis de l’exécution du noyau WordPress. Il est possible :
- d’associer une « action« , par exemple pour envoyer un mail lorsqu’un article est sauvegardé, ou publié…
- d’associer un « filtre » qui permet de récupérer une valeur traitée par WordPress et de la modifier; par exemple si on veut modifier le titre des articles, le filtre the_title permet de récupérer le titre saisi et de le modifier avant que WordPress ne l’affiche.
Ajouter un crochet »action »
Pour faire exécuter une fonction par un crochet (au moment où WordPress exécute le do_action()), il faut appeler la fonction add_action().
On trouve un exemple d’utilisation du crochet « template_redirect » dans le tutoriel Redirections d’adresses HTTP pour WordPress :
Ajouter un crochet « filtre »
On positionne les crochets « filtre » en appelant la fonction « apply_filters() » là où le crochet va s’exécuter. Voici, l’appel du crochet « the_title » dans le noyau WordPress :
$title = apply_filters( ‘the_title’, $title, $post->ID )
Pour ajouter une fonction à exécuter par un crochet, il faut appeler la fonction add_filter().
Julio Potier, expert en sécurité WordPress, propose cette fonction basée sur l’utilisation de crochets « filtre ». Elle permet de forcer l’adresse mail d’administration :
L’appel de la fonction add_filter() permet d’associer une fonction (« _option_admin_email ») à un crochet (« option_admin_email« ).
Très important : le crochet « filtre » doit toujours renvoyer une valeur (« return ‘votre@email.fr‘»). Si on ne retourne aucune valeur sur un crochet « filtre », WordPress va continuer son exécution avec une valeur nulle (un titre vide par exemple).
Les crochets sont insérés dans le noyau WordPress. On peut notamment trouver la liste sur le site d’Adam Brown.
Les développeurs d’extensions sont chaudement invités à y insérer leurs propres crochets afin de permettre à d’autres développeurs de personnaliser leur extension.
On trouvera un exemple d’utilisation de crochets dans l’article suivant :
Le fichier functions.php
Le format du fichier est UTF8 sans BOM :
Le fichier functions.php est exécuté s’il se trouve dans le répertoire du thème actif. C’est le moyen le plus simple pour ajouter (ou retirer) des fonctions à WordPress. Pour un débutant qui découvre WordPress, c’est un moyen rapide de recopier du code trouvé sur internet.

Attention :
- si on change de thème actif, WordPress exécutera le fichier functions.php situé dans le répertoire du nouveau thème actif. Il faut donc distinguer deux situations :
- les fonctions liées au thème ⇒ à insérer dans « functions.php »,
- les fonctions pouvant être utilisées quel que soit le thème actif ⇒ à insérer dans une extension (plugin ou mu-plugin).
- si le thème est mis à jour (chargement d’une nouvelle version), le fichier functions.php modifié par le développeur peut être remplacé par le fichier functions.php de la mise à jour du thème. C’est pourquoi, lorsqu’on fait évoluer un thème, il faut créer un « thème enfant« .
Les extensions (plugins et mu-plugins)
Les extensions permettent de modifier le fonctionnement « standard » de WordPress en ajoutant du code dans un fichier ou un ensemble de fichiers contenu dans un sous-répertoire du répertoire « /wp-content/plugins » :

Il existe énormément d’extensions disponibles (plus de 40.000 dans le dépôt officiel (« https://wordpress.org/plugins/ » à fin octobre 2015) :

Ci-dessus, on peut distinguer des extensions permettant : de se protéger des spams, d’installer un cache (qui permet d’accélérer l’affichage du site), de créer un réseau social, d’obtenir une multitude de fonctions pour améliorer son site dans une seule extension (jetpack), de vérifier qu’un thème est correctement codé ou d’installer un forum). D’autres extensions permettront d’insérer des formulaires complexes, enrichir les diaporamas, faciliter l’écriture des articles, créer un site d’e-commerce …
En dehors du dépôt officiel, il est possible d’obtenir une multitude d’autres extensions.
Soyez néanmoins prudents lorsque des sites offrent de télécharger gratuitement des extensions normalement payantes. Ne croyez pas qu’ils ne vivent que de la publicité, vous avez toutes chances de télécharger du code pourri. Si vous téléchargez depuis n’importe où dimanche, ne venez pas pleurer lundi si votre site est piraté. Vérifiez d’abord sur votre moteur de recherche si le site si généreux n’est pas un piège.
WordPress est le générateur de site le plus utilisé au monde. En conséquence, les prix des extensions payantes sont généralement étonnamment bas par rapport aux fonctionnalités offertes car les développements peuvent être amortis sur un grand nombre de ventes.
Télécharger une extension
Pour télécharger une extension WordPress, il faut :
- accéder à l’administration,
- avoir les droits suffisants.
Première possibilité : cliquer sur le sous-menu Ajouter du menu Extensions :

Deuxième possibilité : cliquer sur le bouton Ajouter depuis la page d’administration des Extensions :

Le tutoriel suivant explique comment ajouter des extensions à son site.
Créer sa propre extension
Extension dans un fichier
Une extension peut n’être composée que d’un seul fichier. Il n’y a dans ce cas que trois contraintes :
- que le fichier soit un fichier « php » (et comme tous les fichiers WordPress avec l’encodage « UTF8 – sans BOM« ),
- qu’il soit déposé dans le répertoire /wp-config/plugins/,
- qu’un en-tête , décrivant les propriétés de l’extension, soit placée au début du fichier.
Le codex WordPress décrit les paramètres de l’en tête d’une extension avec l’exemple suivant :
Créer un fichier avec l’extension « .php » (peu importe le nom du fichier), ne contenant que cet en-tête.
Sauver ce fichier dans le répertoire « /wp-content/plugins/ ».
L’extension apparaît dans la liste des extensions disponibles sur le site, et on peut constater que les informations affichées dans la lise des extensions correspondent aux informations saisies dans l’en-tête :

Le code de l’extension est à placer sous l’en-tête. vous pouvez insérer du code php et du code HTML.
L’extension, si elle est activée, sera chargée par WordPress. Le code sera exécuté au chargement de l’extension, ce qui n’est probablement pas ce que vous souhaitez. Pour que le code soit exécuté au moment opportun, il faut utiliser les crochets.
Extension dans un sous-répertoire
Une extension peut être composée de plusieurs fichiers. Il n’y a dans ce cas que trois contraintes :
- que l’ensemble des fichiers et des répertoires de l’extension soient insérés dans un sous-répertoire du répertoire /wp-content/plugins/,
- que le sous-répertoire de l’extension contienne un fichier « php » dont le nom corresponde au nom du répertoire (par exemple, si le sous-répertoire est « mon extension », le fichier doit être nommé « mon-extension »
Personnaliser son site WordPress – extension dans un répertoire - que ce fichier contienne un en-tête , décrivant les propriétés de l’extension
Personnaliser son site WordPress – en-tête d’une extension

Il n’y a pas de limite au nombre de fichiers et sous-répertoires utilisés pour une extension. Voici, par exemple, une partie du sous-répertoire racine de l’extension Jetpack :

Les extensions automatiques (mu plugins)
Les extensions automatiques fonctionnent comme les extensions « simples » avec deux différences :
- elles se situent dans le sous-répertoire /wp-content/mu-plugins/ au lieu du sous-répertoire /wp-content/plugins (« mu » veut dire « must use » soit, en français, « doit être utilisé ») :
Personnaliser son site WordPress – sous-répertoire des extensions automatiques - elles sont toujours exécutées, il n’y a pas d’activation ou de désactivation ni même de suppression proposées depuis l’administration; pour retirer une extension automatique, il faut intervenir sur le serveur hébergeant le site afin de supprimer les fichiers et sous-répertoires de l’extension.
Personnaliser son site WordPress – non validation des extensions automatiques
Dès lors que le sous-répertoire existe, les extensions automatiques apparaissent dans le menu des extensions accessible depuis l’administration :

Pour transformer une extension simple en extension automatique, il suffit de la déplacer dans le répertoire « /wp-content/plugins/ » vers le répertoire « /wp-content/mu-plugins/ ».
Activer / désactiver / supprimer une extension
WordPress exécutera systématiquement le code contenu dans le fichier functions.php du thème actif ainsi que les extensions automatiques. En revanche, les extensions simples doivent être activées.
Pour se faire, il faut pouvoir accéder à l’administration du site avec les droits suffisants (par exemple, un rédacteur n’a pas le droit de gérer les extensions). Lorsqu’un utilisateur a les droits suffisants, le menu Extensions apparaît dans la colonne de gauche de l’administration :

Il est possible de filtrer l’affichage des extensions :

Il est aussi possible de rechercher une extension en fonction de son nom :

Une fois la ou les extensions sélectionnées, il est possible d’effectuer les opérations suivantes :
- Activer : l’extension s’exécutera lors des prochaines exécutions de WordPress (affichage du site et / ou administration en fonction de l’extension),
- Désactiver : l’extension ne s’exécutera plus tant qu’elle n’aura pas été réactivée,
- Mettre à jour : si l’extension vient du répertoire officiel, ou si le développeur a mis en place la gestion de version, WordPress vérifie si une version nouvelle de l’extension est disponible et si oui, WordPress propose d’installer la dernière version disponible de l’extension,
- Supprimer : cette opération supprime toute trace de l’extension en supprimant fichiers et répertoires créés ainsi que les entrées dans la Base de Données créées pour les besoins de l’extension; malheureusement ceci reste bien souvent théorique car certains développeurs se contentent de supprimer les fichiers et les sous-répertoires; pour réutiliser l’extension, il faudra la réinstaller.
Les opérations peuvent être effectuées :
- de façon groupée, en sélectionnant des extensions installées et en utilisant le menu en haut à gauche,
Actions groupées sur les extensions - en choisissant les actions sélectionnables au niveau de chaque extension :
Personnaliser son site WordPress – opérations sur une extension les opérations proposées dépendent de l’état de l’extension : WordPress ne propose d’activer une extension que si elle est désactivée, de la mettre à jour que si une nouvelle version est disponible…
Un exemple d’extension
L’article suivant décrit, étape par étape, la réalisation d’une extension :
Astuces à propos des extensions
Vérifier que l’extension est appelée par WordPress
Vérifier que l’extension est bien appelée par WordPress permet de bloquer toute tentative d’utiliser les fonctions en exécutant le fichier php depuis internet.
Un moyen de le vérifier consiste à tester la constante « ABSPATH » qui est définie dans le fichier wp-config.php. Si elle n’est pas définie, c’est que le code de l’extension n’est pas appelé après un chargement normal de WordPress.
Ajouter le code suivant au début de l’extension :
if ( !defined(‘ABSPATH’) ) exit (‘Faites demi-tour !’);
<?php
/*
Plugin Name: Deplace connexion
Plugin URI: https://dfarnier.fr/modifier-wp-login/
Description: modifier l'adresse de connexion pour éviter un piratage
Version: 4
Author: Daniel Farnier
Author URI: https://dfarnier.fr
License: GPL2
License URI: https://www.gnu.org/licenses/gpl-2.0.html
*/
// Vérifier que l'extension est appelée depuis WordPress et non directement via internet
if ( !defined('ABSPATH') ) exit ('Faites demi-tour !');
Ordre de chargement
Il est important de savoir que le chargement se fait dans l’ordre suivant :
- mu-plugins,
- plugins
- functions.php
Connaître cet ordre permet d’éviter d’utiliser une fonction, une variable globale ou une constante avant qu’elle ne soit définie (exemple : appel dans une extension alors que la définition est dans functions.php).
Haut de pageFonctions redéfinissables (pluggable)
Certaines fonctions de WordPress sont redéfinissables (pluggable), c’est à dire qu’on peut développer sa propre version qui sera exécutée à la place de la fonction standard.
Les fonctions redéfinissables se trouvent dans le fichier : « wp-includes\pluggable.php » :

Elles commencent par un test de non existence « if ( !function_exists()) », c’est à dire que WordPress vérifie qu’il n’a pas déjà inclue une fonction de même nom ) :

Si on veut modifier le comportement d’une fonction redéfinissable, il suffit d’insérer une fonction de même nom dans une extension (« plugin » ou « mu-plugin ») ou le fichier « functions.php » du thème.
WordPress incluant d’abord les fichiers « mu-plugins.php », « plugins.php » et functions.php », la fonction personnalisée sera reconnue comme existante lorsque WordPress inclura le fichier pluggable.php.
On trouvera un exemple de fonction redéfinissable dans l’article Simuler l’envoi de mails pour WordPress.
Haut de page