Comment utiliser la case à cocher et le bouton radio dans la page d'options?
2 réponses
- votes
-
- 2010-12-07
J'aitendance à stockerplusieurs options sousforme detableau,doncj'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 lamanière dont lafonction de rappel quinettoie les donnéesentrantestraite la valeurenregistrée (le rappel que vous devriez définir commetroisièmeparamètre de
register_setting
). Personnellement,lorsqueje traite des cases à cocher,je nemetspas la clé dutableau,alors que d'autrespeuvent choisir de définir la clé sur 0 (ou autre chose à laplace) ...Mon code a donctendance à 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'] ) ); ?> />
Sije netraite que des cases à cocher,mon rappel de désinfection ressemblera à quelque chose dugenre ..
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; }
Je l'aiextrait directement de l'une demes classes deplugins (unplugin avec uniquement des options de case à cocher),mais cen'estpas du code que vouspouvezespérerfonctionner si vous copiez,ilest làpourillustration seulement ..
Pour les radios,si vousn'utilisezpas la sélectionmultiple,cela sepasse comme suit.
<?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 seraitbien sûrjudicieux de vérifier que la cléest définie avant de comparer avec sa valeur (j'ai laissé celaen dehors de ce quiprécèdepour resterbref).
Les éléments ci-dessus vous ont-ils aidé? Sinon,faites-moi savoir ce qui doit être clarifié ... (ou ce quime manque) ..
RE:
checked()
Vouspouveztrouver où lafonctionest définie (dans WordPress)ici. http://core.trac.wordpress.org/browser/tags/3.0.2/wp-includes/general-template.php # L2228
Lepremierparamètreestfondamentalement uneinstruction conditionnelle,et le deuxièmeparamètre (si vous voulez le définir)est contre quoi vérifier. La valeurpar défaut à comparerest TRUE ... donc si vous deviezfaire
checked( 1 == 1, true )
je vérifierais si 1==1est égal à vrai. Si le conditionnel rencontre une correspondance,alors vous obtenezchecked="checked"
renvoyé.REMARQUE: Je suisnulpourexpliquer les choses,donc si ce quiprécèdenécessite des éclaircissements supplémentaires,je ne seraipas offensé ...faites-lemoi savoir ..;)
I tend to store multiple options as an array, so i'd have something like this..
<?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'] ); ?> />
However it does depend how the callback function that sanitizes the incoming data deals with the saved value(the callback you should be defining as the third parameter of
register_setting
). Personally when i'm dealing with checkboxes I don't set the array key, where as others may choose to set the key to 0(or whatever instead)...So my code actually tends to look like this..
<?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'] ) ); ?> />
If i'm only dealing with checkboxes my sanitization callback will look something along the lines of..
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; }
Ripped that straight from one of my plugin classes(a plugin with only checkbox options), but it's not code you can expect to work if you copy, it's there for illustration only..
For radios, if you're not using multiple selection it goes something like this..
<?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: It would of course to be wise to check the key is set before comparing against it's value (i've left that out of the above to keep it short).
Did the above help? If not, just let me know what needs clarifying... (or what i'm missing)..
RE:
checked()
You can find where the function is defined(in WordPress) here. http://core.trac.wordpress.org/browser/tags/3.0.2/wp-includes/general-template.php#L2228
The first parameter is basically a conditional statement, and the second parameter(if you want to define it) is what to check against. The default value to compare against is TRUE... so if were to do
checked( 1 == 1, true )
i'd be checking if 1 == 1 is equal to true. If the conditional hits a match, then you getchecked="checked"
returned to you..NOTE: I'm rubbish at explaining things, so if the above needs further clarification I won't be offended... just let me know.. ;)
-
Mon cerveaune fonctionnepas de cettefaçonparce queje suisfrustré dene paspouvoir comprendre celaparmoi-même.Pourriez-vousexpliquer ce quefait check (1==$ options ['option_one'] `? Est-ce que check ()`est unefonctionphpparce queje ne l'aipastrouvée dans lemanuel.My brain isn't functioning this ime because I am frustrated that I couldn't figure this out on my own. Could you explain what `checked( 1 == $options['option_one']` does? Is `checked()` a php function because I couldn't find it in the manual.
- 0
- 2010-12-07
- Joann
-
Jene peuxpas l'expliquer dans un commentaire,je mettrai àjourma réponse souspeu,voir ci-dessus ..;)I can't explain in a comment, i'll update my answer shortly, see above.. ;)
- 0
- 2010-12-07
- t31os
-
Ahh!Mercibeaucouppour l'aide!Lafonction `checked ()`est la seule queje n'aipasputrouver sur Google car apparemmentellen'estpas documentée.J'étaistellement habitué à obtenirexactement ce queje voulaisen interrogeant "terme + wordpress".:-)Ahh! Thanks so much for the help! The `checked()` function is the only one I couldn't find thru google because apparently it's not documented. I was so used to getting exactly what I want when querying "term + wordpress". :-)
- 0
- 2010-12-07
- Joann
-
Pour clarifier,lepremierparamètreest ce qu'ilfaut vérifier,le secondest ce à quoi comparer lapremière valeur ... vouspouvez donc lefaireparexemple ... `vérifié (1,2)`pour vérifier si 1est égal à 2 ...quine produirait rien,puisque cettefonctionest spécifiquement conçuepour afficher un état vérifiépour les cases à cocher ou lesboutons radio .. danstous les cas,heureux de vous aider ...;)To clarify, first parameter is what to check, second is what to compare the first value against... so you could do this for example... `checked( 1, 2 )` to check if 1 is equal to 2 ... which would output nothing, since this funciton is specificially designed to output a checked state for checkboxes or radio buttons.. in any case, happy to help... ;)
- 0
- 2010-12-07
- t31os
-
- 2010-12-07
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' ) ); ?> />
checkbox:
<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' ) ); ?> />
-
Il y a unefaute defrappe dans votre code (letype).There's a typo in your code(the type)..
- 0
- 2010-12-07
- t31os
-
Vous avez donné une réponse directe à la question,vous obtenez donc un +1 demapart ...;)You gave a direct answer to the question, so you get a +1 from me ... ;)
- 1
- 2010-12-07
- t31os
-
Ça yest ...!Résolu,devrait être la réponse.This is it! Solved, should be the answer.
- 0
- 2017-02-07
- mircobabini
Traitez-moi de stupidemaisje ne saispas commentfaire.Pour la saisie detexte,je voudrais simplement:
puis connectez-le à workdpressen utilisant
register_setting()
.Jepourrais alors obtenir sa valeur viaget_option('option_name')
.Comment dois-jefaire cela avec des cases à cocheret desboutons radio?