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

13

Appelez-moi stupide mais je ne saurais 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 via get_option('option_name') . Comment faire avec les cases à cocher et les boutons radio?

    
posée Joann 07.12.2010 - 16:08

2 réponses

23

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

Toutefois, cela dépend de la manière dont la fonction de rappel qui nettoie les données entrantes traite la valeur enregistrée (le rappel que vous devriez être en tant que troisième paramètre de register_setting ). Personnellement, quand je traite avec des cases à cocher, je ne définit pas la clé de tableau, où d'autres peuvent choisir de définir la clé sur 0 (ou autre chose) ...

Donc, mon code a tendance à ressembler à ceci:

<?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 nettoyage va ressembler à quelque chose de similaire à ..

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

J'ai extrait ça directement d'une de mes classes de plugin (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, c'est là pour illustration seulement.

Pour les radios, si vous n'utilisez pas la sélection multiple, cela ressemble à quelque chose comme ça.

<?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 de vérifier que la clé est définie avant de la comparer à sa valeur (je l'ai laissée de côté pour la garder courte).

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

RE: checked()

Vous pouvez trouver où la fonction est définie (dans WordPress) ici. enlace

Le premier paramètre est fondamentalement une instruction conditionnelle, et le second paramètre (si vous voulez le définir) est ce qu’il faut vérifier. La valeur par défaut à comparer est VRAI ... donc si checked( 1 == 1, true ) était vérifié, je vérifierais si 1 == 1 est égal à vrai. Si le conditionnel rencontre une correspondance, alors vous obtenez checked="checked" qui vous est renvoyé.

REMARQUE: je ne sais pas quoi expliquer. Par conséquent, si ce qui précède nécessite des éclaircissements supplémentaires, je ne serai pas offensé ... faites-le moi savoir ...;)

    
réponse donnée t31os 07.12.2010 - 16:35
28

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' ) ); ?> />
    
réponse donnée zeo 07.12.2010 - 17:09

Lire d'autres questions sur les étiquettes