La casilla de verificación no permanecerá marcada en la página de configuración del complemento

4 minutos de lectura

avatar de usuario
greg l

El campo de mi casilla de verificación en una página de complemento que escribí no permanecerá marcado. Los datos se están guardando, pero la casilla de verificación no refleja el valor almacenado actual (marcado).

Aquí está mi código de función:

public function jo_checkbox_del_setting()
{
    echo "<input id='jo_checkbox_del' name="jo_plugin_options[jo_checkbox_del]" type="checkbox" value="{$this->options["jo_checkbox_del']}' />";
}

y el add_settings_field código:

add_settings_field('jo_checkbox_del', 'Hide Delete Button: ', array($this, 'jo_checkbox_del_setting'), __FILE__, 'jo_main_section');

ingrese la descripción de la imagen aquí

como puede ver en la imagen, el valor es 1 que está marcado, pero la casilla de verificación nunca permanece marcada después de la actualización.

avatar de usuario
brasofilo

Prefiero usar WordPress checked() funcionar con printf() (ver la página para sprintf() para ejemplos de uso):

printf(
    '<input id="%1$s" name="jo_plugin_options[%1$s]" type="checkbox" %2$s />',
    'jo_checkbox_del',
    checked( isset( $this->options['jo_checkbox_del'] ), true, false )
);

  • %1s significa el primer argumento para printfpor lo que no tiene que repetirlo en la lista de argumentos.

    – Niklas Lindblad

    8 de septiembre de 2013 a las 9:42

  • @GregLancaster, sí, como dice Niklas. Normalmente, solo usamos %s sin que OrderNumber$. Pero si desea usar uno de los valores varias veces, o ponerlos en un orden personalizado, entonces el número de orden entra en su lugar. El manual de PHP tiene muchos ejemplos.

    – brasofilo

    08/09/2013 a las 12:55

  • ¿Funcionaría esto también con un botón de opción? Te volví a seleccionar como la mejor respuesta, esto está funcionando a la perfección.

    – Greg L.

    23 de noviembre de 2013 a las 9:48

avatar de usuario
zoranc

usar {checked($this->options['jo_checkbox_del']);} dentro de <input> elemento para devolver el atributo marcado si la opción está establecida.

También recomendaría usar una entrada oculta con el mismo atributo de nombre para manejar el caso cuando la opción no está marcada

public function jo_checkbox_del_setting() {

        echo "<input type="hidden" name="jo_plugin_options[jo_checkbox_del]" value="0" />";

        echo "<input id='jo_checkbox_del' name="jo_plugin_options[jo_checkbox_del]" type="checkbox" value="{$this->options["jo_checkbox_del']}'  {checked($this->options['jo_checkbox_del']);} />";   
}

  • la entrada oculta se asegurará de que se envíe un valor cuando la entrada de la casilla de verificación no marcada no envíe nada como mencionó Niklas

    – Zoranc

    7 sep 2013 a las 16:52

Utilizar el checked atributo de la etiqueta de casilla de verificación en su lugar:

public function jo_checkbox_del_setting()
{
    $checked = ( (int)$this->options['jo_checkbox_del'] == 1 ) ? 'checked' : '';
    echo "<input id='jo_checkbox_del' name="jo_plugin_options[jo_checkbox_del]" type="checkbox" value="{$this->options["jo_checkbox_del']}' $checked />";
}

Este es el única forma de tener una casilla de verificación preseleccionada. Establecer el valor en el valor almacenado no activará automáticamente su configuración.

También tenga en cuenta que, de forma predeterminada, las casillas de verificación en un formulario no se enviarán a menos que estén marcadas.

  • Esta solución encaja como anillo al dedo, y es la ÚNICA enumerada aquí que mantuvo marcada la casilla de verificación. Gracias, gracias, gracias. Si pudiera otorgarle más puntos, lo haría, especialmente por la referencia, aunque no creo que el enlace de referencia realmente explique el razonamiento detrás de por qué / cómo funciona.

    – Greg L.

    9 de septiembre de 2013 a las 2:06

Debe verificar que la casilla de verificación esté marcada y “decirle” a la parte HTML de la página sobre eso.

Entonces, le sugiero que agregue echo is_checkbox_checked() ? "checked" : ""; dónde is_checkbox_checked() es la función que comprueba si [jo_checkbox_del] es true o false.

Su código final se vería así:

<?php
public function jo_checkbox_del_setting()
{ ?>
<input id='jo_checkbox_del' name="<?php echo jo_plugin_options[jo_checkbox_del]; ?>" type="checkbox" value="<?php echo {$this->options["jo_checkbox_del']}; ?>' <?php echo is_checkbox_checked() ? "checked" : ""; ?> />";
<?php } ?>

¿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