Nuova API WP_Customize: come funziona sotto il cofano?


16

Ho notato che se si apportano modifiche tramite la nuova funzione "personalizza", quando si naviga in una pagina diversa all'interno del documento di anteprima iframe, le modifiche verranno comunque applicate, anche se non sono state salvate.

Sembra che WP stia memorizzando le modifiche temporanee da qualche parte e le applica sul sito se il sito viene visualizzato in modalità "personalizza".

Ma come fa il sito a sapere che è in modalità personalizza? Perché non vedo alcun argomento di query aggiunto ai collegamenti o qualcosa del genere.

Risposte:


9

Ci sono alcuni bit qui applicabili, ma il corto è questo codice in customize-preview.js:

this.body.on( 'click.preview', 'a', function( event ) {
    event.preventDefault();
    self.send( 'scroll', 0 );
    self.send( 'url', $(this).prop('href') );
});

Event.preventDefault impedisce che i collegamenti funzionino effettivamente. Il codice seguente invia quindi un messaggio all'indietro che lo dice a) scorrere di nuovo all'inizio della pagina eb) cambiare l'URL.

La ragione per la messaggistica qui è perché non c'è solo un iframe, ce ne sono due. La pagina a cui hai fatto clic viene effettivamente caricata all'interno di un altro iframe con le impostazioni del personalizzatore aggiunte ad esso (tramite un POSTapp), quindi un effetto di dissolvenza viene utilizzato per sfumare quello vecchio e sfumare nel nuovo senza soluzione di continuità. Questo impedisce allo schermo di diventare bianco, brutto e lampeggiante quando passa alla nuova pagina.

Elimina anche la necessità di fare filtri e simili sul codice tema e potenzialmente modificare l'aspetto della pagina. Il tema viene quindi visualizzato così com'è, senza modifiche significative al suo contenuto.

Un codice simile esiste lì per impedire che l'invio dei moduli funzioni (non fa nulla) e così via.

È attivo il filtro per l'intercettazione e la gestione dei valori di personalizzazione class-wp-customize-setting.php. La preview()funzione aggiunge i filtri necessari per gestire i valori in entrata, la _preview_filter()funzione è quel filtro. Prende semplicemente le chiamate get_option()o get_theme_mod(), si accorge quando si suppone che siano opzioni modificate e restituisce invece i valori modificati.


1

Noterai che quando fai clic su un collegamento nella finestra di anteprima del personalizzatore, la richiesta generata è una POSTrichiesta, anziché una normale GET. Sembra che il personalizzatore abbia la precedenza su tutti i clic sui collegamenti e faccia POSTinvece il comando, con i seguenti dati del modulo:

wp_customize: on
theme: themename
customized: {json-encoded-options-here}
customize_messenger_channel: preview-1

Il campo personalizzato è ciò che contiene le opzioni che hai modificato, quindi è lì che i dati vengono passati al tuo tema. Il codice del personalizzatore quindi intercetta (attraverso un filtro, non sono sicuro di quale esattamente) le opzioni del tuo tema quando vengono richieste e le sostituisce con i valori nel parametro personalizzato .


2
Dai un'occhiata qui: /wp-includes/class-wp-customize-manager.php...
brasofilo,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.