Gli hook sono ciò che rende WordPress WordPress . Consentono di personalizzare senza biforcare o dividere dal meraviglioso codice che è già disponibile per l’uso. Consentono alla personalizzazione e agli aggiornamenti esterni di coesistere pacificamente (la maggior parte del tempo). Questa capacità è ciò che rende WordPress così potente. Gli hook sono fantastici e a volte non ce ne sono abbastanza .
Filtra tutto con ob_start()
In alcuni casi, c’è un’altra opzione migliore . In assenza del gancio giusto, non puoi interferire con la formazione della pagina per il raggiungimento del tuo obiettivo. Tuttavia, puoi manipolare la pagina dopo che è già stata costruita, un momento prima che venga inviata al browser del visitatore . Vale a dire, puoi filtrare l’ intero HTML della pagina e cambiarlo.
La funzione di PHP ob_start()“attiva il buffering dell’output. Mentre il buffering dell’output è attivo non viene inviato alcun output dallo script […], invece, l’output viene archiviato in un buffer interno”. Questa funzione accetta una funzione di callback come parametro. La funzione di callback “verrà chiamata quando il buffer di output viene […] inviato […] al browser al termine della richiesta”. Fondamentalmente, la ob_start()funzione può contenere l’HTML finale costruito per un momento e darti un’ultima possibilità di manipolarlo prima che venga inviato al browser . Una semplice str_replace()funzione di callback sarà sufficiente in molti casi. Per casi più complessi, regex e preg_replace()potrebbero fare il trucco.
<?php
// Start the buffer at the head of the page
add_action('wp_head', 'buffer_start');
function buffer_start()
{
// Make sure it isn't an AJAX request, then call the callback function
if (!wp_doing_ajax()) {
ob_start('callback');
}
}
// Manipulate the buffered HTML
function callback($buffer)
{
$buffer = str_replace(' src="https://www.youtube.com/embed/', ' src="" data-src="https://www.youtube.com/embed/', $buffer);
return $buffer;
}
// Send the output buffer and turn off output buffering
add_action('wp_footer', 'buffer_end');
function buffer_end()
{
if (!wp_doing_ajax()) {
ob_end_flush();
}
}
Quando manca un hook dove serve, filtrare l’intera pagina HTML prima che venga inviata al browser, utilizzando ob_start(), potrebbe consentire una soluzione elegante.