{"id":234210,"date":"2023-02-13T17:32:00","date_gmt":"2023-02-13T14:32:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=234210"},"modified":"2022-11-12T00:25:44","modified_gmt":"2022-11-11T21:25:44","slug":"tutoriel-sur-le-theme-wordpress-pour-les-debutants-partie-6-fonctions-dun-theme-php","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/tutoriel-sur-le-theme-wordpress-pour-les-debutants-partie-6-fonctions-dun-theme-php\/","title":{"rendered":"Tutoriel sur le th\u00e8me WordPress pour les d\u00e9butants \u2013 Partie 6 : Fonctions d&rsquo;un th\u00e8me.php"},"content":{"rendered":"\n<p>Aujourd&rsquo;hui, nous allons apprendre o\u00f9 et comment ajouter du code en dehors des mod\u00e8les de notre th\u00e8me. Nous faisons cela en ajoutant le fichier du th\u00e8me <code>functions.php<\/code>. En cours de route, nous apprendrons \u00e9galement comment ajouter correctement vos feuilles de style et vos scripts.<\/p>\n<h2>Le fichier functions.php d&rsquo;un th\u00e8me<\/h2>\n<p>Un th\u00e8me a besoin d&rsquo;un endroit pour placer du code qui ne fait pas partie des mod\u00e8les. Il y a toujours un tas de code que tous les th\u00e8mes doivent ajouter pour g\u00e9rer les fonctionnalit\u00e9s. Par exemple, l&rsquo;activation de la fonctionnalit\u00e9 d&rsquo;images en vedette de WordPress (avez-vous remarqu\u00e9 qu&rsquo;elle manquait\u00a0?), la prise en charge des menus, des widgets, l&rsquo;ajout de feuilles de style et de scripts (de la bonne mani\u00e8re), etc.<\/p>\n<p>Ce fichier est <code>functions.php<\/code>. WordPress charge automatiquement et toujours ce fichier s&rsquo;il existe dans votre th\u00e8me. Il est toujours charg\u00e9 \u00e0 la fois en admin et en frontend.<\/p>\n<h2>Ajout d&rsquo;un fichier functions.php \u00e0 notre th\u00e8me<\/h2>\n<p>Cr\u00e9ons un nouveau fichier vide dans notre dossier de th\u00e8me racine et nommons-le <code>functions.php<\/code>.<\/p>\n<p>Dans ce fichier, commencez imm\u00e9diatement par une balise PHP d&rsquo;ouverture (<code>&lt;?php<\/code>) et <strong>n&rsquo;incluez pas la balise de fermeture<\/strong>. Le <code>functions.php<\/code>fichier est destin\u00e9 au code PHP, pas au HTML. Votre th\u00e8me peut casser (ou m\u00eame simplement agir bizarrement) si vous avez des caract\u00e8res ou des retours \u00e0 la ligne en dehors des balises PHP dans ce fichier. Vous pouvez \u00e9videmment sortir des balises PHP pour g\u00e9n\u00e9rer du HTML, mais cela doit \u00eatre fait \u00e0 l&rsquo;int\u00e9rieur de fonctions ou de crochets. Permettez-moi d&rsquo;expliquer cela avec une exp\u00e9rience.<\/p>\n<p>Testons ce fichier pour voir comment cela fonctionne. \u00c0 l&rsquo; int\u00e9rieur <code>functions.php<\/code>, \u00e9crivez un \u00e9cho d&rsquo;un texte factice\u00a0:<\/p>\n<pre><code>&lt;?php\necho 'This is an experiment';<\/code><\/pre>\n<p>Actualisez votre interface. Le texte factice appara\u00eet. Mais si vous inspectez ou affichez la source HTML, vous verrez que le texte appara\u00eet avant d&rsquo;ouvrir <code>&lt;html&gt;<\/code>. Cela rend le code HTML compl\u00e8tement invalide\u00a0!<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153528-61e50fc781eff.png\" data-rel=\"lightbox\" ><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153528-61e50fc781eff.png\" alt=\"Tutoriel sur le th\u00e8me WordPress pour les d\u00e9butants \u2013 Partie 6 : Fonctions d&#039;un th\u00e8me.php\" ><\/a><\/p>\n<p>Acc\u00e9dez \u00e0 votre panneau d&rsquo;administration et appuyez sur Actualiser. Il fait la m\u00eame chose ici (il peut \u00eatre cach\u00e9 derri\u00e8re la barre d&rsquo;administration, mais il est l\u00e0 dans le HTML).<\/p>\n<p>Comme vous pouvez le voir, tout code dans vos <code>functions.php<\/code>charges avant toute autre chose dans nos mod\u00e8les. Par cons\u00e9quent, en r\u00e8gle g\u00e9n\u00e9rale, toute sortie (HTML en dehors des balises PHP ou <code>echo<\/code>) doit \u00eatre \u00e0 l&rsquo;int\u00e9rieur de fonctions qui seront ex\u00e9cut\u00e9es au bon moment, normalement accroch\u00e9es \u00e0 des actions ou \u00e0 des filtres.<\/p>\n<p>Rappelez-vous quand nous avons appris et ajout\u00e9 des crochets dans la <a href=\"http:\/\/awhitepixel.com\/blog\/wordpress-theme-tutorial-for-beginners-part-3-dynamic-content\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">partie 3<\/a> du didacticiel sur le th\u00e8me WordPress pour les d\u00e9butants. La fa\u00e7on dont nous ex\u00e9cutons du code sur un crochet consiste \u00e0 attacher une fonction au crochet avec <code>add_action()<\/code>. Testons autre chose\u00a0; Cr\u00e9ons une fonction accroch\u00e9e \u00e0 un crochet que nous avons d\u00e9j\u00e0 d\u00e9fini dans nos mod\u00e8les\u00a0; <code>wp_footer<\/code>.<\/p>\n<p><code>functions.php<\/code>Supprimez le que nous avons <code>echo<\/code>ajout\u00e9 \u00e0 des fins de test et \u00e9crivez \u00e0 la place\u00a0:<\/p>\n<pre><code>&lt;?php\nadd_action('wp_footer', 'wptutorial_print_footer');\nfunction wptutorial_print_footer() {\n    echo 'This sentence will appear in footer!';\n}<\/code><\/pre>\n<p>Appuyez sur rafra\u00eechir dans le frontend et voyez que la cha\u00eene appara\u00eet bien \u00e0 l&rsquo;endroit exact que vous avez d\u00e9fini <code>wp_footer<\/code>, juste avant la fermeture <code>&lt;\/body&gt;<\/code>. Notez \u00e9galement que cela ne fera pas \u00e9cho \u00e0 quoi que ce soit dans l&rsquo;administration. C&rsquo;est parce <code>wp_footer<\/code>qu&rsquo;il s&rsquo;agit d&rsquo;un hook qui n&rsquo;est ex\u00e9cut\u00e9 qu&rsquo;en frontend.<\/p>\n<p>Faisons nos premi\u00e8res op\u00e9rations correctes en <code>functions.php<\/code>!<\/p>\n<p>Remarque: En PHP, il n&rsquo;est pas possible d&rsquo;avoir deux fonctions portant exactement le m\u00eame nom. Cela inclut les noms de fonction dans WordPress, votre th\u00e8me et tout plugin activ\u00e9! Suivez les meilleures pratiques et pr\u00e9fixez vos fonctions avec votre slug de th\u00e8me, comme dans l&rsquo;exemple ci-dessus: &quot; <code>wptutorial_&lt;function_name&gt;<\/code>&quot;. Cela emp\u00eache consid\u00e9rablement WordPress de planter fatalement \u00e0 cause de noms de fonctions identiques.<\/p>\n<p>Remarque 2: Peu importe l&rsquo;ordre dans lequel vous ajoutez des fonctions et des crochets dans votre fichier <code>functions.php<\/code>. N&rsquo;oubliez pas que les crochets sont de toute fa\u00e7on ex\u00e9cut\u00e9s \u00e0 certains points de contr\u00f4le, et non dans l&rsquo;ordre dans lequel ils se trouvent <code>functions.php<\/code>. La seule exception est si vous incluez d&rsquo;autres fichiers ou si vous initialisez vos propres classes.<\/p>\n<h2>La bonne fa\u00e7on d&rsquo;ajouter des styles et des scripts vs la mauvaise fa\u00e7on<\/h2>\n<p>Certains d&rsquo;entre vous se souviendront peut-\u00eatre de la <a href=\"http:\/\/awhitepixel.com\/blog\/wordpress-theme-tutorial-for-beginners-part-3-dynamic-content\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">partie 3<\/a> o\u00f9 nous avons ajout\u00e9 le <code>wp_head<\/code>crochet dans notre fichier <code>header.php<\/code>. Apr\u00e8s cela, WordPress a pu charger ses styles et ses scripts, y compris la barre d&rsquo;administration. Vous pensez peut-\u00eatre que pour ajouter nos feuilles de style, nous devons cr\u00e9er une fonction accroch\u00e9e <code>wp_head<\/code>et g\u00e9n\u00e9rer le <code>&lt;link&gt;<\/code>pour la feuille de style\u2026 Habituellement, vous auriez raison !<\/p>\n<p>Cependant, dans WordPress, il existe une mani\u00e8re sp\u00e9ciale d&rsquo;ajouter des scripts et des styles. Il s&rsquo;agit principalement de g\u00e9rer l&rsquo;ordre de chargement et d&rsquo;\u00e9viter de charger des biblioth\u00e8ques en double. Par exemple, en tant qu&rsquo;auteur de th\u00e8me, vous souhaiterez peut-\u00eatre ajouter des Javascripts qui d\u00e9pendent de la <code>jQuery<\/code>biblioth\u00e8que. Ensuite, vous devez vous assurer qu&rsquo;il <code>jQuery<\/code>est charg\u00e9 avant vos fichiers. Mais WordPress et tous les plugins ont le m\u00eame besoin, s&rsquo;assurer <code>jQuery<\/code>qu&rsquo;ils sont \u00e9galement charg\u00e9s avant leurs scripts. Vous ne pouvez pas charger la <code>jQuery<\/code>biblioth\u00e8que plusieurs fois car cela cause des probl\u00e8mes. WordPress a donc un moyen de g\u00e9rer dans quel <strong>ordre<\/strong> les scripts et les feuilles de style sont charg\u00e9s.<\/p>\n<h2>Ajouter des feuilles de style (dans le bon sens)<\/h2>\n<p>Pour ajouter des styles et des javascripts, nous utilisons un hook appel\u00e9 <code>wp_enqueue_scripts<\/code>. Oui, vous utilisez \u00e9galement ce crochet pour les styles, malgr\u00e9 son nom. L&rsquo;ajout de scripts et de styles est appel\u00e9 &quot;mise en file d&rsquo;attente&quot; &#8211; comme mettre dans une file d&rsquo;attente. Mettons en file d&rsquo;attente (ajoutons) notre feuille de style en utilisant la fonction <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_enqueue_style\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">wp_enqueue_style<\/a> dans notre <code>functions.php<\/code>:<\/p>\n<pre><code>&lt;?php\nadd_action('wp_enqueue_scripts', 'wptutorial_enqueue_scripts');\nfunction wptutorial_enqueue_scripts() {\n    wp_enqueue_style('theme-main-style', get_stylesheet_directory_uri().'\/style.css');\n}<\/code><\/pre>\n<p>La <code>wp_enqueue_style<\/code>fonction prend au minimum deux param\u00e8tres. Le premier est un nom unique (handle ou &quot;ID de slug&quot;), et le second l&#8217;emplacement du fichier. Le handle doit \u00eatre unique car c&rsquo;est l&rsquo;identifiant que WordPress utilise pour d\u00e9terminer s&rsquo;il y a des doublons.<\/p>\n<p>En ce qui concerne le retour du chemin vers votre th\u00e8me, de nombreuses fonctions sont disponibles. Ci-dessus, j&rsquo;ai utilis\u00e9 <code>get_stylesheet_directory_uri()<\/code>qui renvoie l&rsquo;URL de votre dossier de th\u00e8me, puis j&rsquo;ai ajout\u00e9 le reste du chemin \u00e0 notre feuille de style.<\/p>\n<p>PS: WordPress propose une fonction distincte pour renvoyer l&rsquo;URL compl\u00e8te vers votre th\u00e8me <code>style.css<\/code>: <code>get_stylesheet_uri()<\/code>. J&rsquo;ai utilis\u00e9 l&rsquo;autre fonction ci-dessus car il est plus utile de se familiariser avec. Vous l&rsquo;utiliserez pour tous les autres fichiers que vous devez mettre en file d&rsquo;attente.<\/p>\n<p>La fonction <code>wp_enqueue_style<\/code>accepte des param\u00e8tres plus utiles, tels que les d\u00e9pendances (que d&rsquo;autres fichiers CSS doivent \u00eatre charg\u00e9s avant) et le num\u00e9ro de version (utile \u00e0 des fins de mise en cache).<\/p>\n<p>Actualisez votre frontend et voyez que votre feuille de style est charg\u00e9e dans <code>&lt;head&gt;<\/code>la balise\u00a0!<\/p>\n<p>Si vous faites partie de ceux qui ont h\u00e2te de rendre votre th\u00e8me plus joli tout en le codant, voici votre chance. Je vous encourage \u00e0 commencer \u00e0 d\u00e9finir votre code HTML, vos classes et vos wrappers et \u00e0 ajouter du style dans votre fichier <code>style.css<\/code>. Nous ajouterons plus de contenu qui n\u00e9cessitera un style au fur et \u00e0 mesure de cette s\u00e9rie de didacticiels.<\/p>\n<h2>Ajouter des scripts (dans le bon sens)<\/h2>\n<p>Voyons comment nous ajoutons des javascripts \u00e0 notre th\u00e8me. Cela se fait en utilisant le m\u00eame crochet (vous pouvez donc tout mettre dans une seule fonction). Mais pour les scripts, nous utilisons une fonction l\u00e9g\u00e8rement diff\u00e9rente.<\/p>\n<p>Pour mettre un script en file d&rsquo;attente, vous utilisez <code>wp_enqueue_script()<\/code>. Les param\u00e8tres sont les m\u00eames que <code>wp_enqueue_style()<\/code>. Le premier est le handle unique et le second est le chemin d&rsquo;acc\u00e8s au script. Le troisi\u00e8me (facultatif) est le tableau des d\u00e9pendances. Comme quatri\u00e8me param\u00e8tre (facultatif), vous d\u00e9finissez le num\u00e9ro de version. Et enfin cinqui\u00e8me (facultatif) vous d\u00e9finissez si le script doit \u00eatre charg\u00e9 ou non dans la <code>&lt;head&gt;<\/code>balise ou \u00e0 la fin de <code>&lt;\/body&gt;<\/code>.<\/p>\n<p>WordPress est livr\u00e9 avec une large gamme de biblioth\u00e8ques d\u00e9j\u00e0 incluses. Ils ne sont pas toujours tous charg\u00e9s, mais disponibles si vous en avez besoin. Si vous souhaitez ajouter un script de biblioth\u00e8que commun, v\u00e9rifiez <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_enqueue_script\/#default-scripts-included-and-registered-by-wordpress\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">d&rsquo;abord si WordPress l&rsquo;a d\u00e9j\u00e0<\/a>. Les exemples sont jQuery, tous les modules jQuery UI, Underscore et Backbone.<\/p>\n<p>Si vous ajoutez l&rsquo;un des scripts inclus dans WordPress en tant que d\u00e9pendance, vous n&rsquo;avez pas besoin de mettre ce script en file d&rsquo;attente\u00a0! Faisons cela en pratique.<\/p>\n<p>Cr\u00e9ez un dossier <code>assets<\/code>et \u00e0 l&rsquo;int\u00e9rieur un sous-dossier <code>js<\/code>dans notre dossier de th\u00e8me, puis ajoutez un nouveau <code>main.js<\/code>fichier vide. Disons que ce script n\u00e9cessite la <code>jQuery<\/code>biblioth\u00e8que, nous le d\u00e9finissons donc comme d\u00e9pendance. Nous savons que WordPress est livr\u00e9 avec des <code>jQuery<\/code>bundles et que le handle est <code>jquery<\/code>. Nous allons mettre notre script en file d&rsquo;attente comme ceci\u00a0:<\/p>\n<pre><code>&lt;?php\nadd_action('wp_enqueue_scripts', 'wptutorial_enqueue_scripts');\nfunction wptutorial_enqueue_scripts() {\n    wp_enqueue_style('theme-main-style', get_stylesheet_directory_uri().'\/style.css');\n    wp_enqueue_script('theme-main-script', get_stylesheet_directory_uri().'\/assets\/js\/main.js', ['jquery']);\n}<\/code><\/pre>\n<p>Si vous actualisez le frontend et v\u00e9rifiez votre code source, vous devriez voir que votre script, <code>main.js<\/code>, est ajout\u00e9, mais aussi que la <code>jQuery<\/code>biblioth\u00e8que est charg\u00e9e. Et <code>jQuery<\/code>est charg\u00e9 avant votre fichier !<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153528-61e50fc835cef.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153528-61e50fc835cef.png\" alt=\"Tutoriel sur le th\u00e8me WordPress pour les d\u00e9butants \u2013 Partie 6 : Fonctions d&#039;un th\u00e8me.php\" ><\/a><\/p>\n<p>Vous avez maintenant appris \u00e0 ajouter des styles et des scripts. Pour ajouter plus de fichiers, ajoutez un <code>wp_enqueue_style()<\/code>ou <code>wp_enqueue_script()<\/code>pour chaque nouveau fichier.<\/p>\n<h2>Documentation sur les m\u00e9thodes utilis\u00e9es<\/h2>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/add_action\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">add_action<\/a><\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_enqueue_scripts\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">wp_enqueue_scripts<\/a><\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_enqueue_style\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">wp_enqueue_style<\/a><\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/get_stylesheet_directory_uri\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">get_stylesheet_directory_uri<\/a><\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_enqueue_script\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">wp_enqueue_script<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Source d&rsquo;enregistrement:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dans cette le\u00e7on, nous apprendrons comment ajouter le fichier functions.php du th\u00e8me WordPress et comment ajouter les feuilles de style et les scripts d&rsquo;un th\u00e8me de la bonne mani\u00e8re.<\/p>\n","protected":false},"author":1,"featured_media":224083,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[893,893,717,717,832,1110,801,801,832,925,925,841,841,862,862],"tags":[1167],"class_list":["post-234210","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-code-2","category-developpeur","category-guide-pour-les-debutants","category-n-a","category-php-3","category-sujets","category-tutoriels","category-wordpress-3","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/234210","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/comments?post=234210"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/234210\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/224083"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=234210"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=234210"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=234210"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}