¿Cómo usar la casilla de verificación y el botón de opción en la página de opciones?


16

Llámame estúpido pero no podría encontrar la manera de hacerlo. Para el ingreso de texto, simplemente:

<input type="text" name="option_name"  value="<?php echo get_option( 'option_name' ); ?>" />

y luego engancharlo en workdpress usando register_setting(). Entonces podría obtener su valor a través get_option('option_name'). ¿Cómo debo hacer eso con casillas de verificación y botones de radio?

Respuestas:


25

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 ...;)


Mi cerebro no funciona esta vez porque estoy frustrado de no poder resolver esto por mi cuenta. ¿Podría explicar qué checked( 1 == $options['option_one']hace? Es checked()una función php porque no pude encontrarla en el manual.
Joann

No puedo explicarlo en un comentario, actualizaré mi respuesta en breve, ver arriba ...;)
t31os

Ahh! ¡Muchísimas gracias por la ayuda! La 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". :-)
Joann

Para aclarar, el primer parámetro es qué verificar, el segundo es con qué comparar el primer valor ... por lo que podría hacer esto, por ejemplo ... 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 ...;)
t31os

33

caja:

<input name="option_name" type="checkbox" value="1" <?php checked( '1', get_option( 'option_name' ) ); ?> />

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' ) ); ?> />

Hay un error tipográfico en su código (el tipo) ..
t31os

1
Usted le dio una respuesta directa a la pregunta, por lo que se obtiene un 1 de mí ...;)
t31os

3
Esta debería ser la respuesta.

¡Eso es todo! Resuelto, debería ser la respuesta.
mircobabini
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.