wordpress-ob-start

La madre di tutti gli hack di WordPress

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.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.