これが私のコードです:
// 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' );
まあ、いくつかの実験によって、私は答えを見つけました。
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;
}
}