web-dev-qa-db-fra.com

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

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 par get_option('option_name'). Comment dois-je faire cela avec les cases à cocher et les boutons radio?

15
Joann

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 manière dont la fonction de rappel qui assainit les données entrantes traite la valeur enregistrée (le rappel que vous devriez être définissant comme le 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 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;
}

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 espérer travailler si vous copiez, c'est pour l'illustration seulement.

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

NOTE: Il serait bien sûr sage de vérifier que la clé est définie avant de la comparer à sa valeur (je l'ai laissée en dehors de ce qui précède pour la garder courte).

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

RE: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 ce qu'il faut vérifier. La valeur par défaut à comparer est TRUE... donc, si je devais faire checked( 1 == 1, true ), je vérifierais si 1 == 1 est égal à true. Si le conditionnel rencontre une correspondance, alors vous obtenez checked="checked" qui vous est renvoyé.

(NOTE:} _ Je suis impuissant à expliquer les choses, donc si ce qui précède nécessite des éclaircissements supplémentaires, je ne serai pas offensé ... faites le moi savoir ..;)

24
t31os

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