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…
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..
À travers le thème de l'enfant functions.php fichier que nous pouvons traiter:
Donc, disons que nous avons cette structure de site web:
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
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');
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');
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
).
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);
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 ;-).
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);
À 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.
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.
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.
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