web-dev-qa-db-ja.com

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

テーマカスタマイザにチェックボックスを追加しようとするとき、それは「常に」選択されているようです。選択を解除しようとすると、ほとんど選択できないように強制するJSコードがあるかのように、選択を解除できません。

シリアル化されたテーマオプションを使用していますが、すべてが正しく接続されています。コードは次のようになります( 'customize_register'フックを介してトリガーされます)。

$wp_customize->add_setting( mytheme_options[chk_hide_description], array(
    'default'        => false,
    'type'           => 'option',
    'capability'     => 'edit_theme_options' )
);

$wp_customize->add_control( 'display_header_text', array(
    'settings' => mytheme_options[chk_hide_description],
    'label'    => __( 'Hide site description' ),
    'section'  => 'title_tagline',
    'type'     => 'checkbox',
) );

ここで報告されている同じ問題: http://ottopress.com/2012/how-to-leverage-the-theme-customizer-in-your-own-themes/#div-comment-11254

6
dgwyer

チェックボックスが可能です。一例として、これがお役に立てば幸いです。

最初にadd_settingを介して設定を定義する必要があります。重要なのは、値typeを持つパラメーターoptionです。この後、add_controlを介してフィールドを制御し、パラメータtypecheckboxに設定します。代わりにselectを使うことも可能です。 stdを介してデフォルト値を追加した場合は、このパラメーターを使用せずにそれを機能させます。 1と0の値を持つchoicesパラメータを追加すれば、alternativeもうまくいきます。しかし、パラメータをcheckboxにのみ設定すれば、テストではうまくいきます。あなたは私のプロジェクトの中にソースを見つけます、下記のリンクを見てください。

また、wp-includes/class-wp-customize-control.phpの246行目のvalue文字列の出力をデバッグできます。多分それは役立ちます。

デバッグ:

    case 'checkbox':
        var_dump( $this->value() );

例:

    // Add settings for output description
    $wp_customize->add_setting( $this->option_key . '[echo_desc]', array(
        'default'    => $defaults['echo_desc'],
        'type'       => 'option',
        'capability' => 'edit_theme_options'
    ) );

    // Add control and output for select field
    $wp_customize->add_control( $this->option_key . '_echo_desc', array(
        'label'      => __( 'Display Description', 'documentation' ),
        'section'    => 'title_tagline',
        'settings'   => $this->option_key . '[echo_desc]',
        'type'       => 'checkbox',
        'std'        => '1'
    ) );

この情報源の結果を参照してください。 screenshot depicting the checkbox in the WordPress customizer

あなたは私のテーマ Githubでホストされている - ドキュメントに作業結果を見つけます

3
bueltge

私も同様の問題を抱えていましたが、'type' => 'option'add_settingを設定することが原因であることがわかりました。

これを削除することで私の問題は解決しました。現在使用しているのは以下のとおりで、問題なく動作します。

$wp_customize->add_section('footer_social_media_section' , array(
    'title'     => __('Footer Social Media', 'dd_theme'),
    'priority'  => 1020
));

$wp_customize->add_setting('show_footer_facebook', array(
    'default'    => '1'
));

$wp_customize->add_control(
    new WP_Customize_Control(
        $wp_customize,
        'show_footer_facebook',
        array(
            'label'     => __('Show Facebook Link', 'dd_theme'),
            'section'   => 'footer_social_media_section',
            'settings'  => 'show_footer_facebook',
            'type'      => 'checkbox',
        )
    )
);
2
David Gard