WordPress ACF: popolare i campi aggiuntivi per i post già immessi

dicembre 16, 2012
By

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):

  1. l’id del campo (field_51ba2e16735b8)
  2. il nome che gli abbiamo assegnato (tipologia_principale)
  3. il nome del tipo di post (azienda)
  4. 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

Tags: , ,

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *


*