Tiendo a almacenar múltiples opciones como una matriz, 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 devolución de llamada que desinfecta los datos entrantes trata con el valor guardado (la devolución de llamada que debe definir como el tercer parámetro register_setting
). Personalmente, cuando estoy tratando con casillas de verificación, no configuro la clave de matriz, donde, como otros, pueden elegir establecer la clave en 0 (o lo que sea) ...
Entonces 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 tratando con casillas de verificación, mi devolución de llamada de desinfección se verá algo similar a ...
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;
}
Lo eliminé directamente de una de mis clases de complementos (un complemento con solo opciones de casilla de verificación), pero no es un código que puede esperar que funcione si copia, está ahí solo para ilustración.
Para las radios, si no está utilizando la selección múltiple, es algo como esto ...
<?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é configurada antes de compararla con su valor (lo he dejado fuera de lo anterior para mantenerlo breve).
¿Le ayudó lo anterior? Si no, solo hágame saber lo que necesita aclaración ... (o lo que me estoy perdiendo) ...
RE: checked()
Puede encontrar dónde se define 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 desea definirlo) es con lo que se debe verificar. El valor predeterminado para comparar es VERDADERO ... así que si lo hiciera checked( 1 == 1, true )
, estaría verificando si 1 == 1 es igual a verdadero. Si el condicional llega a una coincidencia, entonces checked="checked"
volverás a ti.
NOTA: Soy una basura al explicar las cosas, así que si lo anterior necesita más aclaraciones, no me ofenderé ... solo hágamelo saber ...;)
checked( 1 == $options['option_one']
hace? Eschecked()
una función php porque no pude encontrarla en el manual.checked()
función es 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 al consultar "term + wordpress". :-)checked( 1, 2 )
para verificar si 1 es igual a 2 ... lo que no generaría nada, ya que esto funciton está específicamente diseñado para generar un estado marcado para casillas de verificación o botones de radio ... en cualquier caso, feliz de ayudar ...;)caja:
radio:
fuente