Nel wordpress Gpci framework è presente in varie zone un sistema di whitelist, serve a permettere a utenti non amministratori di utilizzare funzioni e blocchi gutenberg permessi tramite la conversione dinamica, campi personalizzati, oppure shortcodes.
Funzioni
Le funzioni utilizzabili dagli utenti regolari possono essere aggiunte, rimosse e modificate dagli utenti amministratori, tramite la pagina impostazioni whitelist oppure con php. Per quest'ultimo utilizzo il file options.php è probabilmente il più adatto ma possono essere utilizzati anche hooks oppure il modulo aggiunte di codice. Le funzioni in whitelist sono disponibili nella globale $GLOBALS['gpci']['whitelist']['functions'] che inizialmente sarà un array vuoto, se aggiunte delle funzioni diventerà quindi un array di stringhe contenente i nomi delle funzioni disponibili. Le funzioni invece potranno essere inserite tramite l'opzione funzione in whitelist nella conversione dinamica oppure negli shortcodes che hanno questa possibilità. E' importante notare che i parametri delle funzioni in whitelist non vengono mai specificati dall'utente, inoltre queste funzioni solitamente dovranno ritornare un valore corretto per il contesto d'uso. Esempi:
File options.php
$GLOBALS['gpci']['whitelist']['functions'] = [ 'wpautop' ];
Rende disponibile globalmente la funzione wpautop.
Funzioni inserite nella pagina impostazioni:
get_the_ID
funzionePersonalizzata
Aggiunge globalmente le funzioni get_the_ID e funzionePersonalizzata, quindi in totale avremo in whitelist 3 funzioni globalmente.
Funzioni inserite nel modulo aggiunte di codice (campo php):
$GLOBALS['gpci']['whitelist']['functions'][] = 'get_the_title';
Così avremo una quarta funzione get_the_title disponibile ma solo per la pagina corrente.
E' possibile anche rimuovere una funzione soltanto per una pagina, sempre utilizzando il modulo aggiunte di codice, ad esempio con:
$GLOBALS['gpci']['whitelist']['functions'] = array_diff( $GLOBALS['gpci']['whitelist']['functions'], ['get_the_ID'] );
In questo caso la funzione get_the_ID sarà rimossa solo per la pagina corrente.
Funzioni sempre in whitelist
E' possibile utilizzare alcuni parametri e funzioni che saranno sempre in whitelist senza bisogno di farlo manualmente e saranno valutate prima delle altre:
- ++: se il valore è numerico lo aumenta di uno
- --: se il valore è numerico lo diminuisce di uno
- localize_date: prova ad ottenere il valore di tipo data (come potrebbe essere per campi personalizzati) e lo converte alle impostazioni del sito come da funzione php DateTimeAction(azione ConvertDateFormat)
- convert_date_to_mysql: prova a convertire il valore di tipo data al formato Y-m-d
- gettype: ottiene il tipo di dato come da funzione gettype
- strval: converte il valore a numero intero come da funzione strval
- intval: converte il valore a numero intero come da funzione intval
- do_shortcode: processa gli shortcode nel dato (utile per processare shortcodes all'interno dei campi personalizzati) come da funzione do_shortcode
- JsonAction: converte una stringa json ad array come da funzione JsonAction per poter avanzare tra le sue chiavi e ottenere il valore all'interno degli shortcodes
- strtotime: converte a timestamp una data in formato inglese come da funzione strtotime
- var_dump: come da funzione php var_dump
- print_r: come da funzione php print_r
- print_rR: come da funzione php del framework print_rR
Risorse collegate:
- globale php
$GLOBALS['gpci']['whitelist']['functions']
Utenti
Come impostazione predefinita i dati utente, come spiegato nella conversione dinamica, sono visibili soltanto agli amministratori e all'utente corrente se è lo stesso dell'id corrente. Impostando la globale $GLOBALS['gpci']['whitelist']['userdata'] su true è possibile non avere questo limite: questo potrebbe essere utile ad esempio nella configurazione di un forum, in cui è utile che tutti vedano chi ha aperto un thread o chi commenta un post. Come sopra è possibile limitare questa impostazione a una pagina o qualsiasi altra combinazione utilizzando php. Per ora non è presente alcuna opzione nella pagina whitelist, se utile verrà aggiunta in futuro.
Risorse collegate:
- globale php
$GLOBALS['gpci']['whitelist']['userdata']
Blocchi
Per utilizzare lo shortcode render_blocks è necessario mettere in whitelist i blocchi utilizzati, Funziona esattamente come sopra ma la globale da utilizzare è $GLOBALS['gpci']['whitelist']['blocks'] che conterrà un array di nomi di blocchi (utilizzare la console sviluppatori in gutenberg per trovare facilmente i nomi). Per ora non è presente alcuna opzione nella pagina whitelist. Esempio:
File options.php
$GLOBALS['gpci']['whitelist']['blocks'] = [ 'core/image', 'gpci/icon' ];
Risorse collegate:
- globale php
$GLOBALS['gpci']['whitelist']['blocks']
Ajax
E' possibile definire, rimuovere e modificare le azioni ajax tramite la globale php $GLOBALS['gpci']['whitelist']['ajax_public'] sia a livello globale che di pagina singola. Questo potrebbe essere molto utile per esempio a creare pulsanti che eseguono azioni php senza dover creare interi form. Altre informazioni sul sistema ajax.
