web-dev-qa-db-ja.com

テーマカスタマイザにチェックボックスを追加する

テーマカスタマイザにチェックボックスを追加しようとしています。私のfunctions.phpでこのコードを使ってチェックボックスを追加しました

function theme_customizer_register_checkbox($wp_customize) {

$wp_customize->add_section( 'savior_global_options', array(
    'title'          => 'Global Options',
) );

$wp_customize->add_setting( 'show_supporters', array(
    'default'        => true,
    'type'           => 'option',
    'capability'     => 'edit_theme_options' )
);

$wp_customize->add_control( 'display_supporters', array(
    'settings' => 'show_supporters',
    'label'    => 'Show supporters section',
    'section'  => 'savior_global_options',
    'type'     => 'checkbox',
) );
 }
 add_action( 'customize_register', 'theme_customizer_register_checkbox' );

チェックボックスが機能したら。ボックスをチェックしても状態が変わらないことがわかりました。それは常にチェックしたままだった。私はいくつかの検索をし、このサイトで解決されたが答えを残していない投稿を見つけました。この記事の投稿で、私は$wp_customize->add_control()関数の値をユニークな値に変更する必要があると考えました。だから私はそれをdisplay_supportersに変更しました。これで私の問題は解決しましたが、今はチェックボックスの値を取得できません。この変数をダンプすると、

$supporters = get_theme_mod('display_supporters);

私はブール値になります(false)

そしてそれはそれに留まります。チェックボックスに何をしても。何が足りないの?

1
Jamie

私はこれを解決することができました。これがチェックボックスを機能させたコードです。

function theme_customizer_register_checkbox($wp_customize) {

$wp_customize->add_section( 'global_options', array(
    'title'          => 'Global Options',
) );

$wp_customize->add_setting( 'show_supporters', array(
'default'        => true,
'transport'  =>  'postMessage'
 ) );

$wp_customize->add_control(
'show_supporters',
array(
    'section'   => 'global_options',
    'label'     => 'Show supporters section?',
    'type'      => 'checkbox'
     )
 );
 }
 add_action( 'customize_register', 'theme_customizer_register_checkbox' );

それから私はそうフロントエンドの値をチェックしました

if(true === get_theme_mod('show_supporters')){ do something here }
2
Jamie

オプションとして保存しているため、テーマの変更設定が表示されないことは間違いありません。 $wp_customize->add_settingメソッドのオプションとして引数'type' => 'option'を付けて保存するように設定しています。

それは選択肢なので、代わりにget_option( 'show_supporters' )を使って検索することができます。 'show_supporters'は、display_supportersではなく、作成した設定の名前です。

しかしながら、あなたのテーマが既に設定パネルを持っていない限り、それはあなたのテーマの修正設定にそれを保存することがおそらく最善です。あなたはそれからあなたの価値を得るためにget_theme_mod( 'show_supporters' )を使うことができます。 WordpressのOttoは、 オプションページをテーマカスタマイザ に置き換えることについての良い記事を書いています。

Add_settingメソッドとadd_controlメソッドのIDが一致しない場合、チェックボックスをオフにしないで問題を再現することしかできませんでした。私のために働いたコードを以下に含めました。

$wp_customize->add_setting( 'show_supporters', array(
    'default'        => true,
    'capability'     => 'edit_theme_options'
) );

$wp_customize->add_control( 'show_supporters', array(
    'settings' => 'show_supporters',
    'label'    => 'Show supporters section',
    'section'  => 'savior_global_options',
    'type'     => 'checkbox'
) );
0
Dylan