Se fate spesso uso di WordPress e dei suoi plugin, prima o poi vi siete senz’altro imbattuti in uno shortcode API.
Di cosa si tratta? Come spiega la documentazione, sono «un insieme di funzioni per creare un macro codice all’interno del contenuto di un post». Nella pratica, gli shortcode possono essere visti come alias da sostituire: quando nel testo di un articolo compare una determinata stringa, questa viene sostituita da un codice specifico.
Per esempio, nel content di un post potreste trovare uno shortcode come questo, che permette di aggiungere una photo gallery nella pagina:
1 |
[myshortcode-gallery id=1] |
Un sistema comodo per aggiungere codice all’interno di un articolo: basta scrivere lo shortcode nel punto voluto del testo e, alla stampa del content, WordPress si occuperà di convertirlo.
Creare uno shortcode personalizzato
Esiste naturalmente la possibilità di creare uno shortcode personalizzato, che stampi un macro codice creato da noi.
WordPress ci mette a disposizione delle funzioni per la gestione degli shortcode. Andiamo a vederle sommariamente:
1 2 3 4 5 6 7 8 9 10 11 12 |
//registra un nuovo shortcode //$tag è lo shortcode scritto da noi, $func è la funzione di conversione function add_shortcode($tag, $func) //rimuove un determinato shortcode ($tag) function remove_shortcode($tag) //rimuove tutti gli shortcode function remove_all_shortcodes() //esegue tutti gli shortcode che trova nel testo passato ($content) function do_shortcode($content) |
Prima di vedere un esempio concreto, consideriamo che l’uso degli shortcode ha anche qualche limitazione:
– gli shortcode devono essere univoci: se incontra due shortcode con lo stesso nome, il codice sovrascriverà il primo e terrà solo il secondo.
– gli shortcode non accettano l’uso di parentesi quadre nei suoi parametri (es: [tag attributo=”[valore]”] )
– uno shortcode può internare un altro shortcode; ma uno shortcode non può contenere se stesso (quindi non può iterare se stesso).
Un esempio
Riprendiamo l’esempio della documentazione, che è minimale e chiaro da capire, e vediamo come possiamo costruire uno shortcode personalizzato.
Quello che vogliamo realizzare è uno shortcode di questo tipo:
1 |
[myshortcode foo="bar" bar="bing"] |
Quando richiamato nel content, sarà convertito in un array associativo, le cui chiavi e valori saranno passati come parametri alla funzione che andremo a costruire:
1 |
array( 'foo' => 'bar', 'bar' => 'bing' ) |
Diamo un’occhiata adesso alla funzione da creare:
1 2 3 4 5 6 7 8 9 10 |
//funzione shortcode personalizzata function bartag_func( $atts ) { extract( shortcode_atts( array( 'foo' => 'something', 'bar' => 'something else', ), $atts ) ); return "foo = {$foo}"; } add_shortcode( 'myshortcode', 'bartag_func' ); |
Il codice non è complicato. Non fa altro che prendere come parametri i valori degli array (foo=”bar” e bar=”bing”) e li elabora. Notare che questi attributi sono opzionali: se non vengono passati, i valori degli attributi saranno foo=”something” e bar=”something else”.
In questo caso la funzione non fa altro che ritornare « foo={valore passato all’attributo ‘foo’} », ma possiamo personalizzarlo a piacere.
Infine, con add_shortcode() lo facciamo registrare tra gli shortcode, in modo che WordPress sappia di doverlo interpretare.
Se dobbiamo estrapolare gli shortcode dal resto del content
Gli shortcode saranno inseriti all’interno dell’articolo e pertanto stampati a video insieme al content.
Spesso, però, gli shortcode sono creati da plugin e personalizzarli risulta ostico.
Nel mio caso, ho dovuto far ricorso a una slide creata da plugin: il cliente aveva necessità di personalizzare il foglio di stile, separando la slide dal resto del content. Come fare in questi casi?
La cosa più rapida è estrarre lo shortcode e separarlo dal content, in modo da poterlo gestire autonomamente con i css. Nel mio caso era semplice: al cliente dicevo di inserire lo shortcode prima di tutto il testo, in modo da agevolarmi l’esportazione; ma con un piccolo miglioramento, potreste estrapolare lo shortcode da qualsiasi punto del content.
Il trucchetto che ho usato è immediato:
1 2 3 4 5 6 7 8 |
$descrizione=get_the_content(); //intero content $pos=strpos($descrizione, ']')+1; //posizione della prima ] $slide=substr($descrizione, 0, $pos); //shortcode della slide $description=trim(str_replace($slide, '', $descrizione)); //descrizione senza la slide echo do_shortcode($slide); //converto lo shortcode della slide in codice html echo $description; //stampo solo la descrizione senza la slide |
Documentazione ufficiale di WordPress sugli Shortcode API
(1) http://www.masquewordpress.com/ejecutar-widgets-con-shortcodes/