D'accord, j'ai donc essayé de me familiariser avec la création de nouvelles sections de panneaux et de 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 trouver le moyen exact d’y parvenir via JS API.
Jusqu'ici, 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 que la section apparaisse, il en va de même avec le contrôle.
1) Peut-être se lier à l’état api.ready qui pourrait vous éviter d’appeler votre section deux fois
(function($, api){
api.bind( 'ready', function() {...
}
})(jQuery);
Dans Trac, une note indiquait: "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 le # 30741." La lecture de cette analyse se termine par "probablement pas pour 4.5 maintenant" et vos efforts risquent donc d'être vains = (
2) Pour référence, l’API wp_customize JS peut être trouvé 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, un framework d'aide pour les champs de personnalisation. Kirki est également très actif sur Github.
4) Du côté PHP, vous pouvez utiliser l'option "active_callback" de votre tableau de champs pour présenter les champs de manière dynamique.
$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.