web-dev-qa-db-ja.com

カスタマイザのライブプレビューが機能しない、更新されるが何も変更されない

これが私のコードです:

// Hooked to "after_setup_theme"
if(get_theme_mod('enable_vertical_header')) {
    // init vertical header, register scripts, style, settings and output html in template
    $vertical_header = new Vertical_Header;
}

カスタマイザでチェックボックスオプション "enable_vertical_header"(デフォルト値0)を作成して垂直ヘッダのオン/オフを切り替えました。オプションを切り替えるとライブプレビュー領域が更新されますが、何も変わりません。

"enable_vertical_header"の値をエコーすることによって、私はそれが常にnullであることを見ます、それはフロントエンドであれば意味があります。しかし、カスタマイザでは、get_theme_modはリアルタイム値を返さないのですか?


更新:管理コード

function my_custom_text_settings( $wp_customize ) {
    $wp_customize->add_section( 'my_section' , array(
        'title'      => __('My Section','mytheme'),
        'priority'   => 30,
    ) );

    // Register the settings
    $wp_customize->add_setting( 'enable_vertical_header', array(
        'default'        => 0,
        'type'           => 'theme_mod',
        'capability'     => 'edit_theme_options',
    ) );
    // Add the controls
    $wp_customize->add_control( 'enable_vertical_header', array(
        'label'       => __( 'My custom control', 'translation_domain' ),
        'section'     => 'my_section',
        'settings'    => 'enable_vertical_header',
        'type'        => 'checkbox',
        'priority'    => 10
    ) );

}
add_action( 'customize_register', 'my_custom_text_settings' );
1
Edward

まあ、いくつかの実験によって、私は答えを見つけました。

get_theme_modは、 'after_setup_theme'や 'init'で呼び出されてもリアルタイムの値を取得することはできません。 'customize_preview_init'と 'wp_loaded'では機能します。

add_action('customize_preview_init', 'my_header' );
function my_header() {
        if(get_theme_mod('enable_vertical_header')) {
            $vertical_header = new Vertical_Header;
        }   
}
2
Edward