{"id":233820,"date":"2023-02-22T18:52:00","date_gmt":"2023-02-22T15:52:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233820"},"modified":"2022-11-11T12:36:53","modified_gmt":"2022-11-11T09:36:53","slug":"tutto-sullaggiunta-di-stili-e-script-in-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/tutto-sullaggiunta-di-stili-e-script-in-wordpress\/","title":{"rendered":"Tutto sull&#8217;aggiunta di stili e script in WordPress"},"content":{"rendered":"\n<p>WordPress offre diversi metodi per aggiungere stili e script per frontend e amministratore, sia per l&#8217;aggiunta di file che per l&#8217;output diretto di variabili\/output. Questo post entra nel dettaglio con esempi di codice su come aggiungere script e stili a WordPress nel modo corretto.<\/p>\n<p>Script e stili possono essere registrati e accodati definendo handle univoci (ID slug), consentendo a WordPress di eliminare i duplicati, come pi\u00f9 librerie jQuery, e di gestire le dipendenze (quale stile o script caricare prima di questo e quello) .<\/p>\n<p>Se non c&#8217;\u00e8 bisogno specifico di registrare stili o script, puoi semplicemente accodarli subito, saltando la registrazione. \u00c8 anche possibile annullare la registrazione o rimuovere dalla coda stili e script (<code>wp_dequeue_script<\/code>e <code>wp_dequeue_style<\/code>) facendo riferimento all&#8217;handle. Di solito aiuta ad aggiungere un numero pi\u00f9 alto nella priorit\u00e0 del gancio (facendolo correre dietro al gancio in cui sono stati accodati gli elementi).<\/p>\n<p>PS: l&#8217;aggiunta di stili e script a Gutenberg (sia admin che frontend block), \u00e8 spiegata nel mio post <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>Aggiunta di script e stili al frontend<\/h2>\n<p>Per aggiungere stili e script solo al frontend, usa l&#8217;hook <code>wp_enqueue_scripts<\/code>. Nonostante il nome dell&#8217;hook, viene utilizzato sia per gli script che per gli stili. Ecco un esempio di accodamento di un foglio di stile e di un file javascript in un tema:<\/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>Il terzo argomento sia per gli stili che per gli script \u00e8 un array con dipendenze. Ad esempio, per gli script potresti voler caricare la libreria jQuery prima del tuo file di script. <strong>Nota<\/strong>: le installazioni di WordPress vengono fornite con una serie di librerie di script comuni incluse (ad esempio jQuery, jQuery UI, Backbone e Underscore). Finch\u00e9 aggiungi <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\">uno di questi handle<\/a> come dipendenza nel tuo enqueue_script, WordPress li accoder\u00e0, quindi non devi aggiungere i tuoi file per queste librerie.<\/p>\n<p>Il quinto argomento per gli script \u00e8 se lo script debba essere caricato o meno alla fine di <code>&lt;body&gt;<\/code>(nel pi\u00e8 di pagina), invece che all&#8217;interno del <code>&lt;head&gt;<\/code>tag.<\/p>\n<p>Per l&#8217;uso in un plug-in \u00e8 necessario utilizzare altri metodi per ottenere l&#8217;URL di un file locale, ad esempio <code>plugin_dir_url(__FILE__)<\/code>.<\/p>\n<h2>Aggiunta di script e stili all&#8217;amministratore<\/h2>\n<p>WordPress offre un altro hook, <code>admin_enqueue_scripts<\/code>, per aggiungere stili e script solo all&#8217;amministratore. Utilizzare gli stessi metodi di cui sopra per la registrazione, l&#8217;accodamento e la localizzazione di script e stili:<\/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>Aggiunta di script e stili alla pagina di accesso<\/h2>\n<p>Poich\u00e9 nessuno degli hook sopra appare nella schermata di accesso dell&#8217;amministratore, WordPress offre un hook separato per questo scopo, <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>Output di variabili Javascript<\/h2>\n<p>Per l&#8217;output di variabili Javascript (ad es. ottenere percorsi, stringhe tradotte o altre variabili, puoi utilizzare wp_localize_script. Questa funzione richiede un handle di script accodato. Il secondo parametro sarebbe il nome della variabile e il terzo il suo valore. Il valore pu\u00f2 essere un array, in questo modo :<\/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>All&#8217;interno del tuo script hai accesso alle variabili passate, in questo modo:<\/p>\n<pre><code>jQuery(document).ready(function($) { \n    console.log(Theme_Variables.ajax_url);\n});<\/code><\/pre>\n<p>In questo hook puoi accedere alle variabili globali <code>$pagenow<\/code>e <code>$post_type<\/code>specificare ulteriormente dove vuoi accodare i tuoi stili e script.<\/p>\n<h2>Output di stili in linea<\/h2>\n<p>Se hai bisogno di produrre stili in linea, ad esempio per le variabili del tema che hai impostato in Customizer (ad esempio usando <code>get_theme_mod<\/code>), puoi emetterli usando la <code>wp_add_inline_style<\/code>funzione. Funziona in modo abbastanza simile all&#8217;output di variabili Javascript, in cui \u00e8 necessario fornire un handle di stile accodato:<\/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>Aggiunta di tag asincroni agli script<\/h2>\n<p>Sfortunatamente non ci sono funzioni o filtri diretti da aggiungere <code>async<\/code>ai tag di script, ma possiamo ottenere ci\u00f2 manipolando la stringa che WordPress utilizza per generare i tag di script per tutti gli script accodati, in questo modo (ricorda di specificare il tuo script tramite il suo 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>Link utili alla documentazione<\/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> (gancio)<\/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> (gancio)<\/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> (gancio)<\/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\">Fonte di registrazione:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Questo post entra nel dettaglio con esempi di codice su come aggiungere script e stili a WordPress nel modo corretto, sia i file che le variabili di output.<\/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":[896,896,720,835,1110,804,804,835,928,720,928,844,865,865],"tags":[1168],"class_list":["post-233820","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codice","category-sviluppatore","category-guida-per-principianti","category-n-a","category-php-6","category-soggetti","category-tutorial","category-wordpress-6","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/233820","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/comments?post=233820"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/233820\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/224083"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=233820"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=233820"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=233820"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}