Zwykle przechowuję wiele opcji jako tablicę, więc miałbym coś takiego…
<?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'] ); ?> />
Jednak zależy to od tego, jak funkcja oddzwaniania, która odkaża przychodzące dane, radzi sobie z zapisaną wartością (oddzwonienie, które należy zdefiniować jako trzeci parametr register_setting
). Osobiście, gdy mam do czynienia z polami wyboru, nie ustawiam klucza tablicy, gdzie inni mogą zdecydować o ustawieniu klucza na 0 (lub cokolwiek innego zamiast ...)
Więc mój kod faktycznie wygląda tak ...
<?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'] ) ); ?> />
Jeśli mam do czynienia tylko z polami wyboru, moje wywołanie odkażające będzie wyglądać podobnie do ...
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;
}
Zgrałem to prosto z jednej z moich klas wtyczek (wtyczka z tylko opcjami pola wyboru), ale nie jest to kod, którego można się spodziewać po skopiowaniu, jest tylko dla ilustracji.
W przypadku radia, jeśli nie używasz wielokrotnego wyboru, dzieje się to mniej więcej tak ...
<?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'] ); ?> />
UWAGA: Oczywiście rozsądnie byłoby sprawdzić, czy klucz jest ustawiony przed porównaniem go z jego wartością (zostawiłem to z powyższego, aby było krótkie).
Czy powyższe pomogło? Jeśli nie, daj mi znać, co wymaga wyjaśnienia ... (lub czego mi brakuje) ..
RE: checked()
Tutaj możesz znaleźć, gdzie funkcja jest zdefiniowana (w WordPress).
http://core.trac.wordpress.org/browser/tags/3.0.2/wp-includes/general-template.php#L2228
Pierwszy parametr jest w zasadzie instrukcją warunkową, a drugim parametrem (jeśli chcesz go zdefiniować) jest to, co chcesz sprawdzić. Wartością domyślną do porównania jest PRAWDA ... więc gdyby to zrobić checked( 1 == 1, true )
, sprawdziłbym, czy 1 == 1 jest równe prawdzie. Jeśli warunkowy trafi w dopasowanie, zostaniesz checked="checked"
do niego przywrócony.
UWAGA: Mam bzdury w wyjaśnianiu rzeczy, więc jeśli powyższe wymaga dalszych wyjaśnień, nie będę obrażony ... daj mi znać ...;)
checked( 1 == $options['option_one']
robi? Jestchecked()
funkcją php, ponieważ nie mogłem jej znaleźć w instrukcji.