PHP, le langage qui fait tourner WordPress, a définitivement supprimé certaines fonctions anciennes : create_function(), each(), money_format() et get_magic_quotes_gpc() avec PHP 8.0, et dès PHP 7.0 mysql_connect(), mysql_query(), ereg() ou split(). Quand une extension ou un thème appelle encore l’une d’elles, PHP ne la trouve plus et la page s’arrête net.
Pourquoi cette erreur apparaît
- Une extension ou un thème qui n’est plus mis à jour depuis des années utilise encore une fonction supprimée.
- L’hébergeur a fait passer le site à PHP 8, ou la version a été changée dans l’espace client, sans test de compatibilité préalable.
- Un extrait de code ajouté dans functions.php ou dans une extension maison a été écrit au temps de PHP 5.
- Un script annexe interroge directement la base avec les anciennes fonctions mysql_ : compteur de visites, export, vieux module de paiement.
Comment corriger le problème
Noter la fonction et le dossier en cause
Le nom placé après « Call to undefined function » désigne la fonction disparue, et le chemin qui suit « in » le fichier qui l’appelle. Un dossier wp-content/plugins/nom-de-l-extension ou wp-content/themes/nom-du-theme vous indique tout de suite le responsable. Si le site affiche seulement « Il y a eu une erreur critique », cherchez ce message dans l’e-mail que WordPress envoie à l’adresse de l’administrateur.
Mettre à jour ou mettre de côté le coupable
Si une mise à jour de l’extension ou du thème existe, installez-la : c’est souvent elle qui corrige l’appel. Si l’administration ne s’ouvre plus, renommez par FTP, ou depuis le gestionnaire de fichiers de l’hébergeur, le dossier de l’extension (vieux-carrousel devient vieux-carrousel-off). Pour un thème renommé, WordPress bascule sur un thème par défaut, à condition qu’il soit installé.
Remplacer une extension abandonnée
Sur la fiche de l’extension dans le répertoire WordPress.org, regardez la date de dernière mise à jour et la version de PHP testée. Une extension figée depuis des années ne sera plus corrigée : choisissez une alternative maintenue qui rend le même service, essayez-la si possible sur une copie du site, puis désinstallez l’ancienne une fois ses réglages repris.
Revenir provisoirement à l’ancienne version de PHP
Pour create_function(), each(), money_format() ou get_magic_quotes_gpc(), repasser le site en PHP 7.4 depuis l’espace client de l’hébergement le remet en ligne le temps de trouver une solution. Ce n’est qu’un dépannage : PHP 7.4 ne reçoit plus de correctifs de sécurité. Pour mysql_connect(), ereg() ou split(), il faudrait PHP 5, une version abandonnée et dangereuse : seule une correction du code règle le problème.
Réécrire l’appel avec son équivalent actuel
Chaque fonction retirée a un remplaçant : une fonction anonyme pour create_function(), une boucle foreach pour each(), NumberFormatter ou number_format() pour money_format(), preg_match() pour ereg(), explode() ou preg_split() pour split(), et l’objet $wpdb de WordPress pour les requêtes mysql_. get_magic_quotes_gpc() renvoyait toujours false depuis PHP 5.4 : le test peut simplement disparaître. Faites ces corrections dans un thème enfant ou une extension maison, jamais dans une extension tierce, que sa prochaine mise à jour écraserait.
// Avant : $double = create_function( '$n', 'return $n * 2;' );
$double = function ( $n ) {
return $n * 2;
};
// Avant : while ( list( $cle, $valeur ) = each( $tableau ) ) {
foreach ( $tableau as $cle => $valeur ) {
// ...
}
Sauvegardez les fichiers et la base avant de remplacer une extension ou de toucher à son code, et notez la version de PHP d’origine pour pouvoir y revenir.
Un autre message d'erreur ? Collez-le dans le décodeur : il le reconnaît et vous oriente vers la bonne fiche.
Ouvrir le décodeur