API WP_Customize baru - bagaimana cara kerjanya di bawah tenda?

16

Saya perhatikan bahwa jika Anda melakukan perubahan melalui fitur "kustomisasi" yang baru, ketika Anda menavigasi pada halaman berbeda di dalam dokumen pratinjau iframe, perubahan Anda tetap berlaku, meskipun tidak disimpan.

Sepertinya WP menyimpan perubahan sementara di suatu tempat, dan itu berlaku di situs jika situs tersebut dilihat dalam mode "sesuaikan".

Tapi bagaimana situs tahu itu dalam mode kustomisasi? Karena saya tidak melihat argumen permintaan apa pun yang ditambahkan ke tautan atau semacamnya.

Alex
sumber

Jawaban:

9

Ada beberapa bit di sini yang berlaku, tetapi singkatnya adalah kode ini di 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 mencegah tautan agar tidak berfungsi. Kode berikut kemudian mengirim pesan kembali ke atas dan mengatakannya ke a) gulir kembali ke atas halaman dan b) ubah URL.

Alasan untuk olahpesan di sini adalah karena tidak hanya ada satu iframe, ada dua. Halaman yang Anda klik sebenarnya dimuat di dalam iframe lain dengan pengaturan dari penyesuai ditambahkan ke dalamnya (melalui POSTmemang), maka efek fade digunakan untuk memudar yang lama dan memudar di yang baru dengan mulus. Ini mencegah layar menjadi putih dan jelek dan berkedip ketika beralih ke halaman baru.

Juga menghilangkan kebutuhan untuk melakukan pemfilteran dan semacamnya pada kode tema dan berpotensi memodifikasi tampilan halaman. Tema tersebut ditampilkan sebagaimana adanya, tanpa perubahan signifikan pada kontennya.

Kode serupa ada di sana untuk mencegah pengiriman formulir berfungsi sama sekali (hanya tidak melakukan apa-apa) dan sebagainya.

Filter untuk mencegat dan menangani nilai-nilai penyesuai ada di class-wp-customize-setting.php. The preview()Fungsi menambahkan filter diperlukan untuk menangani nilai-nilai yang masuk, _preview_filter()fungsi filter yang. Itu hanya mengambil get_option()atau get_theme_mod()panggilan, pemberitahuan ketika mereka seharusnya menjadi opsi yang dimodifikasi, dan mengembalikan nilai yang diubah sebagai gantinya.

Otto
sumber
1

Anda akan melihat bahwa ketika Anda mengklik tautan di jendela pratinjau penyesuai, permintaan yang dihasilkan adalah POSTpermintaan, alih-alih normal GET. Penyesuai tampaknya mengesampingkan klik tautan apa pun dan melakukan POSTsebaliknya, dengan data formulir berikut:

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

The disesuaikan bidang yang berisi pilihan Anda dimodifikasi, sehingga di mana data sedang melewati dengan tema Anda. Kode penyesuai kemudian memotong (melalui filter, saya tidak yakin yang mana tepatnya) pilihan tema Anda ketika mereka diminta, dan menggantinya dengan nilai-nilai dalam parameter yang disesuaikan .

Andy Adams
sumber
2
Lihatlah di sini: /wp-includes/class-wp-customize-manager.php...
brasofilo