« Cannot redeclare » : fonction ou classe déclarée deux fois sur WordPress

Fiche du décodeur d'erreurs, mise à jour le 12 octobre 2026

BloquantErreurs PHP
Le message affiché
Fatal error: Cannot redeclare mon_theme_setup() (previously declared in /home/monsite/public_html/wp-content/themes/mon-theme-enfant/functions.php:12)
Autres formulations du même message 3
  • Fatal error: Cannot redeclare function mon_theme_setup() (previously declared in /home/monsite/public_html/wp-content/themes/mon-theme-enfant/functions.php:12)
  • Fatal error: Cannot declare class Mobile_Detect, because the name is already in use
  • Fatal error: Cannot redeclare class Mobile_Detect (previously declared in /home/monsite/public_html/wp-content/themes/mon-theme/inc/Mobile_Detect.php:22)

PHP refuse de définir deux fois la même fonction ou la même classe. Pour une fonction, le message donne les deux emplacements : la première déclaration, après « previously declared in », puis le doublon. Il s’agit presque toujours d’un code copié deux fois, d’une extension présente en double ou d’une bibliothèque embarquée par deux extensions à la fois.

Pourquoi cette erreur apparaît

  • Un extrait de code a été collé deux fois, ou à la fois dans functions.php et dans une extension de snippets.
  • Le thème enfant reprend une fonction du thème parent sous le même nom.
  • Deux versions d’une même extension sont actives : version gratuite et version Pro, ou ancienne copie du dossier.
  • Deux extensions, ou une extension et le thème, embarquent la même bibliothèque PHP.
  • Un fichier est chargé deux fois avec include ou require au lieu de include_once ou require_once.

Comment corriger le problème

Comparer les deux chemins

Le chemin entre parenthèses, après « previously declared in », montre la première déclaration ; celui qui suit « in », à la fin, montre le doublon. Ce sont les deux fichiers à comparer : thème enfant et thème parent, deux extensions, ou un même fichier chargé deux fois.

Désactiver la copie en trop

Si les deux chemins mènent à deux versions d’une même extension (gratuite et Pro, ou un dossier terminé par -old), désactivez celle qui ne sert plus. Si l’administration ne s’ouvre pas, renommez son dossier par FTP.

Retirer le code en double

Pour un extrait présent deux fois dans functions.php, ou à la fois dans ce fichier et dans une extension de snippets, téléchargez une copie du fichier puis retirez l’une des deux versions. Dans un thème enfant, ne recopiez jamais le functions.php du parent : il est déjà chargé, le fichier enfant ne doit contenir que vos ajouts.

Protéger ou renommer vos fonctions

Entourez vos fonctions personnalisées d’un test function_exists() et vos classes d’un test class_exists(). Le thème enfant étant chargé avant le parent, ce test ne suffit pas si le parent déclare la même fonction sans protection : renommez alors la fonction du thème enfant, ainsi que ses appels.

if ( ! function_exists( 'mon_theme_setup' ) ) {
	function mon_theme_setup() {
		// votre code
	}
}

Bibliothèque partagée entre extensions

Quand la classe en double vient d’une bibliothèque (dossier lib ou vendor) embarquée par deux extensions, gardez la plus utile des deux et signalez le conflit à l’éditeur de l’autre. Modifier ses fichiers vous-même serait effacé à la mise à jour suivante.

Téléchargez une copie de chaque fichier avant d’y retirer du code, et ne modifiez pas le thème parent : vos changements disparaîtraient à sa prochaine mise à jour.

Le guide completErreur critique WordPress : la méthode pour sortir de l’écran blanc sans paniquer 💥

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