Adăugarea unei casete de bifare în personalizatorul de teme

12 oct. 2012, 17:19:00
Vizualizări: 19K
Voturi: 9

Atunci când încerc să adaug o casetă de bifare în personalizatorul de teme, aceasta pare să fie 'întotdeauna' bifată. Dacă încerci să o debifezi, nu poți, aproape ca și cum ar exista un cod JS care o forțează să rămână bifată.

Folosesc opțiuni de temă serializate și totul este conectat corect. Codul este similar cu următorul (declanșat prin hook-ul 'customize_register'):

$wp_customize->add_setting( mytheme_options[chk_hide_description], array(
    'default'        => false,    // Valoare implicită
    'type'           => 'option', // Tipul setării
    'capability'     => 'edit_theme_options' ) // Capabilitatea necesară
);

$wp_customize->add_control( 'display_header_text', array(
    'settings' => mytheme_options[chk_hide_description], // Setările de control
    'label'    => __( 'Ascunde descrierea site-ului' ),   // Eticheta controlului
    'section'  => 'title_tagline',                       // Secțiunea în care apare
    'type'     => 'checkbox',                            // Tipul controlului
) );

Aceeași problemă raportată aici: http://ottopress.com/2012/how-to-leverage-the-theme-customizer-in-your-own-themes/#div-comment-11254.

4
Comentarii

hei, ai rezolvat această problemă? La fel și la mine. Pare să fie verificat cumva prin JS. Comentariul de pe ottopress cu 'ID unic' nu m-a ajutat.

xsonic xsonic
12 nov. 2012 16:08:19

Problema mea a fost rezolvată când m-am asigurat că ID-ul folosit în $wp_customize->add_control() era unic.

dgwyer dgwyer
13 nov. 2012 16:30:22

@dgwyer, te rog, adaugă soluția ta ca Răspuns, astfel încât această Întrebare să nu rămână în lista "Fără răspuns".

brasofilo brasofilo
20 feb. 2013 20:58:31

cum fac asta?

dgwyer dgwyer
21 feb. 2013 22:15:18
Toate răspunsurile la întrebare 3
0

Caseta de bifat este posibilă. Un exemplu, sper că te ajută.

Mai întâi, trebuie să definești setarea, prin add_setting, important este parametrul type cu valoarea option. După aceasta, controlează câmpul prin add_control și setează parametrul type la checkbox. Alternativ, este posibil să folosești select. Dacă adaug o valoare implicită prin std, atunci funcționează, de asemenea fără acest parametru. Alternativ funcționează de asemenea bine, dacă adaug parametrul de alegere cu valorile 1 și 0. Dar în teste, funcționează bine dacă setez parametrul doar la checkbox. Găsești sursa în proiectul meu, vezi linkul de mai jos.

De asemenea, poți depana ieșirea pe șirul de valoare pe linia 246 din wp-includes/class-wp-customize-control.php; poate te ajută.

depanare:

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

Exemplu:

// Adaugă setări pentru afișarea descrierii
$wp_customize->add_setting( $this->option_key . '[echo_desc]', array(
    'default'    => $defaults['echo_desc'],
    'type'       => 'option',
    'capability' => 'edit_theme_options'
) );
        
// Adaugă control și ieșire pentru câmpul de selectare
$wp_customize->add_control( $this->option_key . '_echo_desc', array(
    'label'      => __( 'Afișează Descrierea', 'documentation' ),
    'section'    => 'title_tagline',
    'settings'   => $this->option_key . '[echo_desc]',
    'type'       => 'checkbox',
    'std'        => '1'
) );

Vezi rezultatul acestei surse. captură de ecran care ilustrează caseta de bifat în personalizatorul WordPress

Găsești un rezultat funcțional în tema mea Documentation, găzduit pe GitHub.

6 mar. 2013 12:52:58
0

Am avut o problemă similară și s-a dovedit că setarea 'type' => 'option' pentru add_setting era cauza.

Eliminarea acestei setări mi-a rezolvat problema, iar mai jos este ceea ce folosesc în prezent și funcționează perfect.

$wp_customize->add_section('footer_social_media_section' , array(
    'title'     => __('Rețele Sociale în Footer', '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'     => __('Afișează Link Facebook', 'dd_theme'),
            'section'   => 'footer_social_media_section',
            'settings'  => 'show_footer_facebook',
            'type'      => 'checkbox',
        )
    )
);
31 ian. 2014 16:37:20
0

Folosirea sanitize_callback m-a ajutat:

$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'   => 'Afișează o notificare?',
    'type'    => 'checkbox',
] );

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

Utilizare:

$display_note_site = get_option('display_note_site');

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