Apakah Mungkin Memperpanjang WP Kustomisasi Metode JS?

9

Saya ingin tahu apakah mungkin untuk memperluas metode apiobjek anonim di wp-admin/js/customize-control.js. Saya perlu menimpa salah satu metode ini dengan logika kustom saya sendiri tetapi saya menduga itu tidak mungkin karena dibungkus dengan ekspresi fungsi yang langsung dipanggil:

/* globals _wpCustomizeHeader, _wpMediaViewsL10n */
(function( exports, $ ){
// code
})( wp, jQuery );

Sejauh yang saya lihat, saya tidak dapat memperpanjang prototipe dari objek window karena dieksekusi secara anonim dan tidak tersedia window.wp.customize. Adakah yang tahu jika hal seperti itu mungkin? Bahkan ada disebutkan menimpa ini dalam .toggle () metode dokumentasi / deskripsi: https://github.com/WordPress/WordPress/blob/master/wp-admin/js/customize-controls.js#L110 , tapi saya Saya tidak yakin apakah maksudnya hanya dengan mem-forking seluruh file JS, menghapus versi WP dan membuat versi Anda sendiri atau jika mereka bermaksud atau sesuatu yang berbeda.

Perhatikan bahwa sepertinya harus dimungkinkan dengan wp.customize.{method}.extend({ foo: // replace method foo here })tetapi itu hanya berlaku untuk kelas / objek basis publik, bukan yang ada diwp-admin/js/customize-control.js

Brian
sumber
3
Meskipun apianonim, ini hanya sinonim untuk wp.customize(lihat baris 3) yang dapat diakses secara global. Namun sepertinya Model Obyek Lain yang digunakan untuk kontrol memanggil readyfungsi initializesehingga seseorang mungkin tidak mendapatkan kesempatan (yaitu selalu terlambat) untuk menimpa metode - apa yang ingin Anda perpanjang?
bonger
Secara teori, itu masuk akal - saran dihargai. Dalam kasus saya, saya merasa bahwa pendekatan ini cukup rumit dan berhasil menghasilkan solusi lain yang sesuai untuk kasus penggunaan saya. Namun, jawaban dengan kode kerja mungkin masih berguna bagi seseorang yang tidak memiliki pilihan lain untuk kasus penggunaannya. Kinerja dengan apa yang saya rencanakan akan sangat mengerikan.
Brian
1
Saya bukan ahli JS. Tetapi saya memiliki tambahan di tema kecil script penyesuai untuk menyegarkan selalu ekstensi saya. Saya bekerja dengan wp.customizedan menambahkan fungsi ke objek ini. lihat di sini untuk contoh sumber - github.com/bueltge/Documentation/blob/master/js/…
bueltge

Jawaban:

5

Saya akan meningkatkan komentar kecil saya pada pertanyaan Anda. Tapi sekali lagi petunjuknya; Saya bukan ahli JS. Sumber ikuti, petunjuk hanya digunakan untuk bermain dengan Customizer untuk berbagai pemeriksaan, contoh, seperti kotak pasir saya .

wp.customize

Memahami antarmuka penyesuai tema WP berpusat pada memahami objek javascript wp.customize. The wp.customizeobjek adalah penting dan Anda harus meletakkannya di awal.

Contoh Langsung

Contoh kecil berikut menunjukkan ini. Pada awalnya saya mengatur var apike objek penyesuai. Setelah ini, saya mengatur bidang khusus saya ke apidan meningkatkannya dengan sumber jQuery kecil untuk menyegarkan hasil untuk pratinjau langsung.

( function( $ ) {
    var api = wp.customize;

    // Site title and description.
    api( 'blogname', function( value ) {
        value.bind( function( to ) {
            $( '#header h1 a, #footer a.site-name' ).html( to );
        } );
    } );

    api( 'blogdescription', function( value ) {
        value.bind( function( to ) {
            $( '#header p.site-description' ).html( to );
        } );
    } );

} )( jQuery );

Pengaturan dan Kontrol

Objek kontrol disimpan wp.customize.controldan objek pengaturan disimpan wp.customize. Kelas nilai memiliki banyak fungsi, di sana dapat membantu Anda.

  • instance (id) - Dapatkan objek dari koleksi dengan id yang ditentukan.
  • has (id) - Return true, jika koleksi berisi objek dengan id yang ditentukan dan false jika tidak.
  • add (id, value) - Tambahkan objek ke koleksi dengan id dan nilai yang ditentukan.
  • remove (id) - Hapus objek dari koleksi.
  • create (id) - Buat objek baru, menggunakan konstruktor default dan tambahkan ke koleksi.
  • Masing-masing (panggilan balik, konteks) - Iterate atas elemen dalam koleksi.

Pengaturan khusus

Dengan fungsi ini, kami dapat meningkatkan pengaturan khusus kami.

var api = wp.customize,
    mysetting = api.instance( 'my_custom_setting' );

juga dapat digunakan untuk sebuah array

var api = wp.customize,
    mysetting = api.instance( 'my_custom_settings[my_custom_setting_field]' );

Dapatkan

Lihat hasilnya di konsol.

console.log( api.instance( 'my_custom_settings[my_custom_setting_field]' ).get() );

Set

Anda juga dapat mengubah nilai pengaturan melalui fungsi set.

api.instance( 'my_custom_settings[my_custom_setting_field]' ).set( 'my new value' ) );

Dapatkan dengan kontrol, sebagai objek

console.log( api.control.instance( 'my_custom_setting_field' ) );

Sumber Bermanfaat

  • wp-admin / js / customize-controls.js
  • wp-include / js / custom-preview.js
  • wp-include / js / customize-base.js
bueltge
sumber