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

<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"。.

注意:我在解释事情上有些垃圾,因此,如果上述需要进一步说明,我不会感到冒犯...请让我知道.. ;;)

评论


我的大脑无法运行这种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

#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