{"id":1932,"date":"2026-04-26T10:16:50","date_gmt":"2026-04-26T10:16:50","guid":{"rendered":"https:\/\/studioimmens.com\/shortcode-personalizzati-wordpress-guida\/"},"modified":"2026-07-16T17:05:12","modified_gmt":"2026-07-16T15:05:12","slug":"shortcode-personalizzati-wordpress-guida","status":"publish","type":"post","link":"https:\/\/studioimmens.com\/en\/shortcode-personalizzati-wordpress-guida\/","title":{"rendered":"Shortcode personalizzati WordPress: guida"},"content":{"rendered":"<h2>Cosa sono gli shortcode di WordPress<\/h2>\n<p>Gli shortcode sono frammenti di codice racchiusi tra parentesi quadre che WordPress interpreta ed esegue per generare contenuti dinamici all&#8217;interno di post, pagine e widget. Introdotti in WordPress 2.5, permettono agli utenti di inserire funzionalit\u00e0 complesse senza scrivere codice PHP.<\/p>\n<p>La sintassi base \u00e8 <code>[nomeshortcode]<\/code>. Gli shortcode possono accettare attributi (<code>[nomeshortcode attr1=\"valore1\" attr2=\"valore2\"]<\/code>) e contenuto racchiuso (<code>[nomeshortcode]contenuto[\/nomeshortcode]<\/code>). WordPress li processa durante il rendering della pagina, sostituendoli con l&#8217;output generato dal codice PHP associato.<\/p>\n<h2>Quando usare gli shortcode<\/h2>\n<p>Gli shortcode sono ideali per:<\/p>\n<ul>\n<li>Inserire elementi dinamici in posizioni specifiche del contenuto (bottoni, griglie, call-to-action)<\/li>\n<li>Aggiungere funzionalit\u00e0 senza modificare i file del tema<\/li>\n<li>Creare componenti riutilizzabili in tutto il sito<\/li>\n<li>Offrire agli utenti un modo semplice per interagire con il plugin<\/li>\n<\/ul>\n<p>Oggi Gutenberg ha ridotto la necessit\u00e0 di shortcode per molti casi d&#8217;uso, ma rimangono preziosi per plugin, funzionalit\u00e0 legacy e integrazioni che devono funzionare anche con l&#8217;editor classico. Inoltre, gli shortcode possono essere usati all&#8217;interno di blocchi Gutenberg, rendendoli compatibili con entrambi gli editor.<\/p>\n<h2>Creare il primo shortcode con add_shortcode()<\/h2>\n<p>Per creare uno shortcode, usa la funzione add_shortcode() che accetta due parametri: il nome dello shortcode (tag) e la funzione callback che ne genera l&#8217;output. La callback riceve tre parametri: $atts (array degli attributi), $content (contenuto racchiuso, se presente) e $tag (il nome dello shortcode).<\/p>\n<p>Esempio base: uno shortcode che mostra la data corrente. La funzione restituisce la data formattata e WordPress la inserisce nel punto del contenuto in cui \u00e8 stato posizionato lo shortcode. Ricorda: la callback deve sempre restituire (return) l&#8217;output, non stamparlo (echo).<\/p>\n<h2>Gestire gli attributi con shortcode_atts()<\/h2>\n<p>Gli attributi rendono gli shortcode flessibili e riutilizzabili. Usa shortcode_atts() per definire valori predefiniti e unirli con gli attributi passati dall&#8217;utente. Questa funzione garantisce che tutti gli attributi abbiano un valore e protegge da attributi non autorizzati.<\/p>\n<p>Esempio: uno shortcode bottone che accetta attributi come colore, url e testo. shortcode_atts() imposta &#8220;blu&#8221; come colore predefinito, &#8220;#&#8221; come url predefinito e &#8220;Clicca qui&#8221; come testo predefinito. Se l&#8217;utente non specifica un attributo, viene usato il valore di default.<\/p>\n<p>Sanitizza sempre gli attributi: usa esc_url() per URL, esc_attr() per valori da inserire in attributi HTML, intval() per numeri. Non fidarti mai dell&#8217;input dell&#8217;utente, anche se \u00e8 un amministratore.<\/p>\n<h2>Shortcode con contenuto racchiuso<\/h2>\n<p>Quando lo shortcode racchiude del contenuto tra tag di apertura e chiusura, la callback riceve il contenuto come secondo parametro ($content). Questo permette di creare wrapper: elementi che avvolgono e trasformano il contenuto esistente.<\/p>\n<p>Esempio: uno shortcode [highlight]testo[\/highlight] che avvolge il testo in un elemento con sfondo giallo. La callback restituisce il contenuto originale racchiuso in un tag con classe CSS. Puoi combinare attributi e contenuto racchiuso: [highlight colore=&#8221;verde&#8221;]testo importante[\/highlight].<\/p>\n<p>Usa sempre do_shortcode() sul contenuto racchiuso se vuoi permettere shortcode annidati. Senza do_shortcode(), gli shortcode all&#8217;interno del contenuto non vengono processati.<\/p>\n<h2>Shortcode complessi: esempi pratici<\/h2>\n<h3>Tabs<\/h3>\n<p>Uno shortcode per tabs permette di creare interfacce a schede nel contenuto. La struttura prevede uno shortcode contenitore [tabs] che racchiude pi\u00f9 shortcode [tab titolo=&#8221;Scheda 1&#8243;]contenuto[\/tab]. Il PHP genera HTML con classe JavaScript per l&#8217;interattivit\u00e0, includendo gli script necessari solo tramite wp_enqueue_script().<\/p>\n<h3>Accordion<\/h3>\n<p>Simile ai tabs, l&#8217;accordion usa uno shortcode contenitore [accordion] e item [accordion-item titolo=&#8221;Domanda&#8221;]risposta[\/accordion-item]. Ogni item mostra un&#8217;intestazione cliccabile che rivela il contenuto. L&#8217;implementazione richiede JavaScript minimo, anche con CSS puro usando l&#8217;hack del checkbox.<\/p>\n<h3>Bottoni<\/h3>\n<p>Uno shortcode bottone versatile accetta attributi come url, colore, dimensione, icona e target. Genera un tag <a> con classi CSS predefinite. Esempio: [bottone url=&#8221;https:\/\/esempio.com&#8221; colore=&#8221;rosso&#8221; dimensione=&#8221;grande&#8221;]Scarica ora[\/bottone].<\/p>\n<h3>Colonne<\/h3>\n<p>Le colonne permettono layout a griglia nel contenuto. Struttura: [colonne] [colonna larghezza=&#8221;1\/2&#8243;]testo sinistra[\/colonna] [colonna larghezza=&#8221;1\/2&#8243;]testo destra[\/colonna] [\/colonne]. La larghezza pu\u00f2 essere espressa in frazioni (1\/2, 1\/3, 2\/3) o percentuali. Il CSS converte le frazioni in percentuali usando calcoli semplici.<\/p>\n<h2>Best practice per gli shortcode<\/h2>\n<p>Seguire convenzioni solide previene conflitti e problemi di manutenzione:<\/p>\n<ul>\n<li><strong>Prefisso unico:<\/strong> usa un prefisso per tutti i tuoi shortcode (es. mp_bottone, mp_tabs). Previene conflitti con altri plugin.<\/li>\n<li><strong>Nomi descrittivi:<\/strong> shortcode come &#8220;mp_bottone_download&#8221; sono meglio di &#8220;mp_btn1&#8221;.<\/li>\n<li><strong>Output pulito:<\/strong> la callback deve restituire HTML valido e ben formattato. Evita tag non chiusi o markup errato.<\/li>\n<li><strong>No a eval e base64:<\/strong> non usare mai funzioni pericolose negli shortcode. Un attaccante potrebbe sfruttarle se riesce a modificare i post.<\/li>\n<li><strong>Caricare script solo se necessario:<\/strong> usa wp_enqueue_script() e wp_enqueue_style() condizionalmente, verificando se lo shortcode \u00e8 presente nel contenuto con has_shortcode().<\/li>\n<li><strong>Non hard-codare output:<\/strong> usa sempre __() e _e() per stringhe di testo, cos\u00ec il plugin \u00e8 traducibile.<\/li>\n<\/ul>\n<h2>Evitare l&#8217;HTML injection<\/h2>\n<p>La sicurezza \u00e8 fondamentale negli shortcode. Utenti malintenzionati potrebbero passare attributi che iniettano codice JavaScript o HTML. Proteggiti in questi modi:<\/p>\n<ul>\n<li>Usa wp_kses() per filtrare l&#8217;HTML consentito nel contenuto racchiuso<\/li>\n<li>Usa esc_attr() per attributi HTML (class, style, id)<\/li>\n<li>Usa esc_url() per URL<\/li>\n<li>Limita i valori ammessi per attributi enumerativi (colore: solo &#8220;rosso&#8221;, &#8220;blu&#8221;, &#8220;verde&#8221;)<\/li>\n<li>Non usare attributi che accettano codice arbitrario<\/li>\n<\/ul>\n<p>Anche se solo gli amministratori e gli editor possono modificare i post, un attacco XSS potrebbe permettere a un utente con ruolo inferiore di iniettare codice attraverso uno shortcode non protetto.<\/p>\n<h2>Alternative moderne: Gutenberg blocks<\/h2>\n<p>Con Gutenberg, i blocchi sono l&#8217;evoluzione naturale degli shortcode. Un blocco Gutenberg offre un&#8217;interfaccia visuale per la configurazione, un&#8217;anteprima in tempo reale e non richiede all&#8217;utente di ricordare sintassi testuali.<\/p>\n<p>Tuttavia, gli shortcode non scompariranno. Sono ancora il modo migliore per:<\/p>\n<ul>\n<li>Fornire funzionalit\u00e0 a utenti che usano l&#8217;editor classico<\/li>\n<li>Inserire elementi in widget (testo) e campi ACF<\/li>\n<li>Integrazioni con plugin di terze parti che supportano solo shortcode<\/li>\n<li>Backward compatibility con siti esistenti che usano massicciamente shortcode<\/li>\n<\/ul>\n<p>Se sviluppi un plugin nuovo, considera di supportare entrambi: un blocco Gutenberg per l&#8217;editor moderno e uno shortcode per compatibilit\u00e0. Puoi persino registrare il blocco in modo che generi shortcode nel contenuto salvato.<\/p>\n<h2>Shortcode nelle aree widget<\/h2>\n<p>Di default, WordPress non processa gli shortcode nei widget di testo. Per abilitarli, aggiungi nel functions.php del tema: <code>add_filter('widget_text', 'do_shortcode');<\/code>. Con i widget blocchi di Gutenberg, gli shortcode funzionano automaticamente inserendoli in un blocco &#8220;Shortcode&#8221;.<\/p>\n<h2>Conclusione<\/h2>\n<p>Gli shortcode rimangono uno strumento potente e flessibile nell&#8217;arsenale dello sviluppatore WordPress. Nonostante l&#8217;avvento di Gutenberg, saper creare shortcode \u00e8 una competenza fondamentale: permette di sviluppare plugin versatili, mantenere compatibilit\u00e0 con installazioni eterogenee e offrire funzionalit\u00e0 immediate agli utenti. Inizia con shortcode semplici e, man mano che acquisisci confidenza, passa a strutture pi\u00f9 complesse come tabs e accordion. Il limite \u00e8 solo la tua creativit\u00e0.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Cosa sono gli shortcode di WordPress Gli shortcode sono frammenti di codice racchiusi tra parentesi quadre che WordPress interpreta ed esegue per generare contenuti dinamici all&#8217;interno di post, pagine e widget. Introdotti in WordPress 2.5, permettono agli utenti di inserire funzionalit\u00e0 complesse senza scrivere codice PHP. La sintassi base \u00e8 [nomeshortcode]. Gli shortcode possono accettare [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":2052,"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 di WordPress Gli shortcode sono frammenti di codice racchiusi tra parentesi quadre che WordPress interpreta ed esegue per generare contenuti dinamici all'interno di post, pagine e widget. Introdotti in WordPress 2.5, permettono agli utenti di inserire funzionalit\u00e0 compless...","ai_intent":"informative","ai_related_resources":"","ai_priority":5,"ai_entity_type":"Article","ai_is_based_on":"https:\/\/blog.studioimmens.com\/shortcode-personalizzati-wordpress-guida\/","ai_citations":"","ai_mentions":"","ai_speakable_selector":"","ai_chunk_hints":"Shortcode, personalizzati, WordPress:, guida","footnotes":""},"categories":[133],"tags":[277],"ai_visibility":[],"class_list":["post-1932","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\/1932","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=1932"}],"version-history":[{"count":1,"href":"https:\/\/studioimmens.com\/en\/wp-json\/wp\/v2\/posts\/1932\/revisions"}],"predecessor-version":[{"id":2223,"href":"https:\/\/studioimmens.com\/en\/wp-json\/wp\/v2\/posts\/1932\/revisions\/2223"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/studioimmens.com\/en\/wp-json\/wp\/v2\/media\/2052"}],"wp:attachment":[{"href":"https:\/\/studioimmens.com\/en\/wp-json\/wp\/v2\/media?parent=1932"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/studioimmens.com\/en\/wp-json\/wp\/v2\/categories?post=1932"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/studioimmens.com\/en\/wp-json\/wp\/v2\/tags?post=1932"},{"taxonomy":"ai_visibility","embeddable":true,"href":"https:\/\/studioimmens.com\/en\/wp-json\/wp\/v2\/ai_visibility?post=1932"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}