Modifier les fonctions du thème de base sous WordPress 7

Vous êtes devenu un expert en création de thème enfant pour WordPress depuis que vous avez lu notre article sur les thèmes enfants WP, mais vous êtes bloqué à cause des fonctions du thème parent ? Ça tombe vraiment bien, nous allons aborder le sujet de ce qui pourrait être l’équivalent de la surcharge d’une fonction PHP, bien qu’en réalité il s’agisse plus d’un remplacement de fonction que d’une surcharge (pour les puristes), car conceptuellement parlant votre thème parent WordPress n’est pas codé de manière orientée objet, ne comporte pas de classe et donc n’a aucune notion d’héritage.

Mais plutôt que de vous perdre dans de la théorie, prenons un exemple simple qui pourrait vous concerner :

Vous avez trouvé le thème parfait esthétiquement, vous avez compris le concept de création d’un thème enfant pour pouvoir apporter vos modifications en toute sérénité mais vous rencontrez un souci avec le thème parent => une partie du thème que vous souhaitez modifier est généré par une fonction du thème parent. Pas question donc de la modifier car en cas de mise à jour votre modification serait annulée, mais alors que faire ?

Hook WordPress ou comment modifier une fonction par WhatizSEO

Comment modifier une fonction du thème parent de WordPress ?

La première des choses à comprendre, c’est le fonctionnement de WordPress, car il est décisif sur la manière de procéder pour faire « bien ». Tout d’abord, vous avez du comprendre comment fonctionnent les thèmes parents/enfants, reste à comprendre la manière dont on peut venir greffer des fonctions au core de WordPress de manière propre (donc sans passer par les include et require), c’est ce que l’on appelle des hook et c’est commun à tous les CMS, je pense notamment à Prestashop ou à Drupal qui fait ça vraiment très bien.

Chez WordPress, l’outil expert du blogging, c’est la même chose, en un peu moins poussé, mais le concept de hook est bien présent et nous allons l’utiliser pour arriver à nos fins.

Comment fonctionnent les fonctions WordPress ?

Ou comment faire un titre super lourd, au choix.

Vous connaissez le fichier « functions.php » puisque vous l’avez créé pour faire votre thème enfant. Et bien ce fichier existe dans tous les dossiers de thèmes et donc dans celui de votre thème parent, et il contient certainement pas mal de fonctions qui font que le thème.. eh bien.. fonctionne ! Il est également possible, lorsque c’est bien codé, qu’il y ait un dossier « inc » ou « includes » ou autre dans lequel se trouvent des fichiers notamment de templates mais également de fonctions, et c’est propre à chaque thème donc à vous de fouiller un peu.

Pour l’exemple, prenons uniquement le cas du fichier « functions.php » contenu dans le dossier du thème parent et dans lequel nous avons une fonction dont nous souhaitons modifier tout ou partie du contenu, appelons là « fonction_a_modifier ». Cette fonction, pour être appelée par WordPress, doit être incluse via le fameux système de hook en utilisant une fonction native de WP appelée « add_action », qui comme son nom l’indique permet d’ajouter une action (ils ne pouvaient guère faire plus simple). Cela donne donc en bon PHP :

add_action(‘save_post’, ‘fonction_a_modifier’);

  • Le premier argument de la fonction, c’est le tag, c’est à dire le hook sur lequel votre fonction doit venir se greffer, dans cet exemple, c’est au moment de l’enregistrement d’un article.
  • Le second argument, c’est le nom de la fonction à greffer.

Il existe 2 arguments supplémentaires (la priorité et la possibilité d’accepter ou non les arguments) qui ont peu d’intérêt et sont optionnels. Vous trouverez toutes les infos sur la fonction « add_action » directement sur le site WordPress pour développeurs https://developer.wordpress.org/reference/functions/add_action/

Et pour la liste des hooks sur lesquels vous pouvez vous greffer, il suffit d’aller lire l’API sur le codex WP https://codex.wordpress.org/Plugin_API/Action_Reference

Comment gérer le remplacement ou l’écrasement d’une fonction WordPress ?

Nous avons vu que la fonction native de WordPress « add_action » permettait d’intégrer une fonction à un hook, mais ce dont nous avons besoin pour remplacer une fonction, c’est d’un peu de logique et d’une autre fonction native.

La partie logique

PHP ne permet pas de créer une fonction si une autre du même nom existe déjà, donc si dans le fichier « functions.php » de votre thème enfant vous créez la fonction « ma_fonction » qui est déjà présente dans le fichier « functions.php » du thème parent, cela va générer une erreur. Donc écraser la fonction pour en modifier le contenu n’est pas possible.

Créer votre fonction et l’appeler (enfin l’accrocher, puisqu’il s’agit d’un hook) va fonctionner mais vous risquer d’avoir un conflit, et de toute façon c’est le thème parent qui a le dessus sur le thème enfant (ne me demandez pas pourquoi, je ne trouve pas ça logique) donc vos modifications seraient écrasées par la fonction du thème parent et votre fonction créée au niveau du thème enfant n’aurait aucun intérêt.

Logiquement, il faudrait donc se débarrasser de la fonction du thème parent mais sans la supprimer de son fichier d’origine, sinon il faudrait répéter l’opération à chaque mise à jour du thème. Nous allons donc la décrocher pour la rendre inopérante.

La partie technique

Dans votre fichier « functions.php », ou ailleurs si vous avez opté pour du codage propre, vous allez créer votre fonction que vous appelez comme vous voulez (donnez lui un nom qui explique ce qu’elle fait, quand vous aurez 200 fonctions ce sera plus pratique), ensuite, avant de faire votre « add_action », vous allez utiliser une nouvelle fonction native de WordPress :

remove_action

Bon vous êtes bilingue, vous avez compris que ça permettait de retirer une action d’un hook 🙂 Cette fonction s’utilise de la même manière que sa soeur, il lui faut à minima 2 arguments :

  1. Le hook sur lequel vous souhaitez dé-greffer la fonction, prenez le même que celui utilisé pour greffer la fonction (vous le trouverez en argument de la fonction « add_action » sous la fonction dans le thème parent).
  2. Le nom de la fonction à dé-greffer.

Et pour tout savoir sur la fonction « remove_action », il suffit de lire le site pour développeurs de WordPress https://developer.wordpress.org/reference/functions/remove_action/

Donc, en reprenant l’exemple initial, voici le contenu du fichier « functions.php » du thème parent :

function fonction_a_modifier() {
// Contenu de la fonction à modifier
}
add_action(‘save_post’, ‘fonction_a_modifier’); <= Ce que nous avons déjà vu plus haut

Et voici ce que vous devez avoir dans le fichier « functions.php » de votre thème enfant :

function fonction_de_remplacement() {
// Contenu de la fonction de remplacement
}
remove_action(‘save_post’, ‘fonction_a_modifier’); <= Ici on décroche la fonction du thème parent
add_action(‘save_post’, ‘fonction_de_remplacement’); <= Ici on accroche la fonction du thème enfant, on utilise le même hook que pour la fonction du thème parent (ce n’est pas obligatoire mais plus pratique)

 

Voilà, à présent vous êtes un crack de la gestion des thèmes enfants pour WordPress que vous pouvez modifier à votre guise tout en conservant la possibilité de mettre à jour les thèmes parents.

N’hésitez pas à posez vos questions ou dire ce que vous en pensez en utilisant les commentaires en dessous.

A propos de Tony (33 Posts)

Développeur Web et consultant SEO, je vous invite à venir échanger et partager sur ce vaste sujet. Je vous propose également mes services en référencement naturel, afin d'améliorer la visibilité de votre site Internet.


7 thoughts on “Modifier les fonctions du thème de base sous WordPress

  1. Reply Mederic de MedProd Sep 3,2017 10 h 49 min

    super merci ! ça marche impeccable

  2. Reply sexyseo Sep 3,2017 15 h 22 min

    C’est excactement ce que je cherché à faire mais j’arrivé pas à trouvé
    merci mec mais il est super long ton article lol

  3. Reply Belgarion Sep 3,2017 19 h 02 min

    tu gères tony !

  4. Reply Eric Sep 3,2017 22 h 37 min

    ça ne fonctionne pas pour moi, j’ai fait toute la manip pour virer les crédits du footer mais je me retrouve avec les 2, impossible de virer celui du theme principal

  5. Reply le lion Sep 4,2017 9 h 37 min

    pour moi ça fonctionne

Leave a Reply