In alcune parti del plugin come nel template o nei campi calcolati è possibile inserire del codice personalizzato attraverso un template engine.
Questo si divide in due concetti principali le variabili e le funzioni.
Puoi altrimenti eseguire le istruzioni del template engine attraverso lo shortcode adfo_tmpl. Aggiungi dall'editor un blocco shortcode e scrivi:
[adfo_tmpl]2*2 = [^MATH 2 * 2] [/adfo_tmpl]
Nelle liste, ad esempio, i dati estratti sono salvati nella variabile [%data]. Tutte le variabili vengono richiamate con shortcode che iniziano per %. Le funzioni invece ocn shortcode che iniziano con ^ e si comportano sempre nello stesso modo in ogni parte del codice.
[%data.post_title]Stamperà il titolo di un post in una lista in cui vengono estratti i post.
[^MATH 3 + 1 + .5] [// 4.5 //]
[^MATH 3+2 * 2] [// 7 //]
[^MATH (3+2) * 2] [// 10 //]
[^MATH 2^3] [// 8 (2*2*2) //]
[^MATH 9^.5] [// 3 (radice quadra) //]
Si possono usare gli operatori di relazione > >= < <= != o <> in, not in, !
[^MATH 2 > 1 ] [// 1 //]
[^MATH 2 <> 1 ] [// 1 //]
[^MATH 2 in ["1","3","4"] ] [// 0 //]
[^MATH 2 not in ["1","3","4"] ] [// 1 //]
In math è possibile usare anche gli operatori logici: AND && OR || Tornerà 1 se vero 0 se falso
[^MATH 4 > 5 OR (3 == 3 AND 2 == 2) ] [// 1 //]
Conditional statement. If the condition is met, the code between [^IF] and [^ELSE] is executed, otherwise the code between [^ELSE] and [^ENDIF] is executed.
[^SET a=3] [^IF [%a]*2 == 6] YES [^ENDIF]
Cicla i dati.
<ul>
[^FOR EACH=[%data] KEY=mykey VAL=myItem]
<li>[%mykey] = [%myItem]</li>
[^ENDFOR]
</ul>
[// Oppure se non si usano KEY e VAL //]
<ul>
[^FOR EACH=[%data]]
<li>[%key] = [%item]</li>
[^ENDFOR]
</ul>
Genera un elenco di titoli linkabili dei post. Per interrompere un ciclo si può usare l'istruzione break.
<ul>
[^FOR EACH=[^POST TYPE=post]]
<li>[%item.title_link]</li>
[^ENDFOR]
</ul>
<ul>
[^FOR EACH=["foo","bar","pippo"] VAL=var]
[^break [%var] == "bar"]
<li>[%var]</li>
[^ENDFOR]
</ul>
The above example will output:: Esegue un ciclo fin tanto che la condizione viene soddisfatta. Per maggiori informazioni sulle condizioni puoi vedere MATH
[^WHILE [%var set+=1] < 10]
[^SET ris.[]=[%var]]
[^BREAK [%var]>=5]
[^ENDWHILE]
[^RETURN [%ris SEP=;]]
The above example will output:: Interrompe l'esecuzione di un ciclo FOR o WHILE o del blocco che si sta eseguendo.
Break viene eseguito se è soddisfatta una condizione. Se non vengono inserite condizioni allora blocca sempre L'esecuzione
[^IF 3==3]
Lorem ipsum dolor sit amet,
[^BREAK]
consectetur adipiscing
[^ENDIF]
Donec et accumsan nulla, at tempus metus
Non stama "consectetur adipiscing" perché successivo al break, ma stamap "Donec ..." perché fuori dal blocco if. Break infatti interrompe l'esecuzione di un blocco o di un ciclo.
The above example will output::I commenti non vengono stampati nella pagina
[// commento //]
Cattura il codice all'interno del tag e lo imposta in una variabile senza eseguirlo. Il codice verrà poi eseguito quando la variabile verrà richiamata. È la cosa più vicina ad una funzione che c'è.
Carica un utente wordpress e i suoi metadata. Se non si passa nessun dato ritorna l'utente corrente
I parametri che possono essere passati sono:
id|slug|email|login per il caricamento di un singolo utente.
Se non si passa nessun parametro allora viene caricato
l'utente che si è loggato
[^user]
[^IF [^user]==""]
non sei loggato
[^else]
Sei loggato
[^endif]
Esegue un codice diverso se si è loggati oppure no.
Torna la data di oggi
[^now]
[^now date-format="d-m-Y" date-modify="+2 days"]
[^now timestamp]
Carica i post di wordpress
Per estrarre un articolo singolo
id= trova il post con un determinato id. Se è un array di id trova tutti i post con quegli array
Per estrarre più articoli
type= Il post_type (post, page ecc...) Di default è post. Se si vogliono caricare le immagini vedi l'alias di [^POST]
cat= trova i post di una determinata categoria o di un gruppo di categorie. Accetta l'id, lo slug oppure un array di id
!cat= trova i post che non sono presenti in una determinata categoria o di un gruppo di categorie. Accetta l'id lo slug oppure un array di id
author= trova i post per un determinato autore. Se è un numero usa l'id altrimenti lo user_nicename (NON IL NOME)
slug= Cerca per lo slug.
tag= Certa un post che abbia almeno uno dei tag selezionati. è possibile scriverli in un oggetto oppure in una stringa.
parent_id= L'id del post padre.
limit= Limita il numero di articoli da visualizzare. Per default 10. metti -1 per averli tutti.
offset= Visualizza gli articoli a partire da
order= Il campo su cui ordinare
ASC Ordine crescente
DESC Ordine decrescente
Mostrare gli articoli associati in un certo periodo di tempo.
year= Gli articoli di un determinato anno (es 2020)
month= Gli articoli di un determinato mese (1-12)
week= Gli articoli di una determinata settimana (week)
day= Gli articoli di un determinato giorno (day)
first= Mostra i primi articoli inseriti. Per default 5. Sostituisce order, asc, desc, limit
last= Mostra gli ultimi articoli inseriti. Per default 5. Sostituisce order, asc, desc, limit
Ricerca nei postMeta:
è possibile cercare nei postmeta inserendo il tipo di filtro nell'attributo meta_query. Se si vogliono ricercare più parametri questi possono essere aggiunti divisi da spazi. In automatico verranno collegati come AND. Se si vogliono aggiungere OR e AND all'interno della ricerca questi vengono inseriti come funzioni. Le condizioni all'interno della funzione vengono collegate dalla congiunzione logica inserita.
meta_query=[: AND(a>=b
OR (
b<=var c!=ccc L IN (3,2,5,3,52,34) ) .c LIKE ("% ")
.d=" [%pippo]" parametro=) c> 2 :]
Altri parametri:
read_more= Il testo da mettere nella variabile link_read_more. Se non presente aggiunge ... . Se light_load è presente il tag è inutilizzabile
image= La dimensione dell'immagine di apertura: thumbnail, medium, large, full. Se non impostata carica post-thumbnail
light_load Esclude dal caricamento i post_meta e altri dati aggiunti per semplificare la gestione dei post. Passare 0 o 1 è opzionale
Se presente l'attributo light_load questi dati non vengono caricati. Se il post type è attachment e mime_type è image, permalink, image e image_link vengono comunque caricati.
A questi si aggiungono tutti i post meta.
[^POSt id=XX for=[:
[%item for=[:[%key]: [%item trim_words]
:]]
:]]
[^POST get={"id":"id","Titolo":"title_link", "Autore"=>"author_name"} type=post tmpl=table]
Carica le immagini
Gli attributi sono gli stessi di [^ POST]. In particolare puoi utilizzare: id = trova l'immagine con un certo id. Se è un array di ID, trova tutte le immagini dagli id dell'array
: image_size = La dimensione dell'immagine di apertura: thumbnail, medium, large, full. Se non è impostato, carica la miniatura post. fit ingrandisce l'immagine alla dimensione massima del suo contenitore (larghezza = 100%). winfit: ridimensiona l'immagine in proporzione allo schermo. Vedere il tutorial 2 per ulteriori informazioni.
Viene aggiunto:
post_id= Trova tutte le immagini collegate ad un singolo post
light_load= è impostato su 0 (nei post è impostato su 1). Se si vuole caricare tutto si deve inserire light_load=0
Ritorna gli stessi parametri di POST
* Se viene inserito light_load=0 questi dati non vengono caricati. Altrimenti non verranno caricati.
A questi si aggiungono tutti i post meta.
[^IMAGE class=my_gallery print=[%item.image] attr={"id":"myGallery"} ]
:]]
Ritorna il post che si sta visualizzando
L'equivalente di get_permalink().
Link come dice il nome stesso serve a generare un link del sito.
Per la scelta della pagina o del post il parametro è page_id. SE page_id non è inserito, il link è alla pagina corrente. Qualsiasi altro parametro inserito viene registrato come nuovo elemento dell'url
<a href="[^LINK page_id=xxx id=yyy action=zzz]">link</a>
[%data.post_title]
Se colleghi a post con post_type personalizzati ricordati di registrare il post_type su function.php del tuo template
add_action( 'init', 'register_my_post_type' );
function register_my_post_type() {
register_post_type(
'my_post_type',
array (
'public' => true,
'rewrite' => array('slug' => 'my_post_type'),
'show_in_menu' => false,
'show_in_nav_menus' => false,
'show_in_rest' => false
)
);
}
Fa un link ad una lista amministrativa. Puoi passare ulteriori parametri per filtrare i dati passati
Esempio: In una lista mostra i dati di un'altra lista filtrati e il bottone per andare a modificare i dati.
1. crea una lista collegata ai post con una colonna post_id.
2. Aggiungi un po' di record collegati ai post.
3. Crea una seconda lista in cui estrai i post di wordpress
4. Sulla nuova lista apri List view formatting e clicca in fondo add row
[^GET_LIST ID=xx post_id=[%data.ID]]
<a href="[^ADMIN_URL id=xx post_id=[%data.ID]]">Edit</a>
Definisce nuove variabili
[^SET variable=value var2=val2]
Per impostare il contenuto di più variabile è possibile scrivere:
[^SET myvar="FOO" mynewvar="bar"]
[%myvar set="FOO"]
La differenza tra le due scritture è che nel primo caso la funzione [^SET ...] imposta una o più variabili senza stamparle, mentre nel secondo esempio la variabile viene impostata e stampata
Gli shortcode possono lavorare anche con contenuti non impostati in variabili:
[%"Ecco il mio testo"] [// stampa il testo //]
[%[1,2,3,4,5,6,7,8,9] ] [// stampa il json dell'array //]
[^SET a="Foo | part1 | part2.3" b=[%a split=|] c=[%b.2 split=.] ] [^RETURN [%c.1]] [// output 3 //]
è possibile inserire istruzioni sia nei valori che nei nomi delle variabili purché si rispetti la regola di non mettere spazi
[^SET ser='a:3:{s:1:"a";i:1;s:1:"b";i:2;s:1:"c";i:3;}' unser={"d":4,"e":5,"f":6}]
[^SET nu=[%ser unserialize]]
[%nu.c] | [%unser.d]
Nell'esempio vengono impostati un array (unser) e una stringa serializzaa (ser). Poi viene settata una nuova variabile nu con l'array estratto da ser, infine viene ciclato unser e i suoi valori vengono inseriti in nu.
Ogni volta che viene chiamata ritorna un numero nuovo di una sequenza numerica
name= Il nome del counter che vuole essere richiamato
start= Il numero da cui vuoi far iniziare il counter
step= il numero di unità di per cui aumentre o diminuire il counter ogni volta che viene chiamato
Torna l'id di un post, identico a get_the_id di wordpress
Cancella tutta la parte di testo fino a quel punto e stampa unicamente il valore del return. Questa funzione è molto utile se state scrivendo un codice che è composto da più righe per evitare che vengano stampta
Non stamperà "Il mio risultato", ma solo il valore di my_var.
Il mio risultato: [^RETURN [%my_var]]
Torna 1 se l'utente è loggato altrimenti 0
Torna 1 se è una pagina amministrativa
[^IS_PAGE_AUTHOR], [^IS_PAGE_ARCHIVE], [^IS_PAGE_TAG], [^IS_PAGE_DATE], [^IS_PAGE_TAX] [^IS_PAGE], [^IS_SINGLE]
Torna 1 se è la pagina richiesta, altrimenti 0
Ritorna i dati del tag o di una categoria
[^GET_TAG.html id=2]
Ritorna i dati dei tag o delle categorie di un post
[^GET_POST_CATS.html post_id=2]
Paramentri item=[%data], dbp_id=xx, action=""
Crea il link per mostrare il dettaglio di una pagina. Funziona solo mentre si sta ciclando una lista
<a href="[^LINK_DETAIL]" class="js-dbp-popup">popup detail</a>
Params item=[%data], dbp_id=xx
Genera una stringa univoca per richiamare il record.
Questo risolve il problema che, se la query è composta da più tabelle, per estrarre una riga specifica bisogna passare gli id di tutte le tabelle.
1. In list view formatting crea un custom code e aggiungi questo codice:
<a href="?k=[^uniq_chars_id]">[^uniq_chars_id]</a>
2. In functions.php aggiungi il seguente codice sostituendo {the_list_id} con l'id della lista che si sta lavorando.
if (isset($_REQUEST['k'])) {
var_dump(admin_form\ADFO::get_detail({the_list_id}, $_REQUEST['k']));
die;
}
Stampa una lista specifica.
Stampa i risultati di un singolo record.
Estrae i dati di un record specifico.
[^GET_LIST_DATA id=xxx tmpl=[:
<h3>[%item.title]</h3>
<p>[%item.description]</p>
:]]
Crea il bottone per scaricare una lista.
Si possono aggiungere variabili o json come valori degli attributi
[%myvar set=[^POST last]]
[%myvar set=["foo","bar"]]
[%myvar set={"a":"foo","b":"bar"}]
Non si possono mettere variabili al posto dei nomi degli attributi
[%myvar [%var]="foo"] [// NON CORRETTO //]
Questo è permesso solo dentro la funzione [^SET ] purché non ci siano spazi
[^SET [%var]="foo"] [// CORRETTO //] [^SET mypost.[%var]="foo"] [// CORRETTO //]
Si possono chiamare i parametri di un oggetto tramite il .*
[%post.title] [%post.0.title]
Questo ritornerà una stringa se c'è un solo post, altrimenti un array di titoli.
Gli attributi modificano una variabile o una funzione. Possono avere un valore associato.
NON SI può mettere lo spazio accanto al simbolo =.
[%"string" uppercase]
Se il valore o l'oggetto è vuoto restituisce il default
[%novar default="foo"]
I valori degli attributi non devono avere spazi.
Se si deve mettere uno spazio bisogna inserire il testo tra virgolette oppure i simboli [: :]. Le virgolette all'interno di un testo già virgolettato devono essere aggiunte col backslash
[%myvar default=foobar] [// corretto //]
[%myvar default=foo bar] [// non corretto //]
[%myvar default=[:foo bar:]] [// corretto //]
[%myvar default="foo bar"] [// corretto //]
[%myvar default='foo bar'] [// corretto //]
Nei risultati estratti da una lista ne ritorna il valore non modificato. Ad esempio in un campo select dove i valori sono sostituiti da label ritorna il valore o in un campo media library ritorna l'id dell'immagine.
[data.column val]
Trasforma una stringa tutta maiuscola
[%"foo" upper]
Trasforma una stringa tutta minuscola
[%"MY FOO" lower]
Trasforma il primo carattere di una stringa in maiuscolo
[%"my foo" ucfirst]
Rimuove i commenti <!-- --> o // o /* */
[^SET myvar=" <div>testo</div> <!-- un commento--> <i>testo</i>"]
[%myvar htmlentities]<br>
[%myvar strip-comment htmlentities]
[^SET myvar="<script> a =\"foo\";
/* other comment
* multiline
*/
alert(a);
</script>"]
[%myvar htmlentities nl2br]<br><hr>
[%myvar strip-comment htmlentities nl2br]
Rimuove tutti i tag html dal testo
Trasforma gli accapi in br
Trasforma i caratteri speciali in entità html
<textarea>[%"</textarea><b>fff</b>" htmlentities]</textarea>
l'esempio mostra come attraverso l'attributo htmlentities è possibile scrivere all'interno di una textarea dei tag html
Accetta un parametro numerico.
Prende i primi n caratteri del testo. Accetta un secondo attributo "more" per aggiungere del testo se left ha effettivamente tagliato la stringa
[%"A1B2C3D4E5F6G7H8I9" left=5 more=" ..."]
se il testo viene tagliato è possibile aggiungere un testo a fine riga utilizzando l'attributo more
[%"Hello George" left=5 more=" ..."]
[%"good afternoon" left=25 more=" ..."]
Nel primo caso taglia il testo e quindi mette il testo dell'attributo more, nel secondo caso non taglia il testo per cui non mette il testo del more
Accetta un parametro numerico.
Prende i primi n caratteri del testo
[%"Hello George" right=6]
Accetta un parametro numerico.
Prende le prime n parole del testo
se il testo viene tagliato è possibile aggiungere un testo a fine riga utilizzando l'attributo more
[%"Hello George how are you?" trim_words=2 more=" [^link id=2 text="..."]"]
Esegue la funzione wordpress sanitize_text_field
Esegue la funzione wordpress esc_url
Rimuove gli spazi prima e dopo in un testo o di tutti i campi di un array
Divide un testo in un array
[^SET a=[%"Hello | World" split="|"]][%a.1] [// World //]
Ritorna 1 se trova la sottostringa o 0 se non lo trova.
[%"Nel mezzo del cammin di nostra vita" search="nostra" ]
Se viene invece passato il parametro replace sostituisce la stringa
[%"Nel mezzo del cammin di notra vita" search="notra" replace="<b>nostra</b>" ]
Mostra il campo se la condizione viene rispettata. La condizione la si può inserire tra virgolette oppure tra parentesi quadre con due punti [: ... :]
[^POST type=post if=[: [%item.id]>30 :] length]
Conta il numero di articoli con id > 30
Imposta il valore di una variabile
[%myvar set="foo"]
set+= o set-= per sommare o sottrarre la variabile passata
Stampa un testo alternativo se la variabile è 0 o vuota.
Stampa un testo alternativo se la variabile è 1.
Stampa un testo alternativo se la variabile è 1.
[^SET a=["foo"] ] [%a count] [%a singular="Item" plural="Items"]
Stampa un testo alternativo se la variabile è maggiore di 1.
[^SET a=["3","23","65"] ] [%a count] [%a singular="Item" plural="Items"]
Stampa un testo alternativo se la variabile è negativa
Nella pagina del dettaglio ritorna l'array degli id del record.
[^SET ids=[%request.dbp_ids decode_ids]] [%ids]
Converte una stringa formattata come un json in un array
[%my_json_var json tmpl[:<p>[%key]=[%item.title]</p>:]]]
Converte una stringa formattata come un serialize php in un array
[%my_serialize_var json tmpl[:<p>[%key]=[%item.title]</p>:]]]
Imposta il numero di valori dopo la virgola da mostrare. Accetta altri due parametri dec_point e thousands_sep
[%"1203.23" decimal=1]<br> [%"1203.23" decimal=1 dec_point=, thousands_sep=.]
Accetta un parametro di testo.
Cambia il formato della data
[%"2020-10-10" date-format='Y']
Accetta sia date, timestamp o stringhe anno mese giorno tutto attaccato o anche con orario
[%"1602288000" date-format="Y-m-d"]
Il seguente esempio prende una variabile item.post_date in formato testo day/month/year, lo converte in year-month-day e stampa Y-m-d H:i:S
[^SET date=[:[%item.post_date left=10 right=4]-[%item.post_date left=5 right=2]-[%item.post_date left=2]:]][%date date-format="Y-m-d H:is"]
Accetta un parametro di testo.
Modifica una data
[%"2020-10-10" date-modify="+2 days"]
Prende una data e imposta l'ultimo giorno del mese
[%"2020-10-10" last-day]
Prende una data e la converte in un timestamp
[%"2020-10-10" timestamp]
Ritorna la differenza in giorni tra due date
Sono passati: [%a set='2001-10-04 10:20:10' datediff-day='2001-09-02 10:30:00']
Ritorna la differenza in minuti tra due date
I campi time vengono salvati in secondi nel database. Questo attributo trasforma i secondi nel formato time hh:mm
I campi time vengono salvati in secondi nel database. Questo attributo trasforma i il valore dal formato time hh:mm in secondi.
Questo attributo calcola il numero di ore da un campo time, quindi in secondi, o da un valore time nel formato hh:mm .
Stampa i dati all'interno di un template. Questo può essere in una variabile*, un template in php esterno oppure scritto all'interno del valore dell'attributo. I dati dentro il template vengono ciclati all'interno della variabile [%item] e [%key] per il nome o il numero della variabile passata.
* Le variabili vengono trasformate, ma il codice al loro interno non viene eseguito per problemi di performace... bisogna mettere [::] allora il codice all'interno se è una singola variabile viene rielaborata!
[^POST post_type=post tmpl=[:<p>[%key]=[%item.title]</p>:]]
[%["1","2","3","4","5"] for=[:
<h2>ID=[%item]</h2>
[^POST id=[%item] tmpl=[:
<p>[%key]=[%item.title]</p>
:]]
:]]
Mostra il campo se la condizione viene rispettata. La condizione la si può inserire tra virgolette oppure tra parentesi quadre con due punti [: ... :]
[^POST type=post if=[: [%item.id]>30 :] length]
Conta il numero di articoli con id > 30
[^POST type=post if=[:[%item.author_name] == 'admin':] ]
Estrae solo gli articoli con autore = 2
TODO può essere passato un parametro aggiuntivo per cui fa la somma di un campo di un oggetto (ad esempio age, fa le somme dell'età degli utenti)
Se è un array conta il numero di righe. Se è una stringa conta il numero di caratteri
[%["bar","foo"] length]<br>
[%"foo" length]
Restituisce solo alcuni determinati campi di un array. Se l'array è associativo sostituisce il nome del campo con la nuova chiave
[^post id=3 fields={"titolo":"title"}]
[^post type=page fields=["id","author","title"]]
[^post type=page fields=id]
[^post type=page fields={"id":"id", "autore":"author"} tmpl=table]
Stampa una tabella i cui titoli sono id e autore.