Yeni WP_Customize API'sı - başlık altında nasıl çalışır?


16

Yeni "özelleştir" özelliğiyle değişiklik yaparsanız, iframe önizleme belgesindeki farklı bir sayfada gezindiğinizde, değişikliklerinizin kaydedilmemiş olsa bile yine de geçerli olduğunu fark ettim.

WP geçici değişiklikleri bir yerde saklıyor gibi görünüyor ve site "özelleştirme" modunda görüntüleniyorsa bunları sitede uygular.

Ancak site özelleştirme modunda olduğunu nasıl biliyor? Çünkü bağlantılara eklenmiş herhangi bir sorgu argümanı görmüyorum ya da bunun gibi bir şey.

Yanıtlar:


9

Burada geçerli olan birkaç bit var, ancak kısa kısmı şu 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 bağlantıların gerçekten çalışmasını engeller. Aşağıdaki kod daha sonra a) sayfanın en üstüne kaydırın ve b) URL'yi değiştirin.

Buradaki mesajlaşmanın nedeni, sadece bir iframe olmadığı için iki tane var. Tıkladığınız sayfa aslında, özelleştiricinin ayarları eklenmiş olarak ( POSTgerçekten de) başka bir iframe içine yüklenir , daha sonra eski olanın solması ve yenisinde sorunsuz bir şekilde solması için bir solma efekti kullanılır. Bu, yeni sayfaya geçtiğinde ekranın beyaz ve çirkinleşmesini ve yanıp sönmesini önler.

Ayrıca tema kodunda filtreleme ve benzeri şeyler yapma ihtiyacını ortadan kaldırır ve sayfanın görünümünü değiştirebilir. Tema böylece içeriğinde önemli değişiklikler yapılmadan olduğu gibi görüntülenir.

Form gönderme işleminin hiç çalışmasını (hiçbir şey yapmaz) ve benzerlerini önlemek için benzer bir kod vardır.

Özelleştirici değerlerini yakalamak ve işlemek için filtre var class-wp-customize-setting.php. preview()Fonksiyonu, gelen değerlerini işlemek için gereken filtreleri ekler _preview_filter()işlevi olduğunu filtredir. Basitçe, get_option()veya get_theme_mod()çağrılarını alır, değiştirilen seçeneklerin ne zaman olması gerektiğini fark eder ve bunun yerine değiştirilen değerleri döndürür.


1

Özelleştirici önizleme penceresindeki bir bağlantıyı tıkladığınızda, oluşturulan POSTisteğin normal yerine bir istek olduğunu fark edeceksiniz GET. Özelleştirici, bağlantı tıklamalarını geçersiz kılıyor ve POSTbunun yerine aşağıdaki form verileriyle çalışıyor gibi görünüyor:

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

Özelleştirilmiş alan verileri temaya içinden geçirilen nerede olduğunu öyleyse, modifiye ettik seçeneklerini içerir şeydir. Özelleştirici kodu daha sonra istendiğinde temanızın seçeneklerini (bir filtre aracılığıyla tam olarak hangisi olduğundan emin değilim) araya girer ve bunları özelleştirilmiş parametredeki değerlerle değiştirir .


2
Buraya bir göz atın: /wp-includes/class-wp-customize-manager.php...
brasofilo
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.