Dostosuj JS API

10

Okej, więc próbowałem nauczyć się dynamicznie tworzyć nowe sekcje paneli i formanty za pomocą interfejsu API JS dostosowywania.

To było frustrujące kilka dni i nie byłem w stanie znaleźć dokładnego sposobu na osiągnięcie tego poprzez JS API.

Jak dotąd robię to, aby tak się stało, ale bez powodzenia:

    // 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();

Żaden z nich nie wydaje się działać, ponieważ sekcja nie pojawia się i muszę api.section('section_id').activate()dwukrotnie uruchomić konsolę, aby sekcja się pojawiła, to samo dotyczy kontroli.

Aniruddh Joshi
źródło

Odpowiedzi:

2

1) Być może powiąż stan api.ready, który może rozwiązać konieczność dwukrotnego wywołania sekcji

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

  }
})(jQuery);

Widziałem notatkę w trac, która brzmiała: „Zauważ, że interfejsy API dla dynamicznie dodawanych kontrolek oraz interfejsy API dla szablonów niestandardowych i paneli w szablonie JS nie są jeszcze dostępne od wersji WordPress 4.2. Patrz # 30741”. Czytanie tego trac kończy się słowem „prawdopodobnie nie teraz 4.5”, więc twoje wysiłki mogą być daremne = (

2) W celach informacyjnych interfejs API wp_customize JS można znaleźć tutaj . Ten link może być również przydatny.

3) Nie mam wystarczającej liczby przedstawicieli na trzeci link, ale możesz zajrzeć na Kirki.org, który jest strukturą pomocniczą dla pól dostosowywania. Kirki jest również bardzo aktywna na Github.

4) Po stronie PHP możesz użyć opcji „active_callback” w tablicy pól, aby dynamicznie prezentować pola.

$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;
  }
}

Powodzenia.

Philip Ingram
źródło
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.To podsumowuje. :(
Aniruddh Joshi
-2

Sugerowałbym zamiast wynaleźć koło na nowo, być może weźmiesz pod uwagę ten framework jako bazę dla swoich projektów. http://wpshed.com/wordpress-theme-customizer-framework/ .

Ten jest najlepszy, jaki znalazłem podczas nauki i szukania ram. Możesz rozszerzyć tę platformę o własne niestandardowe elementy sterujące, a poniższy link pomoże ci zrozumieć i wdrożyć komunikację między adaptatorem a podglądem dostosowywania za pomocą jQuery lub javascript.

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

Mohit Aneja
źródło
Witaj Mohit, dziękuję za odpowiedź, ale to, co podałeś, nie odpowiada na rzeczywiste pytanie. Nawet jeśli używasz tych frameworków, nadal musisz używać JS API. Te fraworks nie rozszerzają interfejsu API JS dostosowywania i dlatego nie są w tym przypadku przydatne.
Aniruddh Joshi
Cześć, możesz łatwo zarządzać tym za pomocą innego linku, który podałem dla plików JS. Robię to w ten sposób i rozwiązuję swój cel.
Mohit Aneja
Hmm, wsparcie kontroli, sekcji i panelu w JS API pochodzi z wersji 4.0, która została uruchomiona 14 grudnia, a artykuł, do którego się odnosisz, został napisany 14 września. Czy rozumiesz, o co mi chodziło w pytaniu?
Aniruddh Joshi