web-dev-qa-db-fra.com

ajout d'une case à cocher au personnalisateur de thème

J'ai essayé d'ajouter une case à cocher dans le personnalisateur de thème. J'ai une case à cocher ajoutée en utilisant ce code dans mon 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' );

Une fois que j'ai coché la case à cocher. J'ai trouvé que lorsque j'ai coché la case, cela ne changerait pas d'état. Il est toujours resté vérifié. J'ai fait quelques recherches et trouvé un message sur ce site qui a été résolu mais je n'ai pas laissé de réponse. Cet article m'a amené à penser que je devais modifier la valeur de ma fonction $wp_customize->add_control() en une valeur unique. Alors je l'ai changé en display_supporters. Cela a résolu mon problème, mais je ne peux plus obtenir la valeur de la case à cocher. Quand je vide cette variable,

$supporters = get_theme_mod('display_supporters);

Je me fais bool (faux)

et ça reste comme ça. peu importe ce que je fais à la case à cocher. Qu'est-ce que je rate?

1
Jamie

J'ai pu résoudre ce problème. Voici le code qui a activé la case à cocher.

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

Puis j’ai vérifié la valeur à l’avant comme si

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

Je suis presque sûr que votre paramètre de modification de thème ne s'affiche pas car vous l'enregistrez en tant qu'option. Vous le configurez pour enregistrer en tant qu'option dans la méthode $wp_customize->add_setting avec l'argument 'type' => 'option'.

Comme c'est une option, vous pouvez le récupérer en utilisant plutôt get_option( 'show_supporters' ). Notez que 'show_supporters' est le nom du paramètre que vous avez créé, et non display_supporters.

Cependant, à moins que votre thème ne possède déjà un panneau de paramètres, il est probablement préférable de le stocker dans les paramètres de modification de votre thème. Vous pouvez ensuite utiliser get_theme_mod( 'show_supporters' ) pour obtenir votre valeur. Otto sur Wordpress a écrit un bon article sur remplacer les pages d’option par le personnalisateur de thème .

Je ne pouvais que reproduire le problème avec la case à cocher sans décocher si l'id des méthodes add_setting et add_control ne correspondait pas. J'ai inclus le code qui a fonctionné pour moi ci-dessous.

$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