如何在选项页面中使用复选框和单选按钮?

时间:2010-12-07 作者:Joann

叫我笨蛋,但我不知道怎么做。对于文本输入,我只想:

<input type="text" name="option_name"  value="<?php echo get_option( \'option_name\' ); ?>" />
然后使用register_setting(). 然后我可以通过get_option(\'option_name\'). 我应该如何使用复选框和单选按钮?

2 个回复
最合适的回答,由SO网友:t31os 整理而成

我倾向于将多个选项存储为一个数组,所以我会有这样的东西。。

<?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: 我不擅长解释,所以如果以上需要进一步澄清,我不会生气。。。请告诉我……;)

SO网友:zeo

复选框:

<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\' ) ); ?> />

结束

相关推荐

如何获取我在Add_Options_Page中为我的页眉指定的标题

我有add_options_page(\'Post Products Settings\', \'Post Products Settings\', \'administrator\', \'pp_settings\', \'pp_settings_page\'); 无论如何,我可以得到在第一个参数中指定的内容,以便在我的页眉中使用?我知道我可以硬编码,但只是好奇