{"id":234253,"date":"2023-02-22T19:20:00","date_gmt":"2023-02-22T16:20:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=234253"},"modified":"2022-11-12T02:17:01","modified_gmt":"2022-11-11T23:17:01","slug":"tout-sur-lajout-de-styles-et-de-scripts-dans-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/tout-sur-lajout-de-styles-et-de-scripts-dans-wordpress\/","title":{"rendered":"Tout sur l&rsquo;ajout de styles et de scripts dans WordPress"},"content":{"rendered":"\n<p>WordPress propose plusieurs m\u00e9thodes pour ajouter des styles et des scripts pour le frontend et l&rsquo;administrateur, \u00e0 la fois pour ajouter des fichiers et pour sortir directement des variables\/sorties. Cet article d\u00e9taille avec des exemples de code comment ajouter correctement des scripts et des styles \u00e0 WordPress.<\/p>\n<p>Les scripts et les styles peuvent \u00eatre enregistr\u00e9s et mis en file d&rsquo;attente en d\u00e9finissant des poign\u00e9es uniques (identifiants de type slug), permettant \u00e0 WordPress d&rsquo;\u00e9liminer les doublons, tels que plusieurs biblioth\u00e8ques jQuery, et de g\u00e9rer les d\u00e9pendances (quel style ou script charger avant ceci et cela) .<\/p>\n<p>S&rsquo;il n&rsquo;y a pas de besoin sp\u00e9cifique d&rsquo;enregistrer des styles ou des scripts, vous pouvez simplement les mettre en file d&rsquo;attente imm\u00e9diatement, en sautant l&rsquo;enregistrement. Il est \u00e9galement possible de d\u00e9senregistrer ou de retirer de la file d&rsquo;attente des styles et des scripts (<code>wp_dequeue_script<\/code>et <code>wp_dequeue_style<\/code>) en se r\u00e9f\u00e9rant au handle. Cela aide g\u00e9n\u00e9ralement \u00e0 ajouter un nombre plus \u00e9lev\u00e9 dans la priorit\u00e9 du crochet (en le faisant courir apr\u00e8s le crochet o\u00f9 les \u00e9l\u00e9ments ont \u00e9t\u00e9 mis en file d&rsquo;attente).<\/p>\n<p>PS: L&rsquo;ajout de styles et de scripts \u00e0 Gutenberg (blocs admin et frontend) est expliqu\u00e9 dans mon article <a href=\"http:\/\/localhost\/awhitepixel\/blog\/gutenberg-the-basics\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Gutenberg: The Basics<\/a>.<\/p>\n<h2>Ajout de scripts et de styles \u00e0 l&rsquo;interface<\/h2>\n<p>Pour ajouter des styles et des scripts \u00e0 l&rsquo;interface uniquement, utilisez le hook <code>wp_enqueue_scripts<\/code>. Malgr\u00e9 le nom du hook, il est utilis\u00e9 \u00e0 la fois pour les scripts et les styles. Voici un exemple de mise en file d&rsquo;attente d&rsquo;une feuille de style et d&rsquo;un fichier javascript dans un th\u00e8me\u00a0:<\/p>\n<pre><code>add_action('wp_enqueue_scripts', function() {\n    \/\/ Styles\n    wp_enqueue_style('main-style', get_stylesheet_directory_uri().'\/style.css', [], '1.0');\n\u00a0\n    \/\/ Scripts\n    wp_enqueue_script('main-script', get_stylesheet_directory_uri().'\/assets\/js\/main.js', ['jquery'], '', true);\n});<\/code><\/pre>\n<p>Le troisi\u00e8me argument des styles et des scripts est un tableau avec des d\u00e9pendances. Par exemple, pour les scripts, vous pouvez charger la biblioth\u00e8que jQuery avant votre fichier de script. <strong>Remarque<\/strong>: les installations WordPress sont livr\u00e9es avec un tas de biblioth\u00e8ques de scripts communes incluses (par exemple jQuery, jQuery UI, Backbone et Underscore). Tant que vous ajoutez <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\">l&rsquo;une de ces poign\u00e9es<\/a> en tant que d\u00e9pendance dans votre enqueue_script, WordPress les mettra en file d&rsquo;attente, vous n&rsquo;avez donc pas \u00e0 ajouter vos propres fichiers pour ces biblioth\u00e8ques.<\/p>\n<p>Le cinqui\u00e8me argument pour les scripts est de savoir si le script doit \u00eatre charg\u00e9 ou non \u00e0 la fin de <code>&lt;body&gt;<\/code>(dans le pied de page), plut\u00f4t qu&rsquo;\u00e0 l&rsquo;int\u00e9rieur de la <code>&lt;head&gt;<\/code>balise.<\/p>\n<p>Pour une utilisation dans un plugin, vous devez utiliser d&rsquo;autres m\u00e9thodes pour obtenir l&rsquo;URL d&rsquo;un fichier local, par exemple <code>plugin_dir_url(__FILE__)<\/code>.<\/p>\n<h2>Ajout de scripts et de styles \u00e0 l&rsquo;administrateur<\/h2>\n<p>WordPress propose un autre crochet, <code>admin_enqueue_scripts<\/code>, pour ajouter des styles et des scripts uniquement \u00e0 l&rsquo;administrateur. Utilisez les m\u00eames m\u00e9thodes que ci-dessus pour enregistrer, mettre en file d&rsquo;attente et localiser les scripts et les styles\u00a0:<\/p>\n<pre><code>add_action('admin_enqueue_scripts', function() {\n    global $pagenow, $post_type;\n    \/\/ Example: $hook == 'edit.php'\n    \/\/ Example: $post_type == 'post'\n    \/\/ wp_enqueue_style or wp_enqueue_script\n});<\/code><\/pre>\n<h2>Ajout de scripts et de styles \u00e0 la page de connexion<\/h2>\n<p>\u00c9tant donn\u00e9 qu&rsquo;aucun des crochets ci-dessus n&rsquo;appara\u00eet dans l&rsquo;\u00e9cran de connexion de l&rsquo;administrateur, WordPress propose un crochet s\u00e9par\u00e9 \u00e0 cet effet, <code>login_enqueue_scripts<\/code>.<\/p>\n<pre><code>add_action('login_enqueue_scripts', function() {\n    \/\/ wp_enqueue_style or wp_enqueue_script\n});<\/code><\/pre>\n<h2>Sortir des variables Javascript<\/h2>\n<p>Pour g\u00e9n\u00e9rer des variables Javascript (par exemple, obtenir des chemins, des cha\u00eenes traduites ou d&rsquo;autres variables, vous pouvez utiliser wp_localize_script. Cette fonction n\u00e9cessite un descripteur de script mis en file d&rsquo;attente. Le deuxi\u00e8me param\u00e8tre serait le nom de la variable et le troisi\u00e8me sa valeur. La valeur peut \u00eatre un tableau, comme ceci :<\/p>\n<pre><code>add_action('wp_enqueue_scripts', function() {\n    \/\/ wp_enqueue_script('main-script');  \/\/ Must exist!\n    $variable_to_js = [\n        'ajax_url' =&gt; admin_url('admin-ajax.php')\n    ];\n    wp_localize_script('main-script', 'Theme_Variables', $variable_to_js);\n});<\/code><\/pre>\n<p>Dans votre script, vous avez acc\u00e8s aux variables pass\u00e9es, comme ceci\u00a0:<\/p>\n<pre><code>jQuery(document).ready(function($) { \n    console.log(Theme_Variables.ajax_url);\n});<\/code><\/pre>\n<p>Dans ce crochet, vous pouvez acc\u00e9der aux variables globales <code>$pagenow<\/code>et <code>$post_type<\/code>sp\u00e9cifier davantage o\u00f9 vous souhaitez mettre en file d&rsquo;attente vos styles et vos scripts.<\/p>\n<h2>Sortie de styles en ligne<\/h2>\n<p>Si vous avez besoin de g\u00e9n\u00e9rer des styles en ligne, par exemple pour les variables de th\u00e8me que vous avez configur\u00e9es dans Customizer (par exemple en utilisant <code>get_theme_mod<\/code>), vous pouvez les g\u00e9n\u00e9rer \u00e0 l&rsquo;aide de la <code>wp_add_inline_style<\/code>fonction. Cela fonctionne de mani\u00e8re assez similaire \u00e0 la sortie de variables Javascript, dans lesquelles vous devez fournir un handle de style en file d&rsquo;attente\u00a0:<\/p>\n<pre><code>add_action('wp_enqueue_scripts', function() {\n    \/\/ wp_enqueue_style('main-style');  \/\/ Must exist!\n\u00a0\n    $color = get_theme_mod('my-custom-color');  \/\/ e.g. #FF0000\n    $custom_css = \"\n        body {\n            background: {$color};\n        }\";\n        wp_add_inline_style('main-style', $custom_css);\n});<\/code><\/pre>\n<h2>Ajout de balises asynchrones aux scripts<\/h2>\n<p>Malheureusement, il n&rsquo;y a pas de fonction ou de filtre direct \u00e0 ajouter <code>async<\/code>\u00e0 vos balises de script, mais nous pouvons y parvenir en manipulant la cha\u00eene que WordPress utilise pour g\u00e9n\u00e9rer les balises de script pour tous les scripts en file d&rsquo;attente, comme ceci (n&rsquo;oubliez pas de sp\u00e9cifier votre script par son handle) :<\/p>\n<pre><code>add_filter('script_loader_tag', function($tag, $handle, $src) {\n    if ('main-script' != $handle) {\n        return $tag;\n    }\n    return str_replace('&lt;script', '&lt;script async', $tag);\n}, 11, 3);<\/code><\/pre>\n<h2>Liens documentaires utiles<\/h2>\n<ul>\n<li><a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Action_Reference\/wp_enqueue_scripts\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">wp_enqueue_scripts<\/a> (hook)<\/li>\n<li><a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Action_Reference\/admin_enqueue_scripts\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">admin_enqueue_scripts<\/a> (hook)<\/li>\n<li><a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Action_Reference\/login_enqueue_scripts\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">login_enqueue_scripts<\/a> (hook)<\/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:\/\/codex.wordpress.org\/Function_Reference\/wp_dequeue_style\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">wp_dequeue_style<\/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<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/wp_dequeue_script\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">wp_dequeue_script<\/a><\/li>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/wp_localize_script\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">wp_localize_script<\/a><\/li>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/wp_add_inline_style\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">wp_add_inline_style<\/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>Cet article d\u00e9taille avec des exemples de code comment ajouter correctement des scripts et des styles \u00e0 WordPress, \u00e0 la fois des fichiers et des variables de sortie.<\/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,862,862],"tags":[1167],"class_list":["post-234253","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\/234253","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=234253"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/234253\/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=234253"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=234253"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=234253"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}