Nowy WP_Customize API - jak działa pod maską?

16

Zauważyłem, że jeśli wprowadzisz zmiany za pomocą nowej funkcji „dostosuj”, podczas nawigacji na innej stronie w dokumencie podglądu iframe zmiany zostaną zastosowane, nawet jeśli nie są niezapisane.

Wygląda na to, że WP gdzieś przechowuje tymczasowe zmiany i stosuje je w witrynie, jeśli strona jest wyświetlana w trybie „dostosowywania”.

Ale skąd strona wie, że jest w trybie dostosowywania? Ponieważ nie widzę żadnych argumentów zapytań dołączonych do linków ani czegoś takiego.

Alex
źródło

Odpowiedzi:

9

Obowiązuje tutaj kilka bitów, ale w skrócie jest to następujący kod 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 uniemożliwia faktyczne działanie łączy. Poniższy kod wysyła następnie wiadomość w górę z informacją, że: a) przewiń z powrotem na górę strony i b) zmień adres URL.

Powodem przesyłania wiadomości jest to, że nie ma tylko jednego elementu iframe, są dwa. Strona, na którą kliknąłeś, jest w rzeczywistości ładowana do innego elementu iframe z dodanymi do niego ustawieniami konfiguratora (za pomocą POSTrzeczywiście), a następnie efekt zanikania jest używany do wygaszania starego i płynnego wprowadzania nowego. Zapobiega to białemu i brzydkiemu ekranowi i miganiu po przejściu na nową stronę.

Eliminuje również konieczność filtrowania kodu motywu i potencjalnie modyfikowania wyglądu strony. Temat jest więc wyświetlany bez zmian, bez znaczących zmian w jego treści.

Podobny kod istnieje, aby w ogóle uniemożliwić przesyłanie formularzy (po prostu nic nie robi) i tak dalej.

Filtr przechwytujący i dostosowujący wartości dostosowania jest włączony class-wp-customize-setting.php. preview()Funkcja dodaje filtry potrzebne do obsługi wartości przychodzące The _preview_filter()funkcją jest to, że filtr. Po prostu bierze wywołania get_option()lub get_theme_mod(), zauważa, kiedy mają być modyfikowane opcje, i zwraca zmodyfikowane wartości.

Otto
źródło
1

Zauważysz, że po kliknięciu łącza w oknie podglądu dostosowania, generowane POSTżądanie jest żądaniem, a nie normalnym GET. Wygląda na to, że dostosowywanie zastępuje wszelkie kliknięcia linków i wykonuje te czynności POSTprzy użyciu następujących danych formularza:

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

Dostosowane pole jest co zawiera opcje, które zostały zmodyfikowane, tak że jest, gdy dane są przekazywane za pośrednictwem do tematu. Kod dostosowywania przechwytuje następnie (przez filtr, nie jestem pewien, który dokładnie) opcje motywu, gdy są one wymagane, i zastępuje je wartościami w dostosowanym parametrze.

Andy Adams
źródło
2
Spójrz tutaj: /wp-includes/class-wp-customize-manager.php...
brasofilo