Hinzufügen eines Kontrollkästchens zum Design-Customizer

7

Wenn Sie versuchen, dem Design-Customizer ein Kontrollkästchen hinzuzufügen, scheint es "immer" ausgewählt zu sein. Wenn Sie versuchen, die Auswahl aufzuheben, können Sie dies nicht tun, fast so, als ob JS-Code die Auswahl zwingt.

Ich verwende serialisierte Designoptionen und alles ist korrekt angeschlossen. Der Code ähnelt dem folgenden (ausgelöst über den Hook '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',
) );

Das gleiche Problem wurde hier gemeldet: http://ottopress.com/2012/how-to-leverage-the-theme-customizer-in-your-own-themes/#div-comment-11254 .

dgwyer
quelle
Hey, hast du dieses Problem gelöst? Hier gilt das gleiche. Es wird irgendwie über JS überprüft. Der Kommentar zu ottopress mit 'eindeutiger ID' hat mir nicht geholfen.
Xsonic
1
Mein Problem wurde behoben, als ich sicherstellte, dass die in $ wp_customize-> add_control () verwendete ID eindeutig war.
Dgwyer
@dgwyer, bitte fügen Sie Ihre Lösung als Antwort hinzu, damit diese Frage nicht in der Liste "Unbeantwortet" verbleibt.
Brasofilo
wie mache ich das?
Dgwyer

Antworten:

4

Kontrollkästchen ist möglich. Ein Beispiel, ich hoffe das hilft dir.

Zuerst müssen Sie die Einstellung definieren, über add_settingwichtig ist der Parameter typemit Wert option. Danach steuern Sie das Feld über add_controlund setzen den Parameter typeauf checkbox. Alternativ ist es möglich zu verwenden select. Wenn ich einen Standardwert über hinzufüge std, arbeite ich ihn auch ohne diesen Parameter. Alternative funktioniert auch gut, wenn ich den Auswahlparameter mit den Werten 1 und 0 hinzufüge. Aber bei den Tests funktioniert es gut, wenn ich den Parameter nur auf setze checkbox. Sie finden die Quelle in meinem Projekt, siehe Link unten.

Sie können auch die Ausgabe für die Wertzeichenfolge in der Zeile 246 in der Datei wp-includes / class-wp-customize-control.php debuggen. vielleicht hilft es.

debuggen:

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

Beispiel:

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

Siehe das Ergebnis dieser Quelle. Screenshot mit dem Kontrollkästchen im WordPress-Customizer

Ein Arbeitsergebnis finden Sie in meinem Thema Dokumentation, das auf Github gehostet wird .

bueltge
quelle
3

Ich hatte ein ähnliches Problem und es stellte sich heraus, dass die Einstellung 'type' => 'option'für add_settingdie Ursache war.

Das Entfernen dieses Problems hat mein Problem gelöst. Im Folgenden wird Folgendes verwendet, und es funktioniert einwandfrei.

$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',
        )
    )
);
David Gard
quelle