Wie verwende ich das Kontrollkästchen und das Optionsfeld auf der Optionsseite?
2 Antworten
- Stimmen
-
- 2010-12-07
Ichneige dazu,mehrere Optionen als Array zu speichern,also hätteich soetwas.
<?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'] ); ?> />
Es hängtjedoch davon ab,wie die Rückruffunktion,die dieeingehenden Datenbereinigt,mit demgespeicherten Wert umgeht (der Rückruf,den Sie als dritten Parameter von
register_setting
definieren sollten). Persönlich,wennichmichmit Kontrollkästchenbeschäftige,setzeich den Array-Schlüsselnicht,da andere den Schlüsselmöglicherweise auf 0 setzen (oder was auchimmer) ...Mein Code sieht alsotatsächlich so aus.
<?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'] ) ); ?> />
Wennichmichnurmit Kontrollkästchenbeschäftige,siehtmein Desinfektionsrückruf ungefähr so aus wie ..
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; }
Das wurde direkt auseinermeiner Plugin-Klassen herausgerissen (ein Pluginmit nur Kontrollkästchen-Optionen),aberesist kein Code,von dem Sieerwarten können,dasserbeim Kopierenfunktioniert. Er dientnur zur Veranschaulichung.
Wenn Siebei Radios keine Mehrfachauswahl verwenden,sieht dies ungefähr so aus.
<?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'] ); ?> />
HINWEIS: Es wärenatürlich ratsam,vor dem Vergleichmit dem Wert zu überprüfen,ob der Schlüsselgesetztist (ich habeihn oben weggelassen,umihn kurz zu halten).
Hat das obengenanntegeholfen? Wennnicht,lassen Siemicheinfach wissen,wasgeklärt werdenmuss ... (oder wasmirfehlt) ..
RE:
checked()
Hierfinden Sie,wo die Funktion definiertist (in WordPress). http://core.trac.wordpress.org/browser/tags/3.0.2/wp-includes/general-template.php # L2228
Dererste Parameteristim Grundeeine bedingte Anweisung,und der zweite Parameter (wenn Sieihn definierenmöchten)ist das,gegen dasgeprüft werdenmuss. Der Standardwert,mit dem verglichen werden soll,ist WAHR . Wenn also
checked( 1 == 1, true )
ausgeführt wird,würdeichprüfen,ob 1==1istgleich wahr. Wenn die Bedingungeine Übereinstimmungtrifft,erhalten Siechecked="checked"
zurück.HINWEIS: Ichbin ein Unsinn,wennes darumgeht,Dinge zuerklären. Wenn das oben Genannte weitergeklärt werdenmuss,werdeichnichtbeleidigt sein ... lassesmicheinfach wissen ..;)
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.. ;)
-
Mein Gehirnfunktioniertnicht so schnell,weilichfrustriertbin,dassich dasnicht alleine herausfinden konnte.Können Sieerklären,was "geprüft (1==$ options [" option_one ")"tut? Ist "geprüft ()"eine PHP-Funktion,weilich sieim Handbuchnichtfinden konnte.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
-
Ich kannesnichtin einem Kommentarerklären,ich werdemeine Antwortin Kürze aktualisieren,siehe oben ..;)I can't explain in a comment, i'll update my answer shortly, see above.. ;)
- 0
- 2010-12-07
- t31os
-
Ahh!Vielen Dankfür die Hilfe!Die Funktion "checked ()"ist dieeinzige,dieich über Googlenichtfinden konnte,da sie anscheinendnicht dokumentiertist.Ich wares sogewohnt,genau das zubekommen,wasich wollte,wennich "term + wordpress" abfragte.:-)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
-
Zur Verdeutlichungist dererste Parameter zu überprüfen,der zweiteist,was dererste Wertmit ... zu vergleichenist. Sie können diesbeispielsweisetun ... "überprüft (1,2)",um zu überprüfen,ob 1gleich 2ist..,dienichts ausgeben würde,da diese Funktion speziell dafür ausgelegtist,einen aktivierten Statusfür Kontrollkästchen oder Optionsfelder auszugeben .. aufjeden Fallgerne helfen ...;)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
Kontrollkästchen:
<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' ) ); ?> />
-
Ihr Codeenthälteinen Tippfehler (den Typ).There's a typo in your code(the type)..
- 0
- 2010-12-07
- t31os
-
Du hasteine direkte Antwort auf die Fragegegeben,alsobekommst dueine +1 vonmir ...;)You gave a direct answer to the question, so you get a +1 from me ... ;)
- 1
- 2010-12-07
- t31os
-
Dasistes!Gelöst sollte die Antwort sein.This is it! Solved, should be the answer.
- 0
- 2017-02-07
- mircobabini
Nennmich dumm,aberich kannnicht herausfinden,wieesgeht.Für die Texteingabe würdeichnur:
und haken Siees dannmit
register_setting()
in workdpressein.Ich könnte dann seinen Wert durchget_option('option_name')
erhalten.Wie sollich dasmit Kontrollkästchen und Optionsfeldernmachen?