Archived post from my old blog (2007–2016), restored from the Wayback Machine. It is published as written at the time, in Italian; tools and versions are likely out of date.
WordPress ACF: popolare i campi aggiuntivi per i post già immessi
Prosegue imperterrita la mia fase di lavoro con WordPress
Sto usando AdvancedCustomFilelds e siccome ovviamente il committente dice che i campi decisi in fase di analisi non sono sufficienti tocca aggiungerne a contenuto già inserito
Il problema sorge se si usano i campi aggiuntivi per fare gabole di qualche genere nei template: se ad esempio si usa un campo radio o checkbox per fare un ordinamento di categoria bisogna che il campo sia realmente popolato per tutti
Questo è vero se si vuole usare la funzione messa a disposizione dal plugin ACF get_field_object($field_name,$post_id,$options) che se il campo nel post corrente del loop non è popolato restituisce un bel nullo
Le alternative sono sostanzialmente due: recuperare la definizione del campo dal db tramite una query “cruda” o fare un update dei campi che necessitano di essere aggiornati (creati)
Io propendo per la seconda ipotesi dato che mi sembra più elegante e meno `martellata`
Per eseguirla dovremo fare due query di INSERT a mano nel db per ogni nuovo campo che avremo aggiunto. Per eseguirle ci servono quattro informazioni (fra parentesi i valori nel mio esempio):
- l’id del campo (field_51ba2e16735b8)
- il nome che gli abbiamo assegnato (tipologia_principale)
- il nome del tipo di post (azienda)
- il valore di default che vogliamo immettere (Ristorante)
L’id del campo è disponibile nell’interfaccia di amministrazione di ACF fra le “Screen Options” e assomiglia a qualcosa come field_51ba2e16735b8
Le query sono queste:
insert into wp_postmeta
select null, ID , '_tipologia_principale', 'field_51ba2e16735b8'
from wp_posts
LEFT JOIN wp_postmeta ON (ID = post_id AND meta_value='field_51ba2e16735b8')
WHERE post_type like 'azienda'
AND meta_id is null;
insert into wp_postmeta
select null, ID , 'tipologia_principale', 'Ristorante'
from wp_posts
LEFT JOIN wp_postmeta ON (ID = post_id AND meta_key='tipologia_principale' )
WHERE post_type like 'azienda' AND meta_id is null;
Da notare nella prima query l’inserimento della meta_key che corrisponde al nome del campo con una _ davanti
La Left Join serve per evitare di popolare eventuali post che abbiano già il campo per qualsivoglia motivo
Che abbiate 5 post o 1000 in questo modo potete aggiungere campi custom come piovesse.
La modifica nel codice del plugin per ottenere lo stesso risultato sarebbe semplice, ma dato che non è open source non posso/voglio applicarla e dato che è open source l’ho forkato su github e appena riesco faccio modifica e pull request