Extensions (plugins, mu-plugins) et functions.php

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.

Haut de page

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.

Haut de page

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 »

On positionne les crochets « action » en appelant la fonction « do_action() » là où le crochet va s’exécuter. Voici, l’appel de l’action « template_redirect » dans le noyau WordPress :

 do_action( ‘template_redirect’ );

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 :

add_action( 'template_redirect', 'wpdf_redirect_par_wp', 10 );

function wpdf_redirect_par_wp () {
global $wp;	
....
Ajout d'une fonction au crochet template_redirect

Le crochet « template_redirect« , appelé dans le noyau WordPress, s’exécute après que WordPress ait recueilli toutes les informations nécessaires pour l’affichage de la page demandée, mais avant de l’afficher.
La fonction personnalisée « wpdf_redirect_par_wp » permet de demander l’affichage d’une autre page que celle qui était demandée.

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 :

add_filter( 'option_admin_email', '_option_admin_email' );
function _option_admin_email( $value ) {
	return 'votre@email.fr'; // valeur à modifier
}
Forcer l'email de l'administrateur

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 appels de crochets (add_action et add_filter) peuvent être insérés dans différents fichiers en dehors du noyau WordPress  :

  • functions.php : les modifications seront liées au thème activé,
  • extensions (plugins ou mu-plugins) : les modifications peuvent s’utiliser quel que soit le thème actif.

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 :

Les meta données de catégorie

Haut de page

Le fichier functions.php

Pour modifier les fichiers de WordPress utilisez un éditeur (par exemple Notepad++ qui est gratuit) et pas un traitement de texte comme word.
Le format du fichier est UTF8 sans BOM :

encodage en 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.

Personnaliser son site WordPress - fichier functions.php du thème twentytwelve
Personnaliser son site WordPress – fichier functions.php du thème twentytwelve

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« .

Haut de page

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 » :

Personnaliser son site WordPress - emplacement des extensions
Personnaliser son site WordPress – emplacement des extensions

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

Personnaliser son site WordPress - le répertoire officiel des extensions
Personnaliser son site WordPress – le répertoire officiel des extensions

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 :

Personnaliser son site WordPress - ajouter une extension
Personnaliser son site WordPress – ajouter une extension

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

Personnaliser son site WordPress - ajouter une extension
Personnaliser son site WordPress – ajouter une extension

Le tutoriel suivant explique comment ajouter des extensions à son site.

Ajouter des extensions (plugins) à son site WordPress

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 :

<?php
/*
Plugin Name: My Toolset
Plugin URI:  http://URI_Of_Page_Describing_Plugin_and_Updates
Description: This describes my plugin in a short sentence
Version:     1.5
Author:      John Smith
Author URI:  http://URI_Of_The_Plugin_Author
License:     GPL2
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Domain Path: /languages
Text Domain: my-toolset
*/
Exemple d'en-tête d'une extension

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 :

Personnaliser son site WordPress - informations sur une extension
Personnaliser son site WordPress – informations sur une extension

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
    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
    Personnaliser son site WordPress – en-tête d’une extension
Personnaliser son site WordPress - description d'une extension dans un sous-répertoire
Personnaliser son site WordPress – description d’une extension dans un sous-répertoire

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 :

Personnaliser son site WordPress - fichiers de l'extension Jetpack
Personnaliser son site WordPress – fichiers 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
    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
    Personnaliser son site WordPress – non validation des extensions automatiques

À noter : le sous-répertoire « /wp-content/mu-plugins/ » n’est pas créé à l’installation de WordPress, il faut le créer soi-même.

Dès lors que le sous-répertoire existe, les extensions automatiques apparaissent dans le menu des extensions accessible depuis l’administration :

Personnaliser son site WordPress - extensions automatiques
Personnaliser son site WordPress – extensions automatiques

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 :

Personnaliser son site WordPress - le menu des extensions
Personnaliser son site WordPress – le menu des extensions

Il est possible de filtrer l’affichage des extensions :

Personnaliser son site WordPress - filtrer l'affichage des extensions
Personnaliser son site WordPress – filtrer l’affichage des extensions

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

Personnaliser son site WordPress - recherche d'une extension installée
Personnaliser son site WordPress – recherche d’une extension installée

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,

    Améliorer un site WordPress - actions groupées sur les extensions
    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
    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 :

Modifier l’accès à wp-login.php

<?php
/*
Plugin Name: Deplace connexion
Plugin URI:  http://dfarnier.fr/modifier-wp-login/
Description: modifier l'adresse de connexion pour éviter un piratage
Version:     4
Author:      Daniel Farnier
Author URI:  http://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 !');

//	définir la nouvelle adresse de connexion
define('WPDF_ADRESSE_CONNEXION', 'coucou');
//	définir l'adresse de retour quand la connexion est refusée (exemple : la page d'accueil)
define('WPDF_ADRESSE_CONNEXION_REFUSEE', network_site_url());

//	rediriger vers le fichier programme wp-login.php si la nouvelle adresse est appelée correctement
//  pour se connecter / déconnecter, réinitialiser le mot de passe
//	ou se reconnecter après une déconnexion automatique
add_action( 'init', 'wpdf_redirige_login' );

function wpdf_redirige_login()  {
	
	$wpdf_adresse_connexion = '/'.WPDF_ADRESSE_CONNEXION;	//	adresse de base

	$wpdf_patron='#' . $wpdf_adresse_connexion.'$|' . $wpdf_adresse_connexion . '/?\?action=rp&?|' . $wpdf_adresse_connexion.'/?\?loggedout=true$|' . $wpdf_adresse_connexion . '/?\?checkemail=confirm$|' . $wpdf_adresse_connexion.'/?\?checkemail=registered$|' . $wpdf_adresse_connexion . '/?\?action=lostpassword&?$|' . $wpdf_adresse_connexion . '/?\?action=lostpassword&error=expiredkey$|' . $wpdf_adresse_connexion . '/?\?action=lostpassword&error=invalidkey$|' . $wpdf_adresse_connexion . '/?\?action=resetpass$|' . $wpdf_adresse_connexion.'/?\?registration=disabled$|' . $wpdf_adresse_connexion . '/?\?action=register|' . $wpdf_adresse_connexion . '/?\?checkemail=registered$|' . $wpdf_adresse_connexion . '/?\?interim-login=1$|' . $wpdf_adresse_connexion . '/?\?redirect_to=|' . $wpdf_adresse_connexion . '\?action=lostpassword&error=expiredkey|' . $wpdf_adresse_connexion . '\?action=lostpassword&error=invalidkey|' . $wpdf_adresse_connexion . '\?registration=disabled|' . $wpdf_adresse_connexion . '/?\?action=logout&_wpnonce=#';
		
	if (preg_match($wpdf_patron, untrailingslashit( $_SERVER['REQUEST_URI'])) === 1 ) {
		error_reporting(E_ALL & ~E_NOTICE);
		require_once(ABSPATH . 'wp-login.php');
		exit();
	}	//	fin test si nouvelle url de connexion
}	//	fin fonction wpdf_redirige_login

//---------------------------------------------------------------------
//	rediriger les connexions ne venant pas de la nouvelle adresse
add_action( 'login_init', 'wpdf_refuse_connexion' );

function wpdf_refuse_connexion() {
	if ( strpos( $_SERVER['REQUEST_URI'], '/'.WPDF_ADRESSE_CONNEXION ) === false ) {
		wp_redirect( WPDF_ADRESSE_CONNEXION_REFUSEE );
		exit();
	}	// fin test si nouvelle adresse de connexion non trouvée
}	//	fin fonction wpdf_refuse_connexion


//---------------------------------------------------------------------
//	modifier l'adresse de connexion affichée sur le site (forumulaires, liens)
add_filter( 'site_url', 'wpdf_modifie_adresse_connexion', 10, 3 );
if (is_multisite()) add_filter( 'network_site_url', 'wpdf_modifie_adresse_connexion', 10, 3 );

function wpdf_modifie_adresse_connexion( $wpdf_aff_login_url, $wpdf_path, $wpdf_orig_scheme ) {

	if ( $wpdf_orig_scheme === 'login' || $wpdf_orig_scheme === 'login_post' ){
		$wpdf_aff_login_url = preg_replace( '/wp-login\.php/', WPDF_ADRESSE_CONNEXION, $wpdf_aff_login_url, 1 );
	}	//	fin test si scheme égal login ou login_post

	$wpdf_siteurl_patron = '#wp-login.php\?action=lostpassword&error=expiredkey$|wp-login.php\?action=lostpassword&error=invalidkey$|wp-login.php\?registration=disabled$#';

	if ( preg_match($wpdf_siteurl_patron, $wpdf_aff_login_url) === 1  )
		$wpdf_aff_login_url = preg_replace( '/wp-login\.php/', WPDF_ADRESSE_CONNEXION, $wpdf_aff_login_url, 1 );	
	return $wpdf_aff_login_url;
}	// fin fonction wpdf_modifie_adresse_connexion


// modifie l'adresse après demande de déconnexion ou de modification du mot de passe
add_filter ('wp_redirect', 'wpdf_redirect_mdpout', 10, 2);

function wpdf_redirect_mdpout ( $wpdf_location, $wpdf_status ) {
	$wpdf_redirect_mdpout = array (
		'wp-login.php?loggedout=true',
		'wp-login.php?checkemail=confirm',
		'wp-login.php?checkemail=registered'
	);
	if ( in_array( $wpdf_location, $wpdf_redirect_mdpout ) )
		$wpdf_location = preg_replace( '/wp-login\.php/', WPDF_ADRESSE_CONNEXION, $wpdf_location, 1 );
    return $wpdf_location;
}	// fin fonction wpdf_redirect_mdpout

//	modifie le message de bienvenue pour un nouveau site
add_filter ('update_welcome_email', 'wpdf_update_welcome_email', 10, 6);

function wpdf_update_welcome_email ( $wpdf_welcome_email, $wpdf_blog_id, $wpdf_user_id, $wpdf_password, $wpdf_title, $wpdf_meta) {
	$wpdf_welcome_email = preg_replace( '/wp-login\.php/', WPDF_ADRESSE_CONNEXION, $wpdf_welcome_email, 1 );
    return $wpdf_welcome_email;
}	// fin fonction wpdf_update_welcome_email

//-----------------------------------------------------------------------------------------------
//	renvoyer vers WPDF_ADRESSE_CONNEXION_REFUSEE si adresse = 'wp-login.php' ou 'login' 
add_filter( 'login_url', 'wpdf_filtre_adresse_login', 10, 3 );

function wpdf_filtre_adresse_login( $wpdf_login_url, $wpdf_redirect, $wpdf_force_reauth ) {
	$wpdf_logins = array(
		home_url( 'wp-login.php', 'relative' ),
		home_url( 'login', 'relative' ),
		network_site_url( 'login', 'relative' ),
	);
	if ( in_array( untrailingslashit( $_SERVER['REQUEST_URI'] ), $wpdf_logins ) ) { 
		wp_redirect( WPDF_ADRESSE_CONNEXION_REFUSEE );
		exit();
	}

	return $wpdf_login_url;
}	// fin fonction wpdf_filtre_adresse_login

//	renvoyer vers WPDF_ADRESSE_CONNEXION_REFUSEE si adresse alias d'administration
add_filter( 'admin_url', 'wpdf_filtre_adresse_admin', 10, 3 );

function wpdf_filtre_adresse_admin( $wpdf_login_url, $wpdf_redirect, $wpdf_force_reauth ) {
	if ( (function_exists('is_user_logged_in')) &&!( is_user_logged_in ()) ) {
		$wpdf_admins = array(
	home_url( 'wp-admin', 'relative' ),
			home_url( 'dashboard', 'relative' ),
			home_url( 'admin', 'relative' ),
			network_site_url( 'dashboard', 'relative' ),
			network_site_url( 'admin', 'relative' ),
		);
		if ( in_array( untrailingslashit( $_SERVER['REQUEST_URI'] ), $wpdf_admins ) ) {
			wp_redirect( WPDF_ADRESSE_CONNEXION_REFUSEE );
			exit();
		}
	}	//	fin test si utilisateur connecté
	return $wpdf_login_url;
}	// fin fonction wpdf_filtre_adresse_admin

?>

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 page

Fonctions 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 » :

Le fichier pluggable.php se trouve dans le répertoire wp-includes
Le fichier pluggable.php se trouve dans le répertoire wp-includes

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 ) :

Le code d'une fonction redéfinissable (pluggable) commence toujours par un test si la fonction a déjà été définie
Test si une fonction redéfinissable a déjà été définie

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

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.