Cómo obtener los valores de las casillas de verificación personalizadas de WordPress

3 minutos de lectura

No puedo averiguar cómo obtener el valor, ya sea que estén marcados o no, de las casillas de verificación en el administrador de personalización de WP.

Este es el código en functions.php:

$wp_customize->add_setting('social_facebook', array(
    'type'       => 'option',
));

$wp_customize->add_control(
    new WP_Customize_Control(
        $wp_customize,
        'social_facebook',
        array(
            'label'          => __( 'Facebook', 'theme_name' ),
            'section'        => 'social-icons',
            'settings'       => 'social_facebook',
            'type'           => 'checkbox',
        )
    )
);

Y así es como trato de obtener el valor:

<?php
$facebook = get_theme_mod('social_facebook');
if ($facebook != ''){?>
<style>
    .facebook {display:inline!important;}
</style>
<?php }
?>

Los valores de las casillas de verificación son “” (vacío) o “1”, por lo que el sistema registra la verificación de las mismas. Sin embargo, no sé cómo obtener el valor a través del enfoque get_theme_mod. Además, no tienen ningún valor de nombre, por lo que tampoco puedo obtener el valor de la forma habitual.

  • get_theme_mod() funciona con set_theme_mod() no con la API de configuración

    – Michal S.

    03/04/2014 a las 15:12

  • Entonces, ¿sugieres que haga qué?

    – usuario3452005

    4 de abril de 2014 a las 8:07

  • get_theme_mod() funciona con la API de configuración, pero solo si el tipo de configuración es theme_mod (o no especificado). Aquí el tipo de ajuste se especifica como optionasi que get_option() es necesario para recuperar su valor.

    – jake

    7 de noviembre de 2021 a las 19:43

avatar de usuario
Bican M.Valeriu

$sticky_mod = get_theme_mod( 'wca_header_section_sticky' ) == '1' ? 'sticky' : '';

Este es un ejemplo en mi caso: si esa opción está marcada, se repetirá una clase “fija” en mi plantilla.

si la configuración ‘my_theme_settings[social_facebook]’ La casilla de verificación está desmarcada:

<?php if( get_theme_mod( 'my_theme_settings[social_facebook]' ) == '') { ?>

 //if setting is unchecked content here will be shown

<?php } // end if ?>

Para ver el artículo completo, consulte: http://themefoundation.com/wordpress-tema-personalizador

Intente usar y personalizar esto (probado, en functions.php:

function mytheme_customize_register( $wp_customize ){
  $wp_customize->add_section(
  // ID
  'layout_section',
  // Arguments array
  array(
    'title' => __( 'Layout', 'my_theme' ),
    'capability' => 'edit_theme_options',
    'description' => __( 'social needs ;)', 'my_theme' )
  )
 );

 $wp_customize->add_setting(
  // ID
  'my_theme_settings[social_facebook]',
  // Arguments array
  array('type' => 'option')
  );

 $wp_customize->add_control(
  // ID
  'layout_control',
array(
  'type' => 'checkbox',
  'label' => __( 'Facebook', 'my_theme' ),
  'section' => 'layout_section',
  // This last one must match setting ID from above
  'settings' => 'my_theme_settings[social_facebook]'
 )
 );
}

add_action( 'customize_register', 'mytheme_customize_register' );

para leer en plantilla

$my_theme_settings = get_option( 'my_theme_settings' );
echo $my_theme_settings['social_facebook'];

el problema está en WP_Customize_Setting::value(), espera devolver falso para desmarcar la casilla de verificación (o dejar la casilla de verificación sin marcar) mientras que algún programa devolverá ‘0’ o ”.

En mi caso, tengo que extender WP_Customize_Setting y anular el método value() para forzar el retorno booleano.

<?php
class ForceBooleanSettings
extends WP_Customize_Setting {

  public function value() {
    return (bool) parent::value();
  }
}

// Example on using this extend class
$customizer->add_setting(new ForceBooleanSettings(
   $customizer, 
   'myuniquekey', 
   array(
    'default' => false,
    'transport' => 'refresh',
)));

?>

Aquí está mi solución de trabajo:

function theme_name_custom_settings( $wp_customize ) {

    $wp_customize->add_setting( 'social_facebook', array(
        'default'   => 1, // Set default value
        'sanitize_callback' => 'esc_attr', // Sanitize input
        )
    );

    $wp_customize->add_control( 
        new WP_Customize_Control(
            $wp_customize,
            'social_facebook', // Setting ID
            array(
                'label'     => __( 'Facebook', 'theme_name' ),
                'section'   => 'social_icons', // No hyphen
                'settings'  => 'social_facebook', // Setting ID
                'type'      => 'checkbox',
            )
        )
    );

}

add_action( 'customize_register', 'theme_name_custom_settings' );

Luego verifique su valor (0 o 1) así:

if ( !get_theme_mod( 'social_facebook' ) ) { // false
    return;
}

// or

if ( get_theme_mod( 'social_facebook' ) == 1 ) { // true
    return;
}

avatar de usuario
Ión Bucur

<div class="facebook" <?php echo ( get_theme_mod( 'social_facebook' ) ) ? "style="display:none;"" : "" ?>>

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad