Fichier functions.php WordPress et thème enfant

function.php wordpress theme enfant

Lorsqu’on souhaite personnaliser un thème WordPress, la première chose à faire – et c’est la bonne pratique – c’est de décliner ce thème en « thème enfant ».
Je ne vais pas détailler ce point dans cet article, ce n’est pas l’objet.
Par contre dans la création d’un thème enfant il y a un cas particulier pour le fichier functions.php, souvent appelé « fichier functions.php WordPress ».

En effet, le fichier functions.php ne fonctionne pas de la même façon que les autres fichiers de template de WordPress.

Lorsqu’on on customise les fichiers classiques, « header.php », « footer.php », etc… On a l’habitude de dupliquer le fichier parent et d’adapter légèrement le code. Le plus souvent la partie html.
Mais pour le fichier functions.php : ce n’est pas pareil…

Pour les thèmes enfants, WordPress va charger les fichiers présents dans le dossier du thème enfant et IGNORER les fichiers identiques du thème parent.
Mais pour le fichier functions.php WordPress va agir différemment !
Il va charger du thème enfant ET charger ENSUITE le fichier functions.php du thème parent.
Il ne faut donc surtout pas « copier/coller » le fichier du thème parent mais repartir d’un fichier vide pour le thème enfant. Et dans ce dernier on déclarera uniquement les fonctions dont on a besoin.

Si vous ne faites pas cela et que vous avez 2 fichiers functions.php identiques : si votre thème est bien développé, ça peut passer. Je vous explique pourquoi après.
Mais dans la plupart des cas vous aurez un beau « Cannot redeclare function_name()… »
Pourquoi ? Et bien simplement parce que PHP ne peut pas déclarer 2 fois la même fonction.
Donc si votre « thémeur » est bon, il aura placé à chaque fois :

if ( ! function_exists('nom_de_la_fonction')) {
...
}

De ce fait, quand le functions.php du thème parent est chargé en second, s’il voit que la fonction a déjà été déclarée, il passe son chemin, sinon, il la créée.

Voilà l’astuce. Donc attention à ce fichier car si on ne fait pas attention on peut s’arracher les cheveux à comprendre pourquoi on a des erreurs ou des fonctions qui ne marchent pas.

8 commentairesLaisser un commentaire

  • Bonjour et merci pour ces précisions.
    Justement la plupart des thèmes premium ne disposent pas de « if ( ! function_exists(‘nom_de_la_fonction’)) { …  » c’est toujours la galère dès qu’on peut personnaliser un peu plus que la feuille de style.
    En effet souvent ce sont les fichiers php et js du parent qui sont appelés ! (a cause de ce #!!## de
    get_template_directory_uri … )
    Quelle est donc la meilleure méthode pour réécrire ces fonctions qui appellent les fichiers parents ?
    j’utilise ça :
    Function remove_la fonction + renommer la fonction + redéclarer avec get_stylesheet_directory ?
    En pensant à renommer l’appel de cette fonction partout ou elle existe ?

    Pensez vous que ce soit la meilleure méthode ? Merci

  • Bonjour Valérie,

    Malheureusement si le développeur n’a pas utilisé « if ( ! function_exists(‘nom_de_la_fonction’)) » : c’est foutu.
    Obligé de changer la fonction d’origine, soit en la renommant, soit en la modifiant directement dans le thème parent…

    Dans tous les cas c’est crade, et également à la prochaine mise à jour du thème : ca saute ! Et on recommence…

    Par contre, sur des thèmes premium bien côtés, sur Themeforest par exemple, en général les développeurs travaillent très bien.
    A l’inverse, le thème gratuit récupéré sur un site obscure… Évidemment ce n’est pas pareil…

  • Merci pour votre réponse. Je vais continuer avec ma méthode de redéclarer la fonction en la renommant.
    Je parlais pourtant bien de thèmes « premium » acheté 50$ sur Themeforest …

  • Bonsoir,

    Merci pour l’info….
    Et dans le cas où il s’agit juste de désactiver des fonctions qui ne servent pas?
    Mon thème a été acheté sur themeforest justement.

  • @helene je ne comprends pas bien la question.
    Si vous voulez désactiver des fonctions, vous pouvez le faire via le fichier functions.php. Mais il faut voir quoi exactement et comment.

  • Tout à fait.
    Par exemple si vous voulez supprimer un script qui se charge via un .js et un .css, comme fitvid par exemple, voilà ce que vous povuez mettre dans votre functions.php :

    wp_dequeue_script( 'id-de-mon-script' );
    wp_dequeue_style( 'id-de-mon-script' );

    Et pour trouver l’id du script en question vous cherchez la fonction inverse, wp_enqueue_script/style qui se trouvera dans le fichier functions.php de votre thème parent.

Vous avez aimé cet article ? Réagissez !

Votre email ne sera pas publié. Les champs requis sont marqués d'une astérisque *