Penyesuai API JS


10

Oke jadi saya telah mencoba mendidik diri sendiri untuk membuat bagian panel baru dan kontrol secara dinamis menggunakan JS API customizer.

Sudah beberapa hari membuat frustrasi dan saya tidak bisa mendapatkan cara yang tepat untuk mencapai ini melalui API JS.

Sejauh ini, ini adalah beberapa hal yang saya lakukan untuk mewujudkannya tetapi tidak berhasil:

    // for Settings
    api.create( 
        params.id, 
        params.id, 
        params.default, 
        params.args 
    );

    // for controls
    var controlConstructor = api.controlConstructor[params.type];
    var control = new controlConstructor(params.id, {
        params: params,
        previewer: api.previewer
    });
    api.control.add( 
        params.id, 
        control 
    );

     //for Sections
     var section = new api.Section(params.id, { 
        params: params
     }); 
    api.section.add( params.id, section );
    api.section('section_id').activate();

Tidak satu pun dari mereka yang berfungsi karena bagian tidak muncul dan saya harus menjalankan api.section('section_id').activate()dua kali di konsol untuk membuat bagian muncul, sama dengan kontrol.

Jawaban:


2

1) Mungkin mengikat ke api. Sudah menyatakan yang mungkin memperbaiki harus memanggil bagian Anda dua kali

(function($, api){
  api.bind( 'ready', function() {...

  }
})(jQuery);

Saya melihat catatan di trac yang mengatakan "Perhatikan bahwa API untuk kontrol yang ditambahkan secara dinamis, dan API untuk Bagian dan Panel khusus templated JS belum tersedia pada WordPress 4.2. Lihat # 30741." Membaca bahwa trac berakhir dengan "kemungkinan bukan untuk 4,5 sekarang" sehingga usaha Anda mungkin sia-sia = (

2) Untuk referensi, JS API wp_customize dapat ditemukan di sini . Tautan ini mungkin bermanfaat juga.

3) Saya tidak memiliki cukup perwakilan untuk tautan ketiga tetapi Anda mungkin melihat Kirki.org yang merupakan kerangka kerja pembantu untuk bidang penyesuaian. Kirki juga cukup aktif di Github.

4) Di sisi PHP, Anda dapat menggunakan opsi "active_callback" pada larik bidang Anda untuk menyajikan bidang secara dinamis.

$wp_customize->add_control( 'some_single_page_specific_option', array(
  'label'           => esc_html__( 'Single Page Option' ),
  'section'         => 'my_page_options',
  'active_callback' => 'if_is_singular',
));

function if_is_singular(){
  if( is_singular() ){
    return true;
  } else {
    return false;
  }
}

Semoga berhasil.


1
Note that the APIs for dynamically-added controls, and APIs for JS-templated custom Sections and Panels are not yet available as of WordPress 4.2.Itu meringkasnya. :(
Aniruddh Joshi

-2

Saya sarankan daripada menciptakan kembali roda, mungkin Anda akan mempertimbangkan kerangka kerja ini sebagai dasar untuk proyek Anda. http://wpshed.com/wordpress-theme-customizer-framework/ .

Yang ini adalah yang terbaik yang saya temukan ketika saya sedang belajar dan mencari kerangka kerja. Anda dapat memperluas kerangka kerja ini dengan kontrol kustom Anda sendiri dan tautan di bawah ini akan membantu Anda memahami dan mengimplementasikan komunikasi antara customizer dan customizer-preview melalui jQuery atau javascript.

https://conductorplugin.com/developing-wordpress-customizer-part1/


Halo Mohit, terima kasih atas jawabannya tetapi apa yang Anda berikan tidak menjawab pertanyaan yang sebenarnya. Bahkan ketika Anda menggunakan kerangka kerja ini, Anda masih harus menggunakan API JS. Pekerjaan ini tidak memperluas JS API penyesuai dan karenanya tidak ada gunanya dalam kasus ini.
Aniruddh Joshi

Hai, Anda dapat dengan mudah mengelolanya dengan tautan lain yang saya berikan untuk file JS. Saya melakukannya dengan cara ini dan menyelesaikan tujuan saya.
Mohit Aneja

Hmm, dukungan untuk kontrol, bagian dan panel di JS API datang dengan v4.0 yang diluncurkan pada 14 Desember dan artikel yang Anda maksud ditulis pada 14 September. Apakah Anda mendapatkan apa yang saya maksudkan dalam pertanyaan?
Aniruddh Joshi
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.