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

13

Llámame estúpido, pero no pude averiguar cómo hacerlo. Para la entrada de texto, simplemente:

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

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

    
pregunta Joann 07.12.2010 - 16:08

2 respuestas

23

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 limpia los datos entrantes trata con el valor guardado (la devolución de llamada que debe definir como el tercer parámetro de register_setting ). Personalmente, cuando trato con las casillas de verificación, no configuro la clave de matriz, donde otros pueden elegir configurar 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 me ocupo de las casillas de verificación, mi devolución de llamada de saneamiento 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 borré directamente de una de mis clases de complementos (un complemento con solo opciones de casilla de verificación), pero no es el código que puede funcionar si lo copia, está ahí solo con fines ilustrativos ...

Para las radios, si no estás 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 comprobar que la clave está configurada antes de compararla con su valor (lo he dejado fuera de lo anterior para que sea breve).

¿Ayudó lo anterior? Si no, déjeme saber qué necesita aclarar ... (o lo que me estoy perdiendo) ..

RE: checked()

Aquí puede encontrar dónde se define la función (en WordPress). enlace

El primer parámetro es básicamente una declaración condicional, y el segundo parámetro (si desea definirlo) es contra lo que debe verificar. El valor predeterminado para comparar es VERDADERO ... así que si hiciéramos checked( 1 == 1, true ) , estaría comprobando si 1 == 1 es igual a verdadero. Si el condicional cumple una coincidencia, obtienes checked="checked" devuelto.

NOTA: soy una tonta por explicar las cosas, así que si lo anterior requiere más aclaraciones, no me ofenderé ... solo avíseme ...;)

    
respondido por el t31os 07.12.2010 - 16:35
28

casilla de verificación:

<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' ) ); ?> />
    
respondido por el zeo 07.12.2010 - 17:09

Lea otras preguntas en las etiquetas