{"id":1903,"date":"2026-03-18T15:31:13","date_gmt":"2026-03-18T15:31:13","guid":{"rendered":"https:\/\/studioimmens.com\/come-creare-uno-shortcode-personalizzato-in-wordpress\/"},"modified":"2026-07-16T17:04:17","modified_gmt":"2026-07-16T15:04:17","slug":"come-creare-uno-shortcode-personalizzato-in-wordpress","status":"publish","type":"post","link":"https:\/\/studioimmens.com\/en\/come-creare-uno-shortcode-personalizzato-in-wordpress\/","title":{"rendered":"Come creare uno shortcode personalizzato in WordPress"},"content":{"rendered":"<h2>Cosa sono gli shortcode WordPress e perch\u00e9 usarli<\/h2>\n<p>Gli shortcode WordPress sono frammenti di codice racchiusi tra parentesi quadre che permettono di eseguire funzioni complesse all&#8217;interno di post, pagine e widget senza scrivere codice PHP. Introdotti nella versione 2.5, gli shortcode hanno rivoluzionato il modo di aggiungere contenuti dinamici in WordPress, permettendo a sviluppatori e utenti di inserire elementi come gallerie, moduli, pulsanti personalizzati e molto altro con una semplice sintassi testuale. Un shortcode si presenta tipicamente nella forma [nome_shortcode] o [nome_shortcode attributi=&#8221;valore&#8221;] e, quando WordPress elabora la pagina, viene sostituito con l&#8217;output generato dalla funzione PHP corrispondente. I casi d&#8217;uso sono infiniti: visualizzare gli ultimi post del blog in una pagina statica, creare pulsanti personalizzati con stili unici, inserire tabelle di prezzi, mostrare un loop di testimonianze, generare griglie di portfolio o elenchi di prodotti, aggiungere contenuti dinamici come l&#8217;anno corrente o i dati dell&#8217;utente loggato. Gli shortcode rimangono rilevanti anche nell&#8217;era di Gutenberg perch\u00e9 offrono un livello di flessibilit\u00e0 e riutilizzabilit\u00e0 che i blocchi standard non sempre eguagliano, specialmente per funzionalit\u00e0 back-end complesse.<\/p>\n<h2>Creare il primo shortcode con add_shortcode()<\/h2>\n<p>La creazione di uno shortcode personalizzato richiede due passaggi fondamentali: scrivere una funzione PHP che genera l&#8217;output desiderato, e registrare la funzione come shortcode utilizzando add_shortcode(). La funzione riceve tipicamente tre parametri: $atts (un array di attributi passati allo shortcode), $content (il contenuto racchiuso tra tag di apertura e chiusura per shortcode encloser) e $tag (il nome dello shortcode stesso). La funzione deve restituire una stringa, non stamparla direttamente. \u00c8 importante ricordare che l&#8217;output di uno shortcode viene processato prima che WordPress generi la pagina, quindi non pu\u00f2 dipendere da dati che vengono determinati successivamente nel ciclo di rendering. Ecco un esempio base: per creare uno shortcode che visualizza la data corrente, scrivi una funzione che restituisce &#8220;Oggi \u00e8 il &#8221; . date(&#8216;d\/m\/Y&#8217;), e registrala con add_shortcode(&#8216;data_corrente&#8217;, &#8216;nome_della_funzione&#8217;). A questo punto, inserendo [data_corrente] in un post, apparir\u00e0 automaticamente la data del giorno. Tutto il codice va inserito nel file functions.php del tema attivo o in un plugin personalizzato per mantenerlo funzionante anche dopo un cambio di tema.<\/p>\n<h2>Passare attributi agli shortcode con shortcode_atts()<\/h2>\n<p>Gli attributi rendono gli shortcode flessibili e riutilizzabili in diversi contesti. Per gestirli correttamente, la funzione shortcode_atts() permette di definire valori predefiniti per ogni attributo, garantendo che lo shortcode funzioni anche quando l&#8217;utente non specifica tutti i parametri. La sintassi \u00e8 shortcode_atts(array(&#8216;attributo1&#8217; =&gt; &#8216;default1&#8217;, &#8216;attributo2&#8217; =&gt; &#8216;default2&#8217;), $atts). Questo unisce gli attributi forniti dall&#8217;utente con i valori predefiniti, dando priorit\u00e0 a quelli espliciti. Per esempio, uno shortcode per un pulsante personalizzato potrebbe accettare attributi come colore, testo e url. Se l&#8217;utente scrive [pulsante colore=&#8221;blu&#8221; testo=&#8221;Clicca qui&#8221; url=&#8221;https:\/\/esempio.it&#8221;], la funzione estrarr\u00e0 questi valori e generer\u00e0 il codice HTML corrispondente. Se l&#8217;utente omette qualche attributo, verr\u00e0 utilizzato il valore predefinito definito in shortcode_atts(). \u00c8 buona pratica validare e sanificare tutti gli attributi ricevuti, specialmente url e altri dati che potrebbero essere utilizzati in contesti sensibili come attributi HTML o URL di reindirizzamento.<\/p>\n<h2>Shortcode con contenuto racchiuso (enclosing shortcode)<\/h2>\n<p>Gli shortcode possono anche racchiudere contenuto, funzionando come contenitori che avvolgono il testo o HTML presente tra il tag di apertura e chiusura. La sintassi \u00e8 [shortcode]contenuto da avvolgere[\/shortcode]. In questo caso, la funzione riceve il contenuto racchiuso nel parametro $content e pu\u00f2 manipolarlo prima di restituirlo. Un esempio classico \u00e8 uno shortcode per evidenziare il testo: [evidenzia colore=&#8221;giallo&#8221;]Testo da evidenziare[\/evidenzia] potrebbe restituire <span style=\"background-color:yellow\">Testo da evidenziare<\/span>. L&#8217;uso di do_shortcode() all&#8217;interno della funzione \u00e8 importante per permettere che eventuali shortcode annidati nel contenuto vengano processati: $content = do_shortcode($content). Questo \u00e8 utile per shortcode che fungono da contenitori di layout, come colonne o box, all&#8217;interno dei quali l&#8217;utente potrebbe inserire altri shortcode. Attenzione per\u00f2 a non creare dipendenze circolari che potrebbero portare a loop infiniti o errori di memoria.<\/p>\n<h2>Esempi complessi: colonne, directory e griglie<\/h2>\n<p>Gli shortcode diventano veramente potenti quando si creano sistemi di layout complessi. Uno shortcode per colonne responsive potrebbe funzionare con una sintassi come [colonne] [colonna larghezza=&#8221;6&#8243;]Contenuto sinistra[\/colonna] [colonna larghezza=&#8221;6&#8243;]Contenuto destra[\/colonna] [\/colonne], generando il markup CSS Grid o Flexbox appropriato. Per una directory dello staff, uno shortcode [staff] potrebbe accettare parametri come categoria, numero di membri e ordine, e interrogare il database per restituire una griglia di card con foto, nome e bio di ogni membro, con stili predefiniti. Una griglia di portfolio potrebbe utilizzare [portfolio categoria=&#8221;web-design&#8221; colonne=&#8221;3&#8243; filtro=&#8221;si&#8221;] per mostrare i progetti filtrati con animazioni e lightbox. Questi esempi mostrano come gli shortcode possano sostituire completamente plugin complessi per funzionalit\u00e0 specifiche, mantenendo il sito leggero e performante. La chiave \u00e8 bilanciare flessibilit\u00e0 e complessit\u00e0: offri opzioni di personalizzazione sufficienti ma mantieni la sintassi semplice e intuitiva per l&#8217;utente finale.<\/p>\n<h2>Sicurezza negli shortcode: escaping e validazione<\/h2>\n<p>La sicurezza \u00e8 un aspetto critico nello sviluppo di shortcode, specialmente se questi vengono utilizzati da pi\u00f9 utenti o in contesti dove il contenuto pu\u00f2 essere inserito da collaboratori con diversi livelli di permessi. L&#8217;escaping dell&#8217;output \u00e8 fondamentale per prevenire attacchi XSS (Cross-Site Scripting): utilizza esc_html(), esc_attr() o esc_url() per sanificare i dati prima di includerli nell&#8217;HTML generato. Per attributi che possono contenere HTML consentito, usa wp_kses() per specificare esattamente quali tag e attributi sono permessi, bloccando tutto il resto. Per attributi numerici, utilizza intval() o floatval() per assicurarti di ricevere effettivamente un numero. Non eseguire mai direttamente input utente in funzioni come eval() o include(). Verifica che l&#8217;utente abbia i permessi necessari per utilizzare lo shortcode aggiungendo un controllo current_user_can() prima di eseguire operazioni sensibili come query al database o modifiche ai file. Ricorda che gli shortcode vengono eseguiti nel contesto del front-end, quindi qualsiasi vulnerabilit\u00e0 \u00e8 potenzialmente sfruttabile da visitatori anonimi.<\/p>\n<h2>Best practice per gli shortcode: prefissi, naming e organizzazione<\/h2>\n<p>Seguire delle best practice nello sviluppo degli shortcode garantisce manutenibilit\u00e0 e evita conflitti con altri plugin o temi. Utilizza sempre un prefisso unico per i nomi dei tuoi shortcode, tipicamente correlato al nome del tuo plugin o tema (ad esempio, per Studio Immens, tutti gli shortcode potrebbero iniziare con si_ come [si_pulsante], [si_colonne]). Questo previene collisioni con shortcode di altri sviluppatori. Organizza il codice in file separati se crei molti shortcode, magari in una cartella \/inc\/shortcodes\/ all&#8217;interno del tuo plugin o tema. Documenta ogni shortcode con commenti chiari che spieghino parametri, valori predefiniti e comportamento. Evita di creare shortcode all&#8217;interno di altri shortcode (nesting eccessivo) che pu\u00f2 portare a problemi di performance e manutenibilit\u00e0. Per attributi booleani, usa valori come &#8220;si&#8221;\/&#8221;no&#8221; o &#8220;vero&#8221;\/&#8221;falso&#8221; piuttosto che 1\/0 per maggiore chiarezza. Raggruppa shortcode correlati in un&#8217;unica funzione di registrazione per mantenere il codice pulito e centrale.<\/p>\n<h2>Alternative moderne: blocchi Gutenberg, blocchi riutilizzabili e pattern<\/h2>\n<p>Con l&#8217;introduzione di Gutenberg in WordPress 5.0 e la maturazione del Full Site Editing, gli shortcode non sono pi\u00f9 l&#8217;unica opzione per contenuti dinamici e riutilizzabili. I blocchi Gutenberg nativi offrono funzionalit\u00e0 che prima richiedevano shortcode, come colonne, gruppi, pulsanti e media. I blocchi riutilizzabili permettono di salvare una combinazione di blocchi e riutilizzarla in qualsiasi post o pagina, con la possibilit\u00e0 di aggiornare tutte le istanze modificando il blocco originale. I block pattern offrono layout predefiniti che possono essere inseriti con un click. Per funzionalit\u00e0 dinamiche e lato server, tuttavia, gli shortcode rimangono la soluzione pi\u00f9 pratica. Puoi anche creare blocchi Gutenberg personalizzati che integrano shortcode esistenti, offrendo un&#8217;interfaccia visiva per parametri che altrimenti andrebbero digitati manualmente. La strategia migliore nel 2026 \u00e8 utilizzare blocchi nativi dove possibile, ricorrendo agli shortcode per funzionalit\u00e0 back-end complesse o per garantire compatibilit\u00e0 con temi e plugin che non supportano ancora completamente l&#8217;ecosistema a blocchi.<\/p>\n<h2>Conclusione<\/h2>\n<p>Gli shortcode rimangono uno strumento potente e flessibile nell&#8217;arsenale di ogni sviluppatore WordPress. Nonostante l&#8217;evoluzione di Gutenberg e dei blocchi, la capacit\u00e0 di creare funzionalit\u00e0 dinamiche con una sintassi semplice e di integrarle ovunque nel sito rende gli shortcode ancora preziosi. Con le giuste pratiche di sicurezza e organizzazione, puoi estendere WordPress in modi che sarebbero altrimenti complessi o richiederebbero plugin ingombranti. Inizia con shortcode semplici per risolvere problemi specifici e gradualmente costruisci una libreria di shortcode riutilizzabili che accelereranno il tuo sviluppo e miglioreranno l&#8217;esperienza dei tuoi utenti.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Cosa sono gli shortcode WordPress e perch\u00e9 usarli Gli shortcode WordPress sono frammenti di codice racchiusi tra parentesi quadre che permettono di eseguire funzioni complesse all&#8217;interno di post, pagine e widget senza scrivere codice PHP. Introdotti nella versione 2.5, gli shortcode hanno rivoluzionato il modo di aggiungere contenuti dinamici in WordPress, permettendo a sviluppatori e [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":2096,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_gspb_post_css":"","ai_primary_source":"Studio Immens Blog","visibility_scope":"both","ai_summary":"Cosa sono gli shortcode WordPress e perch\u00e9 usarli Gli shortcode WordPress sono frammenti di codice racchiusi tra parentesi quadre che permettono di eseguire funzioni complesse all'interno di post, pagine e widget senza scrivere codice PHP. Introdotti nella versione 2.5, gli shortcode hanno rivolu...","ai_intent":"informative","ai_related_resources":"","ai_priority":5,"ai_entity_type":"Article","ai_is_based_on":"https:\/\/blog.studioimmens.com\/come-creare-uno-shortcode-personalizzato-in-wordpress\/","ai_citations":"","ai_mentions":"","ai_speakable_selector":"","ai_chunk_hints":"Come, creare, uno, shortcode","footnotes":""},"categories":[133],"tags":[277],"ai_visibility":[],"class_list":["post-1903","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-wordpress","tag-custom-post-type"],"blocksy_meta":[],"_links":{"self":[{"href":"https:\/\/studioimmens.com\/en\/wp-json\/wp\/v2\/posts\/1903","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/studioimmens.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/studioimmens.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/studioimmens.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/studioimmens.com\/en\/wp-json\/wp\/v2\/comments?post=1903"}],"version-history":[{"count":1,"href":"https:\/\/studioimmens.com\/en\/wp-json\/wp\/v2\/posts\/1903\/revisions"}],"predecessor-version":[{"id":2194,"href":"https:\/\/studioimmens.com\/en\/wp-json\/wp\/v2\/posts\/1903\/revisions\/2194"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/studioimmens.com\/en\/wp-json\/wp\/v2\/media\/2096"}],"wp:attachment":[{"href":"https:\/\/studioimmens.com\/en\/wp-json\/wp\/v2\/media?parent=1903"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/studioimmens.com\/en\/wp-json\/wp\/v2\/categories?post=1903"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/studioimmens.com\/en\/wp-json\/wp\/v2\/tags?post=1903"},{"taxonomy":"ai_visibility","embeddable":true,"href":"https:\/\/studioimmens.com\/en\/wp-json\/wp\/v2\/ai_visibility?post=1903"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}