Customizer JS API

10

Okay, ich habe versucht, mich darin zu üben, mithilfe der JS-API des Customizers neue Bedienfeldabschnitte und Steuerelemente dynamisch zu erstellen.

Es war einige Tage frustrierend und ich konnte nicht genau herausfinden, wie dies über die JS-API erreicht werden kann.

Bisher ist dies eine Sache, die ich tue, um dies zu erreichen, aber ohne Erfolg:

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

Keiner von ihnen scheint zu funktionieren, da der Abschnitt nicht angezeigt wird und ich api.section('section_id').activate()zweimal in der Konsole ausgeführt werden muss, damit der Abschnitt angezeigt wird. Dasselbe gilt für die Steuerung.

Aniruddh Joshi
quelle

Antworten:

2

1) Binden Sie sich möglicherweise an den api.ready-Status, der möglicherweise behebt, dass Sie Ihren Abschnitt zweimal aufrufen müssen

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

  }
})(jQuery);

In trac wurde ein Hinweis angezeigt, der besagt: "Beachten Sie, dass die APIs für dynamisch hinzugefügte Steuerelemente und APIs für benutzerdefinierte Abschnitte und Bedienfelder mit JS-Vorlagen ab WordPress 4.2 noch nicht verfügbar sind. Siehe # 30741." Das Lesen dieses Trac endet mit "wahrscheinlich nicht für 4.5 im Moment", sodass Ihre Bemühungen möglicherweise vergeblich sind = (

2) Als Referenz finden Sie hier die JS-API wp_customize . Dieser Link kann ebenfalls nützlich sein.

3) Ich habe nicht genug Repräsentanten für einen dritten Link, aber Sie könnten sich Kirki.org ansehen, ein Hilfsframework für Customizer-Felder. Kirki ist auch auf Github ziemlich aktiv.

4) Auf der PHP-Seite können Sie die Option "active_callback" in Ihrem Feldarray verwenden, um Felder dynamisch darzustellen.

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

Viel Glück.

Philip Ingram
quelle
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.Das fasst es zusammen. :(
Aniruddh Joshi
-2

Ich würde vorschlagen, anstatt das Rad neu zu erfinden, vielleicht betrachten Sie diesen Rahmen als Grundlage für Ihre Projekte. http://wpshed.com/wordpress-theme-customizer-framework/ .

Dies ist das Beste, was ich gefunden habe, als ich gelernt und nach Frameworks gesucht habe. Sie können dieses Framework mit Ihren eigenen benutzerdefinierten Steuerelementen erweitern. Der folgende Link hilft Ihnen dabei, die Kommunikation zwischen Customizer und Customizer-Vorschau über jQuery oder Javascript zu verstehen und zu implementieren.

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

Mohit Aneja
quelle
Hallo Mohit, danke für die Antwort, aber was du gegeben hast, beantwortet die eigentliche Frage nicht. Selbst wenn Sie diese Frameworks verwenden, müssen Sie die JS-API verwenden. Diese Fraworks erweitern die JS-API des Customizers nicht und sind daher in diesem Fall nicht von Nutzen.
Aniruddh Joshi
Hallo, das können Sie einfach mit dem anderen Link verwalten, den ich für die JS-Dateien bereitgestellt habe. Ich mache es so und löse meinen Zweck.
Mohit Aneja
Hmm, die Unterstützung für Steuerung, Abschnitt und Panel in der JS-API wurde mit v4.0 geliefert, das am 14. Dezember gestartet wurde. Der Artikel, auf den Sie sich beziehen, wurde am 14. September geschrieben. Verstehen Sie, was ich in der Frage gemeint habe?
Aniruddh Joshi