<input type="text" name="option_name" value="<?php echo get_option( 'option_name' ); ?>" />
,然后使用
register_setting()
将其挂接到workdpress中。然后,我可以通过get_option('option_name')
获得其价值。我该如何使用复选框和单选按钮?#1 楼
我倾向于将多个选项存储为一个数组,所以我会有类似的内容。.<?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'] ); ?> />
但是它确实取决于如何清理传入数据的回调函数。处理保存的值(您应将回调定义为
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'] ); ?> />
注意:当然,明智的做法是在与它的值进行比较之前,请检查该键是否已设置(我已将其省略以使其简短)。
上面的帮助有用吗?如果没有,请让我知道需要澄清的内容(或我所缺少的内容)。..
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"
。.注意:我在解释事情上有些垃圾,因此,如果上述需要进一步说明,我不会感到冒犯...请让我知道.. ;;)
#2 楼
复选框:<input name="option_name" type="checkbox" value="1" <?php checked( '1', get_option( 'option_name' ) ); ?> />
收音机:
<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' ) ); ?> />
评论
您的代码(类型)中有一个错字。
– t31os
2010-12-7 16:20
您直接回答了这个问题,所以您从我这里得到+1 ...;)
– t31os
2010-12-7 17:21
这应该是答案。
–user26607
2013年6月20日13:28
就是这个!解决了,应该是答案。
–mircobabini
17年2月7日在13:44
评论
我的大脑无法运行这种ime,因为我对自己无法解决这个问题感到沮丧。您能解释一下checked(1 == $ options ['option_one']的作用吗?checked()是一个PHP函数,因为在手册中找不到它。
–琼
2010-12-7 16:24
我无法在评论中解释,我会尽快更新我的答案,请参见上文。;;)
– t31os
2010-12-7 16:29
啊!非常感谢你的帮助!我无法通过google找到checked()函数,因为显然没有记录。查询“ term + wordpress”时,我已经习惯于得到我想要的东西。 :-)
–琼
2010-12-7 16:53
为了明确起见,第一个参数是要检查的参数,第二个参数是将第一个值与...进行比较的对象,因此您可以执行此操作,例如... checked(1,2)检查1是否等于2 ...不会输出任何内容,因为此功能是专门为输出复选框或单选按钮的选中状态而设计的。在任何情况下,我们乐于帮助...;)
– t31os
2010-12-7 17:05