Comment utiliser la case à cocher et le bouton radio dans la page d'options?

16

Appelez-moi stupide, mais je ne sais pas comment le faire. Pour la saisie de texte, je voudrais simplement:

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

puis connectez-le à workdpress à l'aide de register_setting(). Je pourrais alors obtenir sa valeur à travers get_option('option_name'). Comment dois-je faire cela avec des cases à cocher et des boutons radio?

Joann
la source

Réponses:

25

J'ai tendance à stocker plusieurs options sous forme de tableau, donc j'aurais quelque chose comme ça ..

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

Cependant, cela dépend de la façon dont la fonction de rappel qui nettoie les données entrantes traite la valeur enregistrée (le rappel que vous devez définir comme troisième paramètre register_setting). Personnellement, lorsque je traite des cases à cocher, je ne définis pas la clé du tableau, alors que d'autres peuvent choisir de définir la clé sur 0 (ou autre chose à la place) ...

Donc mon code a tendance à ressembler à ça ..

<?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 je ne traite que des cases à cocher, mon rappel de désinfection ressemblera à quelque chose comme ..

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

Extrait cela directement de l'une de mes classes de plugins (un plugin avec seulement des options de case à cocher), mais ce n'est pas du code que vous pouvez vous attendre à travailler si vous copiez, il est là à titre d'illustration uniquement.

Pour les radios, si vous n'utilisez pas la sélection multiple, cela ressemble à ceci.

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

REMARQUE: Il serait bien sûr sage de vérifier que la clé est définie avant de la comparer à sa valeur (j'ai laissé cela hors de ce qui précède pour le garder court).

Est-ce que ce qui précède a aidé? Sinon, faites le moi savoir ce qui doit être clarifié ... (ou ce qui me manque) ..

RÉ: checked()

Vous pouvez trouver où la fonction est définie (dans WordPress) ici. http://core.trac.wordpress.org/browser/tags/3.0.2/wp-includes/general-template.php#L2228

Le premier paramètre est fondamentalement une instruction conditionnelle, et le second paramètre (si vous voulez le définir) est celui à vérifier. La valeur par défaut à comparer est VRAIE ... donc si c'était le cas, checked( 1 == 1, true )je vérifierais si 1 == 1 est égal à vrai. Si le conditionnel correspond à un match, alors vous revenez checked="checked"à vous.

NOTE: Je suis des ordures pour expliquer les choses, donc si ce qui précède a besoin de précisions supplémentaires, je ne serai pas offensé ... faites le moi savoir ..;)

t31os
la source
Mon cerveau ne fonctionne pas comme ça parce que je suis frustré de ne pas pouvoir le comprendre par moi-même. Pourriez-vous expliquer ce que checked( 1 == $options['option_one']fait? Est checked()une fonction php car je ne l'ai pas trouvée dans le manuel.
Joann
Je ne peux pas expliquer dans un commentaire, je mettrai à jour ma réponse sous peu, voir ci-dessus ..;)
t31os
Ahh! Merci beaucoup pour l'aide! La checked()fonction est la seule que je n'ai pas trouvée via google car apparemment elle n'est pas documentée. J'étais tellement habitué à obtenir exactement ce que je voulais en interrogeant "term + wordpress". :-)
Joann
Pour clarifier, le premier paramètre est ce qu'il faut vérifier, le second est ce contre quoi comparer la première valeur ... vous pouvez donc le faire par exemple ... checked( 1, 2 )pour vérifier si 1 est égal à 2 ... qui ne produirait rien, car cela funciton est spécialement conçu pour sortir un état vérifié pour les cases à cocher ou les boutons radio .. dans tous les cas, heureux de vous aider ...;)
t31os
33

case à cocher:

<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' ) ); ?> />
zeo
la source
Il y a une faute de frappe dans votre code (le type) ..
t31os
1
Vous avez répondu directement à la question, vous obtenez donc un +1 de ma part ...;)
t31os
3
Cela devrait être la réponse.
Ça y est ...! Résolu, devrait être la réponse.
mircobabini