Aggiungere una checkbox al personalizzatore del tema

12 ott 2012, 17:19:00
Visualizzazioni: 19K
Voti: 9

Quando provo ad aggiungere una checkbox al personalizzatore del tema, sembra essere sempre selezionata. Se provi a deselezionarla non riesci, come se ci fosse del codice JS che la forza a rimanere selezionata.

Sto utilizzando opzioni del tema serializzate e tutto è collegato correttamente. Il codice è simile al seguente (attivato tramite l'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'    => __( 'Nascondi la descrizione del sito' ),
    'section'  => 'title_tagline',
    'type'     => 'checkbox',
) );

Stesso problema segnalato qui: http://ottopress.com/2012/how-to-leverage-the-theme-customizer-in-your-own-themes/#div-comment-11254.

4
Commenti

hey, hai risolto questo problema? Anche io ho lo stesso. Viene controllato in qualche modo via JS. Il commento su ottopress con 'ID univoco' non mi ha aiutato.

xsonic xsonic
12 nov 2012 16:08:19

Il mio problema è stato risolto quando mi sono assicurato che l'ID usato in $wp_customize->add_control() fosse univoco.

dgwyer dgwyer
13 nov 2012 16:30:22

@dgwyer, per favore, aggiungi la tua soluzione come Risposta, così questa Domanda non rimane nella lista "Senza risposta".

brasofilo brasofilo
20 feb 2013 20:58:31

come faccio a farlo?

dgwyer dgwyer
21 feb 2013 22:15:18
Tutte le risposte alla domanda 3
0

La checkbox è possibile. Un esempio, spero che questo ti aiuti.

Per prima cosa, devi definire l'impostazione tramite add_setting, importante è il parametro type con il valore option. Successivamente, controlla il campo tramite add_control e imposta il parametro type a checkbox. In alternativa, è possibile utilizzare select. Se aggiungo un valore predefinito tramite std, funziona comunque, anche senza questo parametro. Funziona bene anche se aggiungo il parametro delle scelte con i valori 1 e 0. Ma nei test, funziona bene se imposto il parametro solo su checkbox. Puoi trovare il sorgente nel mio progetto, vedi il link in basso.

Inoltre, puoi eseguire il debug dell'output sul valore stringa alla riga 246 nel file wp-includes/class-wp-customize-control.php; forse ti aiuterà.

debug:

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

Esempio:

// Aggiungi impostazioni per l'output della descrizione
$wp_customize->add_setting( $this->option_key . '[echo_desc]', array(
    'default'    => $defaults['echo_desc'],
    'type'       => 'option',
    'capability' => 'edit_theme_options'
) );
        
// Aggiungi controllo e output per il campo select
$wp_customize->add_control( $this->option_key . '_echo_desc', array(
    'label'      => __( 'Mostra Descrizione', 'documentation' ),
    'section'    => 'title_tagline',
    'settings'   => $this->option_key . '[echo_desc]',
    'type'       => 'checkbox',
    'std'        => '1'
) );

Vedi il risultato di questo sorgente. screenshot che mostra la checkbox nel personalizzatore di WordPress

Puoi trovare un risultato funzionante nel mio tema Documentation, ospitato su GitHub.

6 mar 2013 12:52:58
0

Anch'io avevo un problema simile, e si è scoperto che impostare 'type' => 'option' per add_setting era la causa.

Rimuovendo questa opzione ho risolto il problema, e di seguito riporto il codice che attualmente utilizzo e che funziona perfettamente.

$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'     => __('Mostra link Facebook', 'dd_theme'),
            'section'   => 'footer_social_media_section',
            'settings'  => 'show_footer_facebook',
            'type'      => 'checkbox',
        )
    )
);
31 gen 2014 16:37:20
0

L'uso di sanitize_callback mi ha aiutato:

$setting = 'display_note_site';

$wp_customize->add_setting( $setting, [
    'type' => 'option',
    'transport' => $transport,
    'sanitize_callback' => 'sanitize_checkbox',
] );

$wp_customize->add_control( $setting, [
    'section' => $section,
    'label'   => 'Mostrare una notifica?',
    'type'    => 'checkbox',
] );

function sanitize_checkbox( $checked ) {
    return $checked == 1 ? 1 : '';
}

Utilizzo:

$display_note_site = get_option('display_note_site');

if( $display_note_site ) {
    // output html
}
28 apr 2023 11:45:55