问题描述

调用我很愚蠢,但我没有弄清楚如何做到这一点。对于文本输入,我只是:

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

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

最佳解决方案

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

<?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"返回给你..

注意:我在解释事情时是垃圾,所以如果上述需要进一步澄清,我不会被冒犯… 只是让我知道..)

次佳解决方案

复选框:

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

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。