I custom field di WordPress

WordPress è uno degli strumenti di pubblicazione di contenuti più apprezzato in rete. Se non sembra temere rivali come piattaforma di sviluppo blog, negli ultimi tempi si è affermato anche come vero e proprio CMS, prestandosi alla messa in opera di siti di ogni tipo: da siti statici e poco aggiornati, a siti dall’architettura decisamente complessa, come siti di e-commerce. Dalla versione 3.0, WordPress dispone di tassonomie multiple e tipi di post personalizzati, che rendono il software utilizzabile per ogni tipo di progetto web. Queste nuove features, però, non sono sempre così innovative quanto ci si potrebbe attendere.

WordPress, infatti, dispone di campi che permettono di associare meta-informazioni ai post e alle pagine del sito, definiti custom fields.

Si tratta di campi che permettono di utilizzare coppie chiave/valore che rimangono associate al post. I dati possono essere mandati a video o utilizzati per creare delle query che permettono di filtrare i post in base alla presenza di un dato custom field.

Gli utilizzi possibili dei custom fields sono praticamente infiniti: l’unico limite è la fantasia. In rete si trovano centinaia di esempi, molti dei quali estremamente utili (in fondo al post vi propongo alcuni articoli).
L’utilizzo più semplice cui si prestano è quello di associare dati testuali da mandare a video. È possibile personalizzare il riassunto del post (aka excerpt), modificare il permalink del titolo, aggiungere ai singoli post dei tag meta per una migliore indicizzazione, … La lista potrebbe continuare.

Qui proponiamo un primo semplice esempio che mostra come associare più autori allo stesso post o una linkografia. Nelle prossime settimane ne proporremo altri.

Come associare un elenco di link ad un post

Nell’impostazione predefinita di WordPress, i custom fields sono costituiti da semplici coppie testuali nome/valore.

Come visualizzare nel front-end i valori dei campi?

Aprite il file single.php del vostro tema (o del vostro child theme) è inserite, nel punto del template in cui volete visualizzare i valori del campo, il seguente codice:

echo get_post_meta( $post->ID, 'nome-campo', true);

Il tag get_post_meta() restituisce il valore di uno o più custom field individuati dalla chiave nome-campo. Il primo argomento è l’ID del post corrente (supponiamo di operare all’interno del loop); il secondo argomento è il nome del campo; infine il terzo argomento stabilisce se la funzione debba restituire una stringa di testo (true), oppure un array (false).

Ciò significa che il nome del campo non deve essere univoco. È possibile, infatti, assegnare a più custom fields lo stesso nome, per ottenere un array di elementi. Se volessimo associare tre autori allo stesso post, potremmo creare tre campi “autore” con tre valori diversi.

Invece di un elenco di autori, si potrebbe utilizzare lo stesso criterio per generare una sitografia o una bibliografia in coda all’articolo. Supponiamo, ad esempio, di avere 4 campi la cui chiave è ‘link’. Il valore del custom field potrebbe essere una semplice stringa di testo, ma anche un collegamento ipertestuale (i custom fields accettano codice HTML), come mostra la figura che segue.

Ora apriamo il file single.php del nostro tema e aggiungiamo il seguente codice all’interno del loop, subito al di sotto del contenuto del post o della pagina. Se lavoriamo con il tema twenty eleven, dovremo aprire il file loop-single.php, e cercare l’istruzione (riga 33).
ecco il codice da aggiungere:

$links = get_post_meta( $post->ID, 'link', false);
if( $links ){
  ?>
    <ul>
    <?php foreach( $links as $link){ ?>
      <li><?php echo $link; ?></li>
    <?php } ?>
    </ul>
  <?php
}
?>

In pratica abbiamo verificato l’esistenza di $links: in caso positivo abbiamo generato una lista di link. Dato che i custom fields accettano codice HTML, abbiamo inserito i tag già in fase di creazione del post. Volendo, avremmo potuto anche aggiungere note di commento e altri elementi HTML. La figura YYY mostra il risultato a video:

Un modo leggermente diverso di fare la stessa cosa è il seguente:

<?php 
$authors = get_post_meta( $post->ID, 'autore', false);
if( count($authors) > 0 ){
    ?>
    <p>Gli autori del post: <?php echo implode(", ", $authors); ?></p>
    <?php
}
?>

Infine, propongo un terzo approccio, leggermente più creativo. Il custom field accetta qualunque testo venga inserito. Abbiamo detto, infatti, che è possibile inserire codice HTML. E se inserissimo un oggetto JSON? Per ogni campo author, ad esempio, potremmo inserire la seguente stringa:

{"nome":"carlo","url":"http://www.carlo.com"}

Ovviamente, potrebbe essere qualunque serie di dati opportunamente strutturati. Per visualizzare i valori dei campi, basterà il codice che segue:

<?php 
$authors = get_post_meta( $post->ID, 'author', false );
if( $authors ){
  foreach( $authors as $a ){
    $j = json_decode( $a );
    if( $j->url ){
      echo '<a href="' . $j->url . '">' . $j->name . '</a> ';
    }else{
      echo $j->name . ' ';
    }
  }
}
?>

Il terzo argomento di get_post_meta ci fornisce un array di dati testuali. I singoli elementi non sono altro che oggetti JSON in formato testo. Andremo a decodificare ogni singolo elemento dell’array $authors, in modo da avere, per ogni ripetizione del ciclo foreach(), un oggetto JSON. A questo punto si accede ai singoli elementi attraverso la normale sintassi degli oggetti.

Sebbene estremamente efficiente, questa soluzione ha come contropartita una certa difficoltà di gestione: eventuali errori in fase di inserimento comprometterebbero la corretta visualizzazione dei dati. Il problema potrebbe, però, essere risolto creando un Custom meta box (ne parleremo in futuro).

Concludiamo qui questa prima breve introduzione ai custom fields. Nelle prossime settimane proporremo qualche idea con strutture dati leggermente più articolate.

Sui Custom fields:

Annunci