5 votes

La case à cocher ne reste pas cochée sur la page des paramètres du plugin

Mon champ de case à cocher sur une page de plugin que j'ai écrite ne reste pas coché. Les données sont enregistrées, mais la case à cocher ne reflète pas la valeur actuelle enregistrée (cochée).

Voici le code de ma fonction :

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']}' />";
}

et le add_settings_field code :

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

enter image description here

comme vous pouvez le voir dans l'image, la valeur est 1, ce qui est coché, mais la case à cocher ne reste jamais cochée après le rafraîchissement.

12voto

brasofilo Points 11907

Je préfère utiliser WordPress checked() fonction avec printf() (voir la page pour sprintf() pour des exemples d'utilisation) :

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

3voto

zoranc Points 2394

Utiliser {checked($this->options['jo_checkbox_del']);} à l'intérieur de la <input> pour renvoyer l'attribut coché si l'option est définie.

Je recommande également d'utiliser une entrée cachée avec le même attribut de nom pour gérer le cas où l'option n'est pas cochée.

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']);} />";   
}

2voto

Niklas Lindblad Points 1021

Utilisez le checked de la balise checkbox :

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 />";
}

C'est le seul moyen d'avoir une case à cocher présélectionnée . Le fait de régler la valeur sur la valeur mémorisée ne déclenche pas automatiquement son réglage.

Sachez également que, par défaut, les cases à cocher d'un formulaire ne seront pas envoyées du tout si elles ne sont pas cochées.

0voto

ahmed Points 57

Vous devez vérifier que la case à cocher est cochée et en informer la partie HTML de la page.

Je vous suggère donc d'ajouter echo is_checkbox_checked() ? "checked" : ""; donde is_checkbox_checked() est la fonction qui vérifie si [jo_checkbox_del] es true ou false .

Votre code final devrait ressembler à ceci :

<?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 } ?>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X