WordPress : comment modifier le comportement d'un thème parent depuis un thème enfant

Les thèmes enfants sont une des caractéristiques de  WordPress qui permettent aux développeurs de créer des thèmes sans devoir repartir de zéro à chaque nouveau développement d'un site web.

Les thèmes enfants héritent en effet des fonctions implémentées dans le thème parent.

Cependant, dans certains cas certaines des fonctionnalités du thème parent sont inutiles ou ne correspondent pas aux besoins (par exemple pour les types d'articles personnalisés, les shortcodes, les tailles d'images, etc.)

Bien qu'il soit possible de modifier directement le thème parent  cela n'est pas la solution la plus judicieuse qui soit. A chaque mise à jour du thème parent il faudra reproduire les modifications ! Le mieux est donc d'utiliser le fichier functions.php du thème enfant pour modifier le comportement du thème parent.

Dans un thème enfant on peut tout modifier : feuille de styles, fonctions, y compris les différents modèles (single.php par exemple), etc.

Ce que l'on peut modifier depuis le thème enfant WordPress

Par le biais du fichier functions.php du thème enfant on peut gérer :

  • Les fonctionnalités du thème
  • Les types d'articles personnalisés et les taxonomies
  • Les menus et les barres latérales
  • Les widgets
  • Les shortcodes
  • De nouvelles tailles d'images
  • Les métaboxes
  • JavaScript and CSS
  • Les actions et les filtres du thème parent

Partons du principe que notre site web est structuré de la manière suivante :

  • htdocs ou www
    • wp-content
      • themes
      • foo-theme (dossier du thème parent)
        • functions.php
        • header.php
        • style.css
        • autres modèles (single.php, author.php, etc.)
      • foo-theme-child (dossier du thème enfant)
        • functions.php (fichier qui sera utilisé pour modifier le comportement du thème parent)
        • header.php (surcharge l'entête du thème parent)
        • style.css (ce fichier est obligatoire dans le dossier du thème enfant)
        • si nécessaire, autres modèles (single.php, author.php, etc.)

Commençons par créer un fichier functions.php dans le dossier /wp-content/themes/foo-theme-child/

Pour l'essentiel nous allons utiliser une fonction générique wp_acs_remove_features() que nous allons accrocher à l'action after_setup_theme  de WordPress. En passant  la priorité de l'action à 10 nous nous assurons que celle-ci sera exécutée avant celle du thème parent.

 Supprimer les fonctionnalités du thème parent

Certains thèmes de WordPress ajoutent des fonctionnalités par le biais de la fonction add_theme_support.

Ces fonctionnalités disponibles sont les suivantes :

  • post-formats
  • post-thumbnails
  • custom-background
  • custom-header
  • automatic-feed-links

Pour les supprimer il suffit de modifier notre fonction wp_acs_remove_features() comme suit :

 Supprimer les types d'articles personnalisés et les taxonomies

Supprimer les types articles et taxonomies personnalisés est simple. Si le fichier functions.php du thème parent implémente par exemple le type d'articles "movie"  par le biais d'une fonction parent_movie_add_post_type() :

il suffit dans le fichier functions.php du thème enfant de procéder de la manière suivante pour personnaliser ce type d'article :

Nous pouvons aussi modifier seulement certains aspects du type d'articles personnalisés (par exemple si nous voulons remplacer l'extrait par une vignette) :

De la même manière il est possible de supprimer une taxonomie personnalisée du thème parent :

 Supprimer les menus

Avec la fonction unregister_nav_menu() il est possible de supprimer un menu défini dans le thème parent. Cette fonction prend en paramètre l'identifiant du menu défini par la fonction register_nav_menu().

Par exemple, si le thème parent définit un menu "header" :

Nous pouvons le supprimer de cette façon :

 Supprimer les widgets et les barres latérales

Par défaut WordPress propose des widgets que nous pouvons désactiver. Un thème parent peut lui aussi ajouter ses propres widgets. Généralement ils sont déclarés dans une classe PHP qui étend la classe WP_Widget :

Pour supprimer ce widget nous utilisons le nom de la classe ParentWidgetName :

Pour les barres latérales le procédé est similaire :

 Supprimer les shortcodes

Modifier ou supprimer les shortcodes est facile :

Pour identifier les shortcodes créés par le thème parent il suffira de rechercher les appels à la fonction add_shortcode() dans le fichier functions.php du thème parent.

Suppression des tailles d'images

Si le thème parent crée de nouvelles tailles d'images dont le thème enfant n'a pas besoin il faut chercher, dans le fichier functions.php du thème parent, les appels à la fonction add_image_size()  (par exemple nous pouvons trouver les tailles custom_size_parent_1 et custom_size_parent_2).

 Suppression des métaboxes

Si le thème parent ajoute des métaboxes dans les écrans d'édition des articles, pages, etc. il suffit de procéder comme ceci :

 Suppression des scripts et du CSS du thème parent

Si le thème parent implémente des scripts et des styles donc le thème enfant n'a pas besoin :

Nous pouvons les supprimer de cette manière :

 Suppression des actions et des filtres

Certains thèmes, comme Thematic, fournissent des crochets qui peuvent être utilisés pour modifier le comportement du thème sans altérer les fichiers du thème. Thematic, par exemple, fournit une action thematic_header qui charge d'autres actions :

  • thematic_brandingopen()
  • thematic_blogtitle()
  • thematic_blogdescription()
  • thematic_brandingclose()
  • thematic_access()

Pour désactiver la fonction thematic_brandingclose nous pouvons effectuer ceci :