{"id":736,"date":"2019-04-22T12:53:14","date_gmt":"2019-04-22T10:53:14","guid":{"rendered":"https:\/\/geekcommunicant.com\/blog\/?p=736"},"modified":"2019-04-23T16:24:24","modified_gmt":"2019-04-23T14:24:24","slug":"theme-enfant-wordpress","status":"publish","type":"post","link":"https:\/\/geekcommunicant.com\/blog\/2019\/04\/22\/theme-enfant-wordpress\/","title":{"rendered":"Cr\u00e9er un th\u00e8me enfant pour WordPress"},"content":{"rendered":"\n<p>Un th\u00e8me enfant est un th\u00e8me reprenant toutes les fonctionnalit\u00e9s d&rsquo;un th\u00e8me existant, qu&rsquo;on appelera \u00ab\u00a0th\u00e8me parent\u00a0\u00bb.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Pourquoi cr\u00e9er un th\u00e8me enfant ?<\/h2>\n\n\n\n<p>Les th\u00e8mes WordPress disponibles offrent d\u00e9j\u00e0 un large choix d&rsquo;options pour les personnaliser. Mais, par exemple, disons que vous voulez modifier la couleur d&rsquo;un ou plusieurs \u00e9l\u00e9ments, ou encore, rajouter une web font.<\/p>\n\n\n\n<p>Afin d&rsquo;effectuer ces modifications, le premier r\u00e9flexe est de modifier le fichier <code>style.css<\/code> du th\u00e8me. Mais cette solution pr\u00e9sente un probl\u00e8me, toute mise \u00e0 jour du th\u00e8me modifi\u00e9 \u00e9crasera nos ajustements&#8230; On pourrait se dire qu&rsquo;il n&rsquo;y a qu&rsquo;\u00e0 ne pas faire cette mise \u00e0 jour. Mais l\u00e0 encore, c&rsquo;est un soucis, car certains th\u00e8mes complexes peuvent pr\u00e9senter des failles de s\u00e9curit\u00e9.<\/p>\n\n\n\n<p>En utilisant un th\u00e8me enfant, on est donc assur\u00e9 de disposer de la derni\u00e8re version de notre th\u00e8me, tout en gardant nos propres modifications.<\/p>\n\n\n\n<!--more-->\n\n\n\n<h2 class=\"wp-block-heading\">Comment cr\u00e9er un th\u00e8me enfant ?<\/h2>\n\n\n\n<p>Les fichiers d&rsquo;un th\u00e8me enfant se placent au m\u00eame endroit qu&rsquo;un th\u00e8me \u00ab\u00a0normal\u00a0\u00bb, c&rsquo;est-\u00e0-dire dans le dossier <code>wp-content\/themes<\/code> de votre r\u00e9pertoire d&rsquo;installation de WordPress.<\/p>\n\n\n\n<p>Un th\u00e8me enfant doit contenir au moins deux fichiers : <code>style.css<\/code> et <code>functions.php<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Fichier style.css<\/h3>\n\n\n\n<p>Le fichier <code>style.css<\/code> doit commencer par un ent\u00eate (plac\u00e9 dans un commentaire) pr\u00e9cisant diff\u00e9rentes informations comme le nom du th\u00e8me, son auteur\u2026 et surtout le th\u00e8me parent.Plus de d\u00e9tail sur le <a href=\"https:\/\/codex.wordpress.org\/Theme_Development#Theme_Stylesheet\">Codex WordPress<\/a>.<\/p>\n\n\n\n<p>Voici l&rsquo;ent\u00eate (avec des commentaires ajout\u00e9s) utlis\u00e9 dans mon th\u00e8me actuel, qui est un th\u00e8me enfant de \u00ab\u00a0Twenty Eleven\u00a0\u00bb : <\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: css; title: ; notranslate\" title=\"\">\n\/*\nTheme Name:     GeekEleven    &lt;- nom du th\u00e8me\nDescription:    Th\u00e8me WordPress proche de celui de mon site.    &lt;- description qui sera affich\u00e9e dans le d\u00e9tail du th\u00e8me\nAuthor:         GeekCommunicant    &lt;- nom de l&#039;auteur\nAuthor URI:     https:\/\/geekcommunicant.com\/    &lt;- adresse du site de l&#039;auteur\nTemplate:       twentyeleven    &lt;- nom du dossier contenant les fichiers du th\u00e8me parent\nVersion:\t1.0    &lt;- num\u00e9ro de version\n*\/\n<\/pre><\/div>\n\n\n<p>Apr\u00e8s cet ent\u00eate vous pouvez alors placer vos styles pour personnaliser encore plus votre th\u00e8me.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Fichier functions.php<\/h3>\n\n\n\n<p>C&rsquo;est le fichier <code>functions.php<\/code> qui va permettre l&rsquo;import (ou plut\u00f4t la mise en file d&rsquo;attente, d&rsquo;apr\u00e8s la documentation WordPress) du ou des fichier(s) CSS dont notre th\u00e8me enfant a besoin.<\/p>\n\n\n\n<p>La mise en attente d&rsquo;une feuille de style se fait par la fonction <code><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_enqueue_style\/\">wp_enqueue_style()<\/a><\/code>.<\/p>\n\n\n\n<p>Afin de s&rsquo;assurer que notre fichier CSS soit charg\u00e9 en dernier (et donc b\u00e9n\u00e9ficie de la priorit\u00e9), il faut s&rsquo;assurer de placer d&rsquo;abord en file d&rsquo;attente les fichiers externes (du th\u00e8me parent, et \u00e9ventuellement pour les webfonts).<\/p>\n\n\n\n<p>Ces diff\u00e9rentes mises en file d&rsquo;attente se font dans une fonction, qui sera alors \u00ab\u00a0hook\u00e9e\u00a0\u00bb sur l&rsquo;action <code>wp_enqueue_scripts<\/code>, avec la fonction <code><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/add_action\/\">add_action()<\/a><\/code>.<\/p>\n\n\n\n<p>Voici sans attendre le contenu de mon fichier <code>functions.php<\/code> :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; title: ; notranslate\" title=\"\">\nadd_action( &#039;wp_enqueue_scripts&#039;, &#039;my_theme_enqueue_styles&#039; );\n\nfunction my_theme_enqueue_styles() { \n    wp_enqueue_style( &#039;twentyeleven-style&#039;, get_template_directory_uri() . &#039;\/style.css&#039; ); \/\/ le style de mon th\u00e8me parent (dont l&#039;url est r\u00e9cup\u00e9r\u00e9e via la fonction get_template_directory)\n   \t\n\twp_enqueue_style( &#039;web-font&#039;, &#039;https:\/\/fonts.googleapis.com\/css?family=Nova+Square&#039; ); \/\/ style pour la web-font utilis\u00e9e par mon th\u00e8me\n    \n\twp_enqueue_style( &#039;child-style&#039;,\n        get_stylesheet_directory_uri() . &#039;\/style.css&#039;, \/\/ l&#039;url de mon style enfant est r\u00e9cup\u00e9r\u00e9e via la fonction get_stylesheet_directory_uri\n        array( &#039;twentyeleven-style&#039;, &#039;web-font&#039; ), \/\/ array permettant de pr\u00e9ciser l&#039;ordre des d\u00e9pendances de mon th\u00e8me enfant\n        wp_get_theme()-&gt;get(&#039;Version&#039;)\n    );\n}\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">Infos compl\u00e9mentaires<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Ancienne m\u00e9thode<\/h3>\n\n\n\n<p>La m\u00e9thode d&rsquo;inclusion des feuilles de style du th\u00e8me parent pr\u00e9sent\u00e9e ici est la m\u00e9thode actuelle et recommand\u00e9e.<\/p>\n\n\n\n<p>Pr\u00e9c\u00e9demment, la m\u00e9thode \u00e9tait d&rsquo;utiliser la r\u00e8gle CSS <code>@import<\/code> au d\u00e9but de la feuille de style du th\u00e8me enfant. Mais cette technique peut ralentir les performances de vos pages sur certains navigateurs (voir l&rsquo;article \u00ab\u00a0<a rel=\"noreferrer noopener\" aria-label=\"Link ou import (s\u2019ouvre dans un nouvel onglet)\" href=\"https:\/\/www.alsacreations.com\/article\/lire\/160-link-ou-import.html\" target=\"_blank\">Link ou import<\/a>\u00a0\u00bb sur Alsacreations).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00c9crasement des fichiers du parent<\/h3>\n\n\n\n<p>Si dans le r\u00e9pertoire de votre th\u00e8me enfant vous placez un fichier portant le m\u00eame nom qu&rsquo;un fichier pr\u00e9sent dans le th\u00e8me parent (par exemple <code>header.php<\/code> ou <code>page.php<\/code>, c&rsquo;est le fichier de votre th\u00e8me qui sera utilis\u00e9.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Autre utilit\u00e9 du fichier functions.php<\/h3>\n\n\n\n<p>Contrairement aux fichiers de template, le fichier functions.php du th\u00e8me parent est conserv\u00e9 et charg\u00e9 apr\u00e8s celui de votre th\u00e8me enfant.<\/p>\n\n\n\n<p>Cela permet donc d&rsquo;ajouter des fonctionnalit\u00e9s sans casser celles du parent.<\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<p>J&rsquo;esp\u00e8re que cet article vous aura \u00e9t\u00e9 utile, et peut-\u00eatre donn\u00e9 envie de cr\u00e9er vos propres th\u00e8mes enfants.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Un th\u00e8me enfant est un th\u00e8me reprenant toutes les fonctionnalit\u00e9s d&rsquo;un th\u00e8me existant, qu&rsquo;on appelera \u00ab\u00a0th\u00e8me parent\u00a0\u00bb. Pourquoi cr\u00e9er un th\u00e8me enfant ? Les th\u00e8mes WordPress disponibles offrent d\u00e9j\u00e0 un large choix d&rsquo;options pour les personnaliser. Mais, par exemple, disons &hellip; <a href=\"https:\/\/geekcommunicant.com\/blog\/2019\/04\/22\/theme-enfant-wordpress\/\">Continuer la lecture <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[41],"tags":[37,42],"class_list":["post-736","post","type-post","status-publish","format-standard","hentry","category-wordpress","tag-template","tag-wordpress"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p2IoOb-bS","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":785,"url":"https:\/\/geekcommunicant.com\/blog\/2019\/05\/27\/corriger-titres-yoast-seo\/","url_meta":{"origin":736,"position":0},"title":"Corriger les titres Yoast SEO","author":"geekc","date":"27\/05\/2019","format":false,"excerpt":"Si vous utilisez Yoast SEO sur votre site WordPress pour g\u00e9rer les balises n\u00e9cessaires au bon r\u00e9f\u00e9rencement de vos contenus, vous pouvez rencontrer ce genre de probl\u00e8me\u00a0: Quels que soient les r\u00e9glages que vous choisissez pour votre titre, des \u00e9l\u00e9ments non voulus apparaissent \u00e0 la fin de celui-ci. Yoast serait-il\u2026","rel":"","context":"Dans &quot;PHP&quot;","block_context":{"text":"PHP","link":"https:\/\/geekcommunicant.com\/blog\/category\/php\/"},"img":{"alt_text":"Mauvais titre SEO","src":"https:\/\/i0.wp.com\/geekcommunicant.com\/blog\/wp-content\/uploads\/mauvais_titre_seo.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/geekcommunicant.com\/blog\/wp-content\/uploads\/mauvais_titre_seo.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/geekcommunicant.com\/blog\/wp-content\/uploads\/mauvais_titre_seo.png?resize=525%2C300&ssl=1 1.5x"},"classes":[]},{"id":778,"url":"https:\/\/geekcommunicant.com\/blog\/2019\/05\/13\/enlever-meta-generator-wordpress\/","url_meta":{"origin":736,"position":1},"title":"Enlever la balise meta \u00ab\u00a0generator\u00a0\u00bb sur votre site WordPress","author":"geekc","date":"13\/05\/2019","format":false,"excerpt":"Je sais qu\u2019il y a quelque temps, j\u2019avais fait un article sur comment rajouter une balise meta \u00ab\u00a0generator\u00a0\u00bb \u00e0 un site MODX, mais cette balise peut remettre en question la s\u00e9curit\u00e9 de votre site. Une faille de s\u00e9curit\u00e9\u00a0? Conna\u00eetre le CMS derri\u00e8re un site peut faciliter la vie \u00e0 toute\u2026","rel":"","context":"Dans &quot;PHP&quot;","block_context":{"text":"PHP","link":"https:\/\/geekcommunicant.com\/blog\/category\/php\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":417,"url":"https:\/\/geekcommunicant.com\/blog\/2014\/09\/07\/multi-site-modx\/","url_meta":{"origin":736,"position":2},"title":"Le multi-site avec MODX","author":"geekc","date":"07\/09\/2014","format":false,"excerpt":"Gr\u00e2ce \u00e0 son syst\u00e8me de contextes, MODX Revolution permet la gestion de plusieurs sites \u00e0 partir de la m\u00eame installation du syst\u00e8me. Nous allons voir dans cet article comment faire. Le syst\u00e8me de contextes Ce syst\u00e8me permet de clairement s\u00e9parer les ressources dans leur arbres (voir image ci-dessous). La premi\u00e8re\u2026","rel":"","context":"Dans &quot;MODX&quot;","block_context":{"text":"MODX","link":"https:\/\/geekcommunicant.com\/blog\/category\/modx\/"},"img":{"alt_text":"Options contexte","src":"https:\/\/i0.wp.com\/geekcommunicant.com\/blog\/wp-content\/uploads\/options-contextes.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/geekcommunicant.com\/blog\/wp-content\/uploads\/options-contextes.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/geekcommunicant.com\/blog\/wp-content\/uploads\/options-contextes.png?resize=525%2C300&ssl=1 1.5x"},"classes":[]},{"id":1126,"url":"https:\/\/geekcommunicant.com\/blog\/2023\/03\/03\/le-sitemap-la-carte-de-votre-site\/","url_meta":{"origin":736,"position":3},"title":"Le sitemap, la carte de votre site","author":"geekc","date":"03\/03\/2023","format":false,"excerpt":"Aujourd\u2019hui, nouveau sujet de SEO. Cette fois-ci, j\u2019ai d\u00e9cid\u00e9 de parler de sitemap. C\u2019est quoi une sitemap\u00a0? Comme sa traduction quasi litt\u00e9rale l\u2019indique, il s\u2019agit d\u2019une \"carte de site\". En lisant cela, je pense que beaucoup d\u2019entre vous penserons aux pages Web indiquant les diff\u00e9rentes rubriques et sous-rubriques d\u2019un site,\u2026","rel":"","context":"Dans &quot;SEO&quot;","block_context":{"text":"SEO","link":"https:\/\/geekcommunicant.com\/blog\/category\/seo\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":744,"url":"https:\/\/geekcommunicant.com\/blog\/2019\/05\/06\/automatisation-base-deplacement-fichiers-medias\/","url_meta":{"origin":736,"position":4},"title":"Automatisation des op\u00e9rations en base suite au d\u00e9placement des fichiers de m\u00e9dias","author":"geekc","date":"06\/05\/2019","format":false,"excerpt":"Dans mon dernier article, je pr\u00e9sentais la mani\u00e8re dont j'ai proc\u00e9d\u00e9 pour d\u00e9placer les fichiers de ma biblioth\u00e8que de m\u00e9dias WordPress. Toutes les diff\u00e9rentes op\u00e9rations des \u00e9tapes d\u00e9crites dans cet article \u00e9taient faites \u00e0 la main, ce qui peut \u00eatre long, et une faute de frappe ou un oubli peut\u2026","rel":"","context":"Dans &quot;PHP&quot;","block_context":{"text":"PHP","link":"https:\/\/geekcommunicant.com\/blog\/category\/php\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":740,"url":"https:\/\/geekcommunicant.com\/blog\/2019\/04\/29\/deplacer-fichiers-medias-wordpress\/","url_meta":{"origin":736,"position":5},"title":"D\u00e9placer les fichiers de la biblioth\u00e8que de m\u00e9dias de WordPress","author":"geekc","date":"29\/04\/2019","format":false,"excerpt":"Si pour une raison ou une autre vous voulez d\u00e9placer les fichiers m\u00e9dias dans les dossiers de votre site WordPress, je vais vous expliquer comment faire. Dans mon cas, j'ai eu ce besoin quand j'ai voulu d\u00e9sactiver l'organisation en dossier annuels et mensuels par d\u00e9faut, et d\u00e9placer tous mes m\u00e9dias\u2026","rel":"","context":"Dans &quot;WordPress&quot;","block_context":{"text":"WordPress","link":"https:\/\/geekcommunicant.com\/blog\/category\/wordpress\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/posts\/736","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/comments?post=736"}],"version-history":[{"count":0,"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/posts\/736\/revisions"}],"wp:attachment":[{"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/media?parent=736"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/categories?post=736"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/tags?post=736"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}