API JS de personnalisation

10

D'accord, j'ai donc essayé de m'instruire à créer de nouvelles sections de panneaux et des contrôles de manière dynamique à l'aide de l'API JS du personnalisateur.

Cela a été frustrant quelques jours et je n'ai pas pu obtenir le moyen exact d'y parvenir via l'API JS.

Jusqu'à présent, c'est quelque chose que je fais pour y arriver mais sans succès:

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

Aucun d'entre eux ne semble fonctionner car la section n'apparaît pas et je dois exécuter api.section('section_id').activate()deux fois dans la console pour faire apparaître la section, la même chose est avec contrôle.

Aniruddh Joshi
la source

Réponses:

2

1) Peut-être lier à l'état api.ready qui peut résoudre le fait d'appeler deux fois votre section

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

  }
})(jQuery);

J'ai vu une note dans trac qui disait "Notez que les API pour les contrôles ajoutés dynamiquement et les API pour les sections et les panneaux personnalisés basés sur JS ne sont pas encore disponibles à partir de WordPress 4.2. Voir # 30741." Lire que trac se termine par "probablement pas pour 4.5 en ce moment", donc vos efforts peuvent être futiles = (

2) Pour référence, l'API wp_customize JS peut être trouvée ici . Ce lien peut également être utile.

3) Je n'ai pas assez de représentants pour un troisième lien, mais vous pouvez consulter Kirki.org qui est un cadre d'aide pour les champs de personnalisation. Kirki est également très actif sur Github.

4) Côté PHP, vous pouvez utiliser l'option "active_callback" de votre tableau de champs pour présenter dynamiquement les champs.

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

Bonne chance.

Philip Ingram
la source
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.Cela résume. :(
Aniruddh Joshi
-2

Je suggère qu'au lieu de réinventer la roue, vous considérerez peut-être ce cadre comme une base pour vos projets. http://wpshed.com/wordpress-theme-customizer-framework/ .

Celui-ci est le meilleur que j'ai trouvé pendant que j'apprenais et recherchais des cadres. Vous pouvez étendre ce cadre avec vos propres contrôles personnalisés et le lien ci-dessous vous aidera à comprendre et à mettre en œuvre la communication entre le personnalisateur et l'aperçu du personnalisateur via jQuery ou javascript.

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

Mohit Aneja
la source
Bonjour Mohit, merci pour la réponse mais ce que vous avez fourni ne répond pas à la vraie question. Même lorsque vous utilisez ces frameworks, vous devez toujours utiliser l'API JS. Ces fraworks n'étendent pas l'API JS du personnalisateur et ne sont donc d'aucune utilité dans ce cas.
Aniruddh Joshi
Salut, vous pouvez facilement gérer cela avec l'autre lien que j'ai fourni pour les fichiers JS. Je le fais de cette façon et je résous mon objectif.
Mohit Aneja
Hmm, la prise en charge du contrôle, de la section et du panneau dans l'API JS est venue avec la v4.0 qui a été lancée le 14 décembre et l'article auquel vous faites référence a été écrit le 14 septembre. Êtes-vous en train de comprendre ce que je voulais dire dans la question?
Aniruddh Joshi