<

Foreach

Ultima modifica: 14 Novembre 2024

Foreach è uno shortcode esclusivo del wordpress Gpci framework e serve a replicare il controllo foreach ma inline invece che a livello di blocco. Può essere utile ad esempio per generare parti di codice javascript dinamicamente da campi personalizzati (come nei dati strutturati), ad annidare foreach in altri foreach (a livello blocco) per averli più facilmente visibili e in tutte quelle situazioni in cui creare un blocco nuovo ha poco senso. I dati vengono estratti esattamente come nel controllo, cioè tramite lo shortcode globals. Per ora non è prevista una paginazione, se utile verrà introdotta in futuro. Per ora non è contemplato il nesting tra shortcodes foreach, anche se dovrebbe funzionare correttamente questo shortcode non è pensato per complicare il tutto ma semplificarlo.

Attributi dello shortcode

E' importante apecificare subito che questo shortcode è di tipo enclosing quindi verrà utilizzato nella seguente struttura:

[foreach attributo="valore"]
  Contenuto da ripetere
[/foreach]

Anche in questo caso abbiamo 2 attributi importanti che funzionano in modo combinato esattamente come la conversione dinamica. Il risultato deve essere un array oppure un numero, se risulterà un array vuoto o il numero zero non verrà generato alcun contenuto:

type

Tipo di campo da ottenere, i valori normalmente usati saranno:

  • mb - ottiene il valore di un campo personalizzato
  • functionwhitelisted - ottiene il valore di una funzione in whitelist
  • global - ottiene il valore di una globale php controllata

Per la lista di tutti i possibili valori leggere il parametro type della funzione GpciContentTypeConversion. Notare che funzioni php, costanti php e stringhe php non sono ammesse e genereranno un messaggio di errore senza eseguire nulla.

data

Dato da ottenere, sono gli stessi descritti nella conversione dinamica con le stesse limitazioni.

index

Stringa in cui inserire un identificatore utilizzando lettere, numeri trattini e underscores. Sarebbe sempre meglio che fosse unico nella pagina. Il valore di default se non specificato l'attributo è idshortcode.

functions

Questo argomento serve a manipolare la stringa finale di ritorno subito prima di generarla, le funzioni vengono eseguite alla fine del foreach. Si inserisce il nome di una o più funzioni separate da una virgola (esempio: wpautop,funzionepersonalizzata), se le funzioni esistono e sono in whitelist (ricordarsi di aggiungerle!) il valore verrà processato da ogni funzione nell'ordine inserito prima di essere generato. Le funzioni devono prendere in ingresso un parametro come il valore in ingresso (probabilmente stringa o numero) e ritornarlo alla fine dopo le modifiche. Se le funzioni non esistono o non sono in whitelist lo shortcode ritornerà con una stringa messaggio di errore relativo (ricordarsi che le funzioni vengono processate una per volta quindi potrebbero esserne ad esempio eseguite 2 e la terza potrebbe generare l'errore). Vedi esempi per maggior chiarezza.

Esempi

Generiamo un contenuto statico ripetuto 3 volte:

[foreach type="integer" data="3"]+1[/foreach]

Risultato: +1+1+1

Generiamo un contenuto statico+dinamico da un campo personalizzato in una pagina impostazioni:

[foreach type="mb" data="esempio_ripetizione,opzionisito,object_type:setting"]
"[globals data="foreach,idshortcode,value"]",[/foreach]

Risultato:
"primo valore",
"secondo valore",
"terzo valore",

Come sopra ma eliminando l'ultima virgola:

[foreach type="mb" data="esempio_ripetizione,opzionisito,object_type:setting" functions="RemoveFromLastComma"]
[globals data="foreach,idshortcode,value"][/foreach]

Risultato:
"primo valore",
"secondo valore",
"terzo valore"

Genera dati strutturati in json dalla query archivio (è necessario inserire il blocco gutenberg globals all'interno della query nominando la globale loop)

"itemListElement":[
  [foreach type="global" data="custom,loop" functions="RemoveFromLastComma"]{
    "@type":"ListItem",
    "position":[globals data="foreach,idshortcode,order"],
    "url":"[globals data="foreach,idshortcode,value"]"
  },[/foreach]		
]
[globals data="foreach,idshortcode,value"][/foreach]

Risultato di esempio:

"itemListElement":[
  {
    "@type": "ListItem",
    "position": 1,
"url":"https://www.dominio.com/blog/ricetta/tagliatelle-al-ragu-vegetale/"
  },
  {
    "@type": "ListItem",
    "position": 2,
    "url":"https://www.dominio.com/blog/ricetta/tagliatelle-al-ragu-bolognese/"
  },
  {
    "@type": "ListItem",
    "position": 3,
    "url":"https://www.dominio.com/blog/ricetta/tortelloni-burro-e-salvia/"
  }	
]