web-dev-qa-db-de.com

hinzufügen eines Kontrollkästchens zum Theme-Customizer

Ich habe versucht, ein Kontrollkästchen in den Theme-Customizer einzufügen. Ich habe ein Kontrollkästchen mit diesem Code in meiner functions.php hinzugefügt

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

Sobald ich das Kontrollkästchen aktiviert habe. Ich habe festgestellt, dass sich der Status nicht ändert, wenn ich das Kontrollkästchen aktiviert habe. Es blieb immer überprüft. Ich habe nach Beiträgen auf dieser Seite gesucht und sie gefunden, die gelöst wurden, aber keine Antwort hinterlassen haben. Der Beitrag hat mich zu der Annahme veranlasst, dass ich den Wert in meiner Funktion $wp_customize->add_control() in einen eindeutigen Wert ändern muss. Also habe ich es in display_supporters geändert. Dies hat mein Problem gelöst, aber jetzt kann ich den Wert des Kontrollkästchens nicht mehr abrufen. Wenn ich diese Variable ausgeben,

$supporters = get_theme_mod('display_supporters);

Ich bekomme Bool (falsch)

und es bleibt dabei. egal was ich mit der Checkbox mache. Was vermisse ich?

1
Jamie

Ich konnte das lösen. Hier ist der Code, mit dem die Checkbox funktioniert.

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

Dann habe ich wie folgt nach dem Wert im Frontend gesucht

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

Ich bin mir ziemlich sicher, dass Ihre Theme-Änderungseinstellung nicht angezeigt wird, da Sie sie als Option speichern. Sie stellen es so ein, dass es in der $wp_customize->add_setting-Methode mit dem 'type' => 'option'-Argument als Option gespeichert wird.

Da dies eine Option ist, können Sie sie stattdessen mit get_option( 'show_supporters' ) abrufen. Beachten Sie, dass "show_supporters" der Name der von Ihnen erstellten Einstellung ist, nicht "display_supporters".

Sofern Ihr Design nicht bereits über ein Einstellungsfeld verfügt, ist es wahrscheinlich am besten, es in den Änderungseinstellungen Ihres Designs zu speichern. Sie können dann get_theme_mod( 'show_supporters' ) verwenden, um Ihren Wert zu ermitteln. Otto bei Wordpress hat einen guten Artikel über Ersetzen von Optionsseiten durch den Theme-Customizer geschrieben.

Ich konnte das Problem nur reproduzieren, wenn das Kontrollkästchen nicht deaktiviert war und die ID der Methoden add_setting und add_control nicht übereinstimmte. Ich habe unten den Code eingefügt, der für mich funktioniert hat.

$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