我倾向于将多个选项存储为一个数组,所以我会有这样的东西。。
<?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\'] ); ?> />
但是,它确实取决于清理传入数据的回调函数如何处理保存的值(您所使用的回调函数
should be 定义为的第三个参数
register_setting
). 就我个人而言,当我处理复选框时,我不会设置数组键,因为其他人可能会选择将键设置为0(或其他任何选项)。。。
所以我的代码实际上是这样的。。
<?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\'] ) ); ?> />
如果我只处理复选框,我的消毒回调将看起来像。。
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;
}
直接从我的一个插件类(一个只有复选框选项的插件)中删除了它,但如果你复制它,它并不是你可以预期的工作代码,它只是用于演示。。
对于收音机,如果您不使用多重选择,则会出现如下情况。。
<?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: 当然,在比较键的值之前检查键是否已设置是明智的(为了保持简短,我在上面没有提到这一点)。
以上有帮助吗?如果没有,请告诉我需要澄清什么。。。(或者我错过了什么)。。
RE: checked()
您可以在此处找到函数的定义位置(在WordPress中)。http://core.trac.wordpress.org/browser/tags/3.0.2/wp-includes/general-template.php#L2228
第一个参数基本上是一个条件语句,第二个参数(如果要定义它)是要检查的对象。要比较的默认值为TRUE... 所以如果我们checked( 1 == 1, true )
我要检查1==1是否等于true。如果条件匹配,则checked="checked"
返回给您。。
NOTE: 我不擅长解释,所以如果以上需要进一步澄清,我不会生气。。。请告诉我……;)