Il wordpress Gpci framework è dotato di un sistema di output buffering php che permette di modificare l'output finale durante il suo calcolo da una o più di queste condizioni:
- funzione interne
- funzioni definite dagli amministratori
- certi campi personalizzati
L'output buffering è praticamente sempre attivo nel frontend in quanto utilizzato da alcuni moduli e funzioni interne, l'unica condizione utile a farlo partire è che la globale $GLOBALS['gpci']['outputbuffering'] non sia vuota.
Passare a funzione OutputBufferingAction?
Come funziona l'output buffering nel Gpci framework
E' bene specificare subito che l'output buffering parte dall'hook template redirect e termina nell'hook wp_footer. Il buffer viene modificato da tutte le funzioni definite nella globale $GLOBALS['gpci']['outputbuffering'] secondo le priorità e solo alla fine, dopo tutte le modifiche, il contenuto reale sarà generato.
Definire le funzioni di modifica
Come prima cosa vengono inseriti il nome della funzione con relativa priorità nella globale $GLOBALS['gpci']['outputbuffering'] con questo modello:
array_push( $GLOBALS['gpci']['outputbuffering'], [ 'TestOutputBuffering', 30 ] );
Come è facile vedere $GLOBALS['gpci']['outputbuffering'] non è altro che un contenitore di array associativi con il nome funzione e relativa priorità, è molto importante però inserire prima dell'hook template redirect in quanto viene tutto riordinato li. Le priorità partono dal basso e vanno verso l'alto.
Variabile buffer
le funzioni avranno sempre in ingresso la variabile $buffer che rappresenta il buffer corrente e lo restituiranno modificato.
Priorità attuali
Al momento l'output buffering è utilizzato internamente da:
- modalità manutenzione - priorità 20 - sostituisce il contenuto corrente con quello del template di manutenzione se attivato il controllo nella pagina corrispondente
- modulo cache - priorità 21 - invia le headers http della pagina corrente nel frontend
- funzione interna GpciAddAttributesToTags - priorità 22 - aggiunge attributi personalizzati ai tag secondo la globale
$GLOBALS['gpci']['AddAttributeToTag']
Esempio
Aggiungiamo l'attributo test al body della pagina corrente:
function TestOutputBuffering( $buffer ){
$buffer = new WP_HTML_Tag_Processor( $buffer );
$buffer->next_tag( 'body' );
$buffer->set_attribute( 'test', 'testvalore' );
//al posto di test valore potrebbe essere utilizzato un campo personalizzato
return $buffer;
}
array_push( $GLOBALS['gpci']['outputbuffering'], [ 'TestOutputBuffering', 30 ] );
Il codice può essere utilizzato in php ad esempio nel file functions.php oppure tramite il modulo aggiunte di codice.
