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


16

叫我愚蠢,但我不知道该怎么做。对于文本输入,我只是:

<input type="text" name="option_name"  value="<?php echo get_option( 'option_name' ); ?>" />

然后使用将其挂接到workdpress中register_setting()。然后,我可以通过它获得其价值get_option('option_name')。我该如何使用复选框和单选按钮?

Answers:


25

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

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

注意:当然,明智的做法是在与它的值进行比较之前检查键的设置(我将其省略以使其简短)。

以上有帮助吗?如果没有,请让我知道需要澄清的内容...(或我所缺少的)。

回覆: 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"返回给您。

注意:我在解释事情上有些垃圾,因此,如果以上内容需要进一步说明,我不会感到冒犯……只要让我知道即可;


我的大脑无法运行这种ime,因为我对自己无法解决这个问题感到沮丧。您能解释一下checked( 1 == $options['option_one']吗?是checked()php函数,因为在手册中找不到。

我无法在评论中解释,我会在不久之后更新我的答案,请参见上方..;)
t31os 2010年

啊!非常感谢你的帮助!该checked()功能是我无法通过Google找到的唯一功能,因为显然没有记录。查询“ term + wordpress”时,我已经习惯了获得想要的东西。:-)

为了明确起见,第一个参数是要检查的内容,第二个参数是将第一个值与...进行比较的内容,因此,例如,可以执行此操作... checked( 1, 2 )检查1是否等于2 ...将不输出任何内容,因为funciton是专门设计用于输出复选框或单选按钮的选中状态。.在任何情况下,乐于助人...;)
t31os 2010年

33

复选框:

<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

1
您直接回答了这个问题,所以您从我这里得到了+1 ...;)
t31os 2010年

3
这应该是答案。

就是这个!解决了,应该是答案。
mircobabini
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.