Agregar un checkbox al personalizador de temas

12 oct 2012, 17:19:00
Vistas: 19K
Votos: 9

Al intentar agregar un checkbox al personalizador de temas, parece estar 'siempre' seleccionado. Si intentas desmarcarlo no se puede, casi como si hubiera algún código JS forzándolo a permanecer seleccionado.

Estoy usando opciones de tema serializadas y todo está conectado correctamente. El código es similar al siguiente (activado mediante el 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'    => __( 'Ocultar descripción del sitio' ),
    'section'  => 'title_tagline',
    'type'     => 'checkbox',
) );

El mismo problema reportado aquí: http://ottopress.com/2012/how-to-leverage-the-theme-customizer-in-your-own-themes/#div-comment-11254.

4
Comentarios

oye, ¿resolviste este problema? A mí me pasa lo mismo. De alguna manera se verifica mediante JS. El comentario en ottopress sobre el 'ID único' no me ayudó.

xsonic xsonic
12 nov 2012 16:08:19

Mi problema se resolvió cuando me aseguré de que el ID usado en $wp_customize->add_control() fuera único.

dgwyer dgwyer
13 nov 2012 16:30:22

@dgwyer, por favor, añade tu solución como una Respuesta, para que esta Pregunta no permanezca en la lista de "Sin responder".

brasofilo brasofilo
20 feb 2013 20:58:31

¿cómo hago eso?

dgwyer dgwyer
21 feb 2013 22:15:18
Todas las respuestas a la pregunta 3
0

El checkbox es posible. Un ejemplo, espero que esto te ayude.

Primero, debes definir la configuración mediante add_setting, lo importante es el parámetro type con el valor option. Después de esto, controla el campo mediante add_control y establece el parámetro type como checkbox. Alternativamente, es posible usar select. Si añado un valor predeterminado mediante std, funciona, incluso sin este parámetro. También funciona bien si añado el parámetro de elección con los valores 1 y 0. Pero en las pruebas, funciona bien si solo establezco el parámetro como checkbox. Encontrarás el código fuente en mi proyecto, mira el enlace de abajo.

También puedes depurar la salida del valor en la línea 246 del archivo wp-includes/class-wp-customize-control.php; quizás te ayude.

depuración:

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

Ejemplo:

// Añadir configuración para la descripción de salida
$wp_customize->add_setting( $this->option_key . '[echo_desc]', array(
    'default'    => $defaults['echo_desc'],
    'type'       => 'option',
    'capability' => 'edit_theme_options'
) );
        
// Añadir control y salida para el campo de selección
$wp_customize->add_control( $this->option_key . '_echo_desc', array(
    'label'      => __( 'Mostrar Descripción', 'documentation' ),
    'section'    => 'title_tagline',
    'settings'   => $this->option_key . '[echo_desc]',
    'type'       => 'checkbox',
    'std'        => '1'
) );

Mira el resultado de este código. captura de pantalla mostrando el checkbox en el personalizador de WordPress

Puedes encontrar un resultado funcional en mi tema Documentation, alojado en GitHub.

6 mar 2013 12:52:58
0

Yo tuve un problema similar y resultó que establecer 'type' => 'option' para add_setting era la causa.

Eliminar esto resolvió mi problema, y a continuación está lo que estoy usando actualmente y funciona perfectamente.

$wp_customize->add_section('footer_social_media_section' , array(
    'title'     => __('Redes Sociales en el 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'     => __('Mostrar enlace de Facebook', 'dd_theme'),
            'section'   => 'footer_social_media_section',
            'settings'  => 'show_footer_facebook',
            'type'      => 'checkbox',
        )
    )
);
31 ene 2014 16:37:20
0

Usar sanitize_callback me ayudó:

$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'   => '¿Mostrar una notificación?',
    'type'    => 'checkbox',
] );

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

Uso:

$display_note_site = get_option('display_note_site');

if( $display_note_site ) {
    // salida html
}
28 abr 2023 11:45:55