¿Cómo usar checkbox y radio button en una página de opciones?
Pueden llamarme tonto pero no pude entender cómo hacerlo. Para un campo de texto simplemente haría:
<input type="text" name="option_name" value="<?php echo get_option( 'option_name' ); ?>" />
y luego lo conectaría a WordPress usando register_setting()
. Entonces podría obtener su valor a través de get_option('option_name')
. ¿Cómo debería hacerlo con checkboxes y radio buttons?

casilla de verificación:
<input name="option_name" type="checkbox" value="1" <?php checked( '1', get_option( 'option_name' ) ); ?> />
botón de radio:
<input name="option_name" type="radio" value="0" <?php checked( '0', get_option( 'option_name' ) ); ?> />
<input name="option_name" type="radio" value="1" <?php checked( '1', get_option( 'option_name' ) ); ?> />

Diste una respuesta directa a la pregunta, así que te doy un +1 de mi parte... ;)

Suelo almacenar múltiples opciones como un array, así que tendría algo como esto...
<?php $options = get_option( 'myoption' ); ?>
<input type="checkbox" name="myoption[option_one]" value="1"<?php checked( 1 == $options['option_one'] ); ?> />
<input type="checkbox" name="myoption[option_two]" value="1"<?php checked( 1 == $options['option_two'] ); ?> />
Sin embargo, depende de cómo la función de callback que sanitiza los datos entrantes maneja el valor guardado (el callback que deberías estar definiendo como tercer parámetro de register_setting
). Personalmente, cuando trabajo con checkboxes no establezco la clave del array, mientras que otros podrían elegir establecer la clave a 0 (o cualquier otro valor)...
Así que mi código en realidad tiende a verse así...
<?php $options = get_option( 'myoption' ); ?>
<input type="checkbox" name="myoption[option_one]" value="1"<?php checked( isset( $options['option_one'] ) ); ?> />
<input type="checkbox" name="myoption[option_two]" value="1"<?php checked( isset( $options['option_two'] ) ); ?> />
Si solo estoy trabajando con checkboxes, mi callback de sanitización se vería algo así...
public function on_option_save( $options ) {
if( !is_array( $options ) || empty( $options ) || ( false === $options ) )
return array();
$valid_names = array_keys( $this->defaults );
$clean_options = array();
foreach( $valid_names as $option_name ) {
if( isset( $options[$option_name] ) && ( 1 == $options[$option_name] ) )
$clean_options[$option_name] = 1;
continue;
}
unset( $options );
return $clean_options;
}
Extraído directamente de una de mis clases de plugins (un plugin con solo opciones de checkbox), pero no es código que puedas esperar que funcione si lo copias, está ahí solo para ilustración...
Para radios, si no estás usando selección múltiple, sería algo así...
<?php $options = get_option( 'my_option' ); ?>
<input type="radio" name="myoption[option_three]" value="value1"<?php checked( 'value1' == $options['option_three'] ); ?> />
<input type="radio" name="myoption[option_three]" value="value2"<?php checked( 'value2' == $options['option_three'] ); ?> />
NOTA: Por supuesto, sería prudente verificar que la clave está establecida antes de comparar su valor (lo he omitido arriba para mantenerlo breve).
¿Te ayudó lo anterior? Si no, solo házme saber qué necesita aclaración... (o qué me falta).
RE: checked()
Puedes encontrar dónde está definida la función (en WordPress) aquí. http://core.trac.wordpress.org/browser/tags/3.0.2/wp-includes/general-template.php#L2228
El primer parámetro es básicamente una declaración condicional, y el segundo parámetro (si quieres definirlo) es contra qué comparar. El valor predeterminado para comparar es TRUE... así que si hiciera checked( 1 == 1, true )
, estaría verificando si 1 == 1 es igual a true. Si la condición coincide, entonces obtienes checked="checked"
como resultado...
NOTA: Soy pésimo explicando cosas, así que si lo anterior necesita más aclaración, no me ofenderé... solo házmelo saber.. ;)

Mi cerebro no está funcionando bien ahora porque estoy frustrado de no haber podido resolver esto por mi cuenta. ¿Podrías explicar qué hace checked( 1 == $options['option_one']
? ¿Es checked()
una función de php? Porque no pude encontrarla en el manual.

No puedo explicarlo en un comentario, actualizaré mi respuesta pronto, mira arriba.. ;)

¡Ahh! ¡Muchas gracias por la ayuda! La función checked()
fue la única que no pude encontrar a través de Google porque aparentemente no está documentada. Estaba tan acostumbrado a obtener exactamente lo que quiero cuando busco "término + wordpress". :-)

Para aclarar, el primer parámetro es qué comparar, el segundo es contra qué comparar el primer valor... así que podrías hacer esto por ejemplo... checked( 1, 2 )
para verificar si 1 es igual a 2 ... lo cual no devolvería nada, ya que esta función está diseñada específicamente para mostrar el estado marcado de checkboxes o radio buttons.. en cualquier caso, feliz de ayudar... ;)
