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.

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.


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/


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.