web-dev-qa-db-ja.com

Wp.​​customize API(JS)を使用してカスタマイザ設定のデフォルト値を取得する

カスタマイザ設定で設定されたデフォルト値を取得することは可能ですか?これがコードの例です。

// 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',
) );

現在のコントロールがすでに設定値を持っている場合、それが "WooCommerce"だとしましょう、どうすればJSでwp.customize APIを使って "WordPress"に設定されているデフォルト値を取得できますか?

私はこれを試してみました:

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

しかし、それはコントロールの現在の値を返します。

1

デフォルト値が利用可能であることは意味があります:

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

または同等に:

wp.customize( 'slug_awesome_title' ).default

しかし、defaultはPHPからJSにエクスポートされていないのがわかります。クライアントサイドのテンプレートが #30738 のコントロールのサーバーサイドレンダリングを置き換えるときにも、これがcoreで必要になることがわかるでしょう。そのため、 coreパッチ が必要になります。

それにもかかわらず、当面の間は、次のPHPを追加して、default値をJS Settingオブジェクトにエクスポートし、ほぼ同じ効果を得ることができます。

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

オブジェクトを呼び出すことで、すべてのデフォルト設定にアクセスできます。

wp.customize.settings.values

例えば:

// 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