web-dev-qa-db-fra.com

Obtenir une valeur par défaut du paramètre Customizer à l'aide de wp.customize API (JS)

Est-il possible d’obtenir une valeur par défaut définie dans le paramètre Customizer? Voici un exemple de code:

// Add setting.
$wp_customize->add_setting( 'slug_awesome_title', array(
    'default' => esc_html__( 'WordPress', 'slug' ),
    'sanitize_callback' => 'sanitize_text_field',
) );

// Add control.
$wp_customize->add_control( 'slug_awesome_title', array(
    'label' => esc_html__( 'Section Title', 'slug' ),
    'section' => 'slug_awesome_section',
    'type' => 'text',
) );

Si le contrôle actuel a déjà une valeur définie, disons qu'il s'agit de "WooCommerce", comment puis-je obtenir une valeur par défaut qui est définie sur "WordPress" à l'aide de l'API wp.customize de JS?

J'ai essayé ceci:

wp.customize.instance( 'slug_awesome_title' ).get()

mais il retourne la valeur actuelle du contrôle.

1
Taras Dashkevych

Il serait logique que la valeur par défaut soit disponible via:

wp.customize.instance( 'slug_awesome_title' ).default

Ou équivalent:

wp.customize( 'slug_awesome_title' ).default

Cependant, je peux voir que la variable default n'est tout simplement pas exportée de PHP vers JS. Je peux voir que cela va être nécessaire dans le noyau aussi lorsque la création de modèles côté client remplace le rendu des contrôles côté serveur dans # 30738 , de sorte qu'un patch principal serait nécessaire.

Néanmoins, entre-temps, vous pouvez ajouter le PHP suivant pour exporter votre valeur default sur l'objet JS Setting afin de produire le même effet:

add_action( 'customize_controls_enqueue_scripts', function() {
    global $wp_customize;
    wp_add_inline_script( 'customize-controls', sprintf(
        'wp.customize( "slug_awesome_title", function ( setting ) { setting.default = %s; } );',
        wp_json_encode( $wp_customize->get_setting( 'slug_awesome_title' )->default )
    ) );
} );
0
Weston Ruter

Vous pouvez accéder à tous les paramètres par défaut en appelant l'objet:

wp.customize.settings.values

Par exemple:

// Enqueue live preview javascript in Theme Customizer admin screen
wp.customize( 'my_control', function( value ) {

    console.log( "default: ", wp.customize.settings.values.my_control );

    value.bind( function( newval ) {
        // ....
    } );
} );
0
Helder Vilela