Comment modifier le comportement du thème parent dans le thème enfant

Quels sont thèmes pour enfants? Les thèmes enfants sont une fonctionnalité utile de WordPress qui permet aux développeurs de créer un nouveau modèle sans partir de zéro, mais en tirant parti de toutes les fonctionnalités déjà disponibles dans un thème existant..

Parfois cependant, le thème parent nous avons choisi pour notre site peut avoir certaines fonctionnalités dont nous n'avons pas besoin (ou nous devons personnaliser pour mieux répondre à nos besoins), par exemple des types de publication personnalisés avec un slug différent, des codes courts, des bibliothèques JavaScript, des tailles d'image que nous ne connaissons pas. t utiliser et ainsi de suite…


Personnaliser le thème de deux manières

Bien qu'il soit facile de réaliser ce que nous voulons en modifiant directement le thème, il est également vrai que chaque fois que le thème sera mis à jour, nous devrons effectuer à nouveau toutes les personnalisations. Cela peut être frustrant, alors il y a une autre option: nous pouvons créer un thème enfant et utiliser le > functions.php> fichier pour modifier le thème parent fonctionnalités. De cette manière, nous pouvons mettre à jour le thème parent chaque fois qu'une nouvelle version est publiée sans perdre nos personnalisations..

Avant d'entrer dans les détails plus spécifiques, une brève note sur l'apparence du thème: nous pouvons modifier les couleurs, les arrière-plans, la typographie et la mise en page à l'aide de la style.css fichier du thème enfant en important le parent style.css et en remplaçant les styles que nous voulons changer.

Pour plus de contrôle sur la mise en page, nous pouvons également suivre la façon dont Abbas Suterwala suggère dans son post et cloner les fichiers de modèle personnalisé parent dans notre thème enfant:

Ensuite, le thème de l'enfant peut éventuellement remplacer d'autres fichiers de modèle, tels que author.php, catégorie.php, etc. Le framework WordPress cherche d’abord un fichier de modèle dans le répertoire du thème de l’enfant, puis, s’il est introuvable, le récupère dans le répertoire parent..


Que pouvons-nous modifier?

À travers le thème de l'enfant functions.php fichier que nous pouvons traiter:

  • Caractéristiques thématiques
  • Types de poteaux personnalisés et taxonomies
  • Menus et barres latérales
  • Widgets
  • Codes courts
  • Tailles d'image supplémentaires
  • Métaboxes
  • JavaScript et CSS
  • Actions et filtres de thème parent

Donc, disons que nous avons cette structure de site web:

  • htdocs OU www
    • wp-content
      • des thèmes
        • foo-theme (répertoire du parent thème ne sera pas être modifié)
          • functions.php
          • header.php
          • style.css
          • autres fichiers modèles…
        • foo-theme-child (répertoire de nos enfant thème)
          • functions.php (le fichier que nous allons utiliser pour personnaliser le thème parent)
          • header.php (remplace header.php pour le thème parent)
          • style.css (il s’agit d’un fichier obligatoire dans un thème enfant et doit être nommé style.css)

Commençons par: créer un vide functions.php déposer dans le / wp-content / themes / foo-theme-child / annuaire.

Pour la plupart, nous utiliserons un générique wp_tuts_remove_features () fonction, accrochée au WordPress after_setup_theme action. Nous avons également mis dix comme troisième paramètre (priorité), nous sommes donc sûrs que la fonction est déclenchée avant celle du parent.

 add_action ('after_setup_theme', 'remove_parent_theme_features', 10); function remove_parent_theme_features () // notre code ici

1. Supprimer les fonctionnalités du thème

Certains thèmes parents ajoutent des fonctionnalités à WordPress via le add_theme_support une fonction.

Les fonctionnalités disponibles sont:

  • post-formats
  • post-vignettes
  • fond personnalisé
  • en-tête personnalisé
  • liens d'alimentation automatique

Donc, pour les supprimer, nous pouvons modifier le remove_parent_theme_features () fonctionner dans le functions.php fichier.

 function remove_parent_theme_features () remove_theme_support ('post-formats'); remove_theme_support ('post-vignettes'); remove_theme_support ('custom-background'); remove_theme_support ('custom-header'); remove_theme_support ('automatic-feed-links'); 

2. Supprimer les types de messages personnalisés et les taxonomies

La suppression des types de publication personnalisés et des taxonomies personnalisées est simple: si le parent functions.php le fichier ajoute un Film type de message personnalisé, à travers un parent_movie_add_post_type () une fonction:

 // PARENT functions.php add_action ('after_setup_theme', 'parent_movie_add_post_type'); fonction parent_movie_add_post_type () $ parent_args = array (// autres arguments… 'rewrite' => array ('slug' => 'movie'), 'supporte' => array ('title', 'editor', 'author' , 'extrait')); register_post_type ('movie', $ parent_args); 

… Nous pouvons le personnaliser grâce à notre enfant functions.php fichier:

 // CHILD functions.php function remove_parent_theme_features () // remove Type de message personnalisé par film remove_action ('init', 'parent_movie_add_post_type'); / * alternativement, nous pouvons ajouter notre type de publication personnalisé pour écraser uniquement certains aspects de la fonction parent * / add_action ('init', 'child_movie_post_type');  function child_movie_post_type () $ child_args = array (// autres arguments… // change le slug personnalisé Post 'rewrite' => array ('slug' => 'child-movie'), // supprime les extraits et ajoute un post post ' prend en charge '=> array (' title ',' editor ',' author ',' thumbnail ')); register_post_type ('movie', $ child_args); 

Nous pouvons également supprimer uniquement certaines fonctionnalités sans annuler l'enregistrement du type de publication. Par exemple, si vous souhaitez remplacer le champ extrait par une image de publication, vous pouvez modifier la fonction de la manière suivante:

 function remove_parent_theme_features () add_action ('init', 'wp_tuts_remove_post_feature');  function wp_tuts_remove_post_feature () // supprime un extrait remove_post_type_support ('movie', 'extrait'); // add post thumbs add_post_type_support ('movie', 'thumbnail'); 

Vous trouverez une liste complète des fonctionnalités amovibles sous remove_post_type_support dans le codex WordPress.

Semblable aux types de publication personnalisés, vous pouvez supprimer une taxonomie personnalisée ajoutée dans le thème parent par parent_taxonomy () fonction, de cette façon:

 function wp_tuts_after_setup_theme () remove_action ('init', 'parent_taxonomy'); 

3. Supprimer les menus

Nous pouvons supprimer le menu d'un thème parent via le menu unregister_nav_menu () une fonction. Cette fonction prend un paramètre, l'identifiant de localisation de menu slug utilisé dans register_nav_menu () une fonction.

Si le thème parent enregistre une Menu d'en-tête:

 // PARENT functions.php add_action ('after_setup_theme', 'register_my_menu'); function register_my_menu () register_nav_menu ('header-menu', __ (menu d'en-tête ')); 

Nous pouvons l'enlever de cette façon:

 // CHILD functions.php function remove_parent_theme_features () unregister_nav_menu ('header-menu'); 

Pour identifier les menus enregistrés, nous pouvons rechercher le code de thème parent register_nav_menu () appels. Le premier argument de la fonction représente l’ID de menu que nous pouvons utiliser pour annuler l’enregistrement (dans ce cas, menu d'en-tête).


4. Supprimer les widgets et les barres latérales

WordPress est livré avec des widgets par défaut que nous pouvons désactiver. De plus, notre thème parent peut ajouter ses propres widgets, ce qui permet de rechercher dans les fichiers de thème la recherche de l'endroit où ils sont déclarés et de prendre note de leur nom. Ils sont généralement déclarés dans une classe PHP qui étend la WP_Widget classe:

 // Classe de thème PARENT ParentWidgetName étend WP_Widget // code de widget

Donc, pour annuler l'enregistrement du widget, nous utilisons le nom de la classe ParentWidgetName:

 add_action ('widgets_init', 'wp_tuts_parent_unregister_widgets', 10); function wp_tuts_parent_unregister_widgets () // remove (some) Widgets par défaut de WordPress unregister_widget ('WP_Widget_Pages'); unregister_widget ('WP_Widget_Calendar'); // supprime le widget parent enregistré unregister_widget ('ParentWidgetName'); // enregistre un widget personnalisé (si nécessaire) register_widget ('MyCustomWidget');  // n'oubliez pas d'ajouter la classe de classe Widget MyCustomWidget étend WP_Widget // code de widget personnalisé

Pour les barres latérales, l'action est similaire:

 add_action ('widgets_init', 'wp_tuts_parent_unregister_sidebars', 10); function wp_tuts_parent_unregister_sidebars () // supprime une barre latérale enregistrée par le thème parent unregister_sidebar ('first-footer-widget-area'); 

Pour identifier les barres latérales enregistrées, nous pouvons rechercher le code du thème parent register_sidebar () appels.

Tout ce dont nous avons besoin est de prendre note de l'ID de la barre latérale:

 // PARENT functions.php $ args = array ('id' => 'premier-footer-widget-area', // autres arguments…); register_sidebar ($ args);

5. Supprimer les codes courts

Remplacer ou supprimer des codes courts est facile, il suffit de modifier notre fonction de la manière suivante:

 function remove_parent_theme_features () // supprime le shortcode parent [gmap] remove_shortcode ('gmap'); // ajoute notre shortcode [gmap] add_shortcode ('gmap', 'child_shortcode_gmap');  function child_shortcode_gmap ($ atts) // crée notre shortcode qui écrase le parent

Pour identifier les codes courts enregistrés, nous pouvons rechercher le code de thème parent add_shortcode () appels. Le premier paramètre est celui que nous recherchons ;-).


6. Supprimer les tailles d'image supplémentaires

Si le thème parent ajoute de nouvelles tailles d'image que nous n'utilisons pas dans notre thème enfant, nous pouvons rechercher le code du thème parent. add_image_size () appels. Dans ce cas ils sont: custom_size_parent_1 et custom_size_parent_2. Nous les réinitialisons de cette façon:

 add_filter ('intermediate_image_sizes_advanced', 'remove_parent_image_sizes'); function remove_parent_image_sizes ($ tailles) non défini ($ tailles ['custom_size_parent_1']); unset ($ tailles ['custom_size_parent_2']); retourne des tailles $; 

Ceci est utile car chaque fois que l'utilisateur télécharge une image, WordPress ne créera pas de tailles d'image supplémentaires que nous n'utilisons pas..

Pour créer des tailles d'image personnalisées, nous pouvons ajouter ceci à notre enfant. functions.php fichier:

 if (function_exists ('add_image_size')) // 400 pixels de largeur et hauteur illimitée add_image_size ('custom_size_child_1', 400, 9999); // 320 pixels de large et 240 px de hauteur, recadré add_image_size ('custom_size_child_2', 320, 240, true); 

7. Supprimer les métaboxes

À travers le remove_meta_box () fonction nous pouvons supprimer les métaboxes par défaut WordPress et thème parent.

Une liste des métaboxes par défaut de WordPress est disponible sous remove_meta_box () dans le codex WordPress. La fonction a trois arguments: l'ID de metabox, la page à partir de laquelle elle sera supprimée, le contexte d'édition (Ordinaire, Avancée, côté).

Si le thème parent ajoute des métaboxes dans l'écran de post-édition, nous pouvons les désactiver de cette manière:

 add_action ('admin_menu', 'wp_tuts_remove_metaboxes', 99); function wp_tuts_remove_metaboxes () // supprime le WP par défaut Trackback Metabox de la page d'édition de posts remove_meta_box ('trackbacksdiv', 'post', 'normal'); // supprime un thème parent Metabox 'parent_post_foo_metabox' remove_meta_box ('parent_post_foo_metabox', 'post', 'normal'); 

Nous pouvons identifier les métaboxes parents en recherchant le code de thème parent add_meta_box ou add_meta_boxes () appels.

L’identifiant de la metabox à supprimer est le premier argument de add_meta_box () une fonction.


8. Supprimer les scripts Java et les feuilles de style CSS

Si le thème parent ajoute des styles JavaScript et CSS dont nous n'avons pas besoin:

 // PARENT functions.php add_action ('wp_print_scripts', 'parent_scripts'); add_action ('wp_print_styles', 'parent_styles'); function parent_scripts () wp_enqueue_script ('fancybox-parent-js', get_stylesheet_directory_uri (). '/fancybox/jquery.fancybox.pack.js');  function parent_styles () wp_enqueue_style ('fancybox-parent-css', get_stylesheet_directory_uri (). '/fancybox/jquery.fancybox.css'); 

Nous pouvons les supprimer de cette manière:

 // CHILD functions.php add_action ('wp_print_scripts', 'child_overwrite_scripts', 100); add_action ('wp_print_styles', 'child_overwrite_styles', 100); function child_overwrite_scripts () wp_deregister_script ('fancybox-parent-js');  function child_overwrite_styles () wp_deregister_style ('fancybox-parent-css'); 

Pour identifier les styles JavaScripts et CSS enregistrés, nous pouvons rechercher le code de thème parent wp_enqueue_script () et wp_enqueue_style () appels.

Le premier argument de la fonction est ce que nous pouvons utiliser dans le wp_deregister_script () ou wp_deregister_style () les fonctions.


9. Supprimer les actions et les filtres du thème parent

Certains thèmes, tels que Thematic, fournissent plusieurs crochets pour modifier le comportement du thème sans modifier les fichiers de thème. Dans ce cas, Thematic fournit une theme_header action qui charge d'autres actions:

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

Nous n’examinerons pas en détail le rôle de ces fonctions. Certaines d’entre elles impriment probablement certaines informations dans l’en-tête du blog: nom, description, etc. Dans ce cas, nous pouvons désactiver le thematic_blogdescription () fonctionner de cette manière:

 // Décroche les fonctions thématiques par défaut function unhook_thematic_functions () // on met le numéro de position de la fonction d'origine (5) // pour des raisons de priorité remove_action ('thematic_header', 'thematic_blogdescription', 5);  add_action ('init', 'unhook_thematic_functions');

Dans ces cas, il peut être difficile de comprendre la structure du thème parent et son fonctionnement. Mon conseil est de choisir un thème parent livré avec une documentation détaillée, un bon forum de support et des hameçons disponibles dans tout le code..

Cela nous fait sûrement perdre moins de temps de développement et facilite la personnalisation du thème de l'enfant.


Références

  • Notions de base sur les thèmes pour enfants et la création de thèmes pour enfants dans WordPress
  • Documentation WordPress Codex
    • after_setup_theme
    • remove_action
    • add_theme_support
    • register_post_type
    • add_post_type_support
    • remove_post_type_support
    • register_nav_menu
    • unregister_nav_menu
    • register_widget
    • unregister_widget
    • register_sidebar
    • unregister_sidebar
    • add_shortcode
    • remove_shortcode
    • add_image_size
    • add_meta_box
    • remove_meta_box
    • wp_deregister_script
    • wp_deregister_style
  • Une collection de thèmes parents WordPress
  • Cadre thématique