web-dev-qa-db-fra.com

Modification de l'ensemble des choix de contrôle à l'aide de wp.customize avec JavaScript

Supposons que j'ai deux contrôles de personnalisation, "setting_category" et "setting_font", j'essaie de modifier les choix de "setting_font" en changeant la valeur de "setting_category". Voici ce que je fais:

( function( $ ) {
    var api = wp.customize;

    api( 'setting_category', function( value ) {
        value.bind( function( to ) {
            var newChoices = {};
            // get new data from JSON using 'to' and populate the 'newChoices'

            api( 'setting_font' ).changeTheChoices( newChoices );
        } );
    } );
} )( jQuery );

Comment peut-on le faire avec JavaScript? Un truc?

1
5ervant

Voici la solution que j'ai trouvée, elle peut être utile dans certains cas:

parent.wp.customize.control( 'setting_category', function( control ) {
    control.setting.bind( function( to ) {
        var selectElem = parent.wp.customize.control( 'setting_font' ).container.find( 'select' );

        selectElem.empty();
        $.each( jsonData['items'], function( key, item ) {
            if ( item['category'] === to ) {
                var option = $( '<option></option>' )
                        .attr( "value", encodeURIComponent( item['family'] ) )
                        .text( item['family'] );
                selectElem.append( option );
            }
        } );
    } );
} );
0
5ervant

Tu es proche. Il vous suffit de remplacer changeTheChoices() par set() car il s'agit d'une méthode sur wp.customize.Setting. Voir ce qui suit aussi un peu de refactor:

wp.customize( 'setting_category', 'setting_font', function( categorySetting, fontSetting ) {
    categorySetting.bind( function( category ) {
        var newChoices = {};
        // get new data from JSON using 'category' and populate the 'newChoices'

        fontSetting.set( newChoices );
    });
});

Conseil: Je suggère de ne pas utiliser "setting" dans les identifiants de vos paramètres.

1
Weston Ruter