微件中的单选按钮未保存

时间:2015-06-14 作者:Allen Tullett

多年来,许多人似乎都遇到了一个共同的问题,我正在努力解决这个问题。在创建小部件时,我需要一系列单选按钮。使用下面的代码,我可以创建并显示单选按钮,但它似乎并没有将值保存到数据库中,当我点击保存按钮时,所有显示为未选中,并且小部件前端没有返回任何内容。

我相信这就是单选按钮本身的声明方式,但确实在与这种编码水平作斗争。这和$this->get_field_id(\'\') 标签未正确声明?我尝试了许多不同的排列,但没有成功。

我很感激你能提供的任何帮助。

// 1
function Widget_case_study() {
    parent::WP_Widget(false, $name = __(\'Radio buttons\', \'radio_buttons\') );
}

// 2
function form($instance) {
$radio_buttons = esc_attr($instance[\'radio_buttons\']);

    ?>
   <p>
    <label for="<?php echo $this->get_field_id(\'text_area\'); ?>">
        <?php echo(\'Radio buttons\'); ?>
    </label><br>
    <label for="<?php echo $this->get_field_id(\'radio_option_1\'); ?>">
        <?php _e(\'Option 1:\'.$radio_buttons); ?>
        <input class="" id="<?php echo $this->get_field_id(\'radio_option_1\'); ?>" name="<?php echo $this->get_field_id(\'radio_buttons\'); ?>" type="radio" value="radio_option_1" <?php if($radio_buttons === \'radio_option_1\'){ echo \'checked="checked"\'; } ?> />
    </label><br>
    <label for="<?php echo $this->get_field_id(\'radio_option_2\'); ?>">
        <?php _e(\'Option 2:\'.$radio_buttons); ?>
        <input class="" id="<?php echo $this->get_field_id(\'radio_option_2\'); ?>" name="<?php echo $this->get_field_id(\'radio_buttons\'); ?>" type="radio" value="radio_option_2" <?php if($radio_option_1 === \'radio_option_2\'){ echo \'checked="checked"\'; } ?> />
    </label>
    </p>
    <?php 
}

// 3
function update($new_instance, $old_instance) {
$instance = $old_instance;
$instance[\'radio_buttons\'] = strip_tags($new_instance[\'radio_buttons\']);
    return $instance;
}

// 4
function widget($args, $instance) { 
    extract( $args );
    $radio_buttons = $instance[\'radio_buttons\'];
?>
        <?php echo $before_widget; ?>
    <p>Radio button value/status: <?php echo $radio_buttons; ?></p>
        <?php echo $after_widget; ?>
    <?php
}

2 个回复
SO网友:Allen Tullett

明白了,结果。。。

每个单选按钮的标签必须是字段id/变量,在我的示例中是“radio\\u buttons”(单选按钮),每个单选按钮的IF语句必须引用相同的id-$radio_buttons === \'radio_option_1\' &;$radio_buttons === \'radio_option_2\'

<p>
    <label for="<?php echo $this->get_field_id(\'text_area\'); ?>">
        <?php echo(\'Radio buttons\'); ?>
    </label><br>
    <label for="<?php echo $this->get_field_id(\'radio_buttons\'); ?>">
        <?php _e(\'Option 1:\'); ?>
        <input class="" id="<?php echo $this->get_field_id(\'radio_option_1\'); ?>" name="<?php echo $this->get_field_name(\'radio_buttons\'); ?>" type="radio" value="radio_option_1" <?php if($radio_buttons === \'radio_option_1\'){ echo \'checked="checked"\'; } ?> />
    </label><br>
    <label for="<?php echo $this->get_field_id(\'radio_buttons\'); ?>">
        <?php _e(\'Option 2:\'); ?>
        <input class="" id="<?php echo $this->get_field_id(\'radio_option_2\'); ?>" name="<?php echo $this->get_field_name(\'radio_buttons\'); ?>" type="radio" value="radio_option_2" <?php if($radio_buttons === \'radio_option_2\'){ echo \'checked="checked"\'; } ?> />
    </label>
    </p>

SO网友:Jonas Lundman

对于任何与javascript问题斗争的人,wrong checked gets checked, 使舒尔HTML不为空checked="" 属性。仅在选定单选按钮上添加属性。

此代码适用于带有单选按钮的小部件without if-statements:

function form( $instance ) {

    /* Option carrier is \'ecw_column\' */
    $ecw_column = isset( $instance[\'ecw_column\'] ) ? $instance[\'ecw_column\'] : \'ecw_column_none\';

    echo \'<p>\';

    $value = \'ecw_column_1\';

    echo \'<input value="\'. $value .\'" class="widefat" id="\'. $this->get_field_id($value) .\'" name="\'. $this->get_field_name(\'ecw_column\') .\'" type="radio"\'. ($ecw_column == $value ? \' checked="checked"\' : \'\') .\' />\';
    echo \'<label for="\'. $this->get_field_id($value) .\'">\'. __(\'Column start\') .\'</label>\';
    echo \'<br/>\';

    $value = \'ecw_column_2\';

    echo \'<input value="\'. $value .\'" class="widefat" id="\'. $this->get_field_id($value) .\'" name="\'. $this->get_field_name(\'ecw_column\') .\'" type="radio"\'. ($ecw_column == $value ? \' checked="checked"\' : \'\') .\' />\';
    echo \'<label for="\'. $this->get_field_id($value) .\'">\'. __(\'Breakpoint\') .\'</label>\';
    echo \'<br/>\';

    $value = \'ecw_column_3\';

    echo \'<input value="\'. $value .\'" class="widefat" id="\'. $this->get_field_id($value) .\'" name="\'. $this->get_field_name(\'ecw_column\') .\'" type="radio"\'. ($ecw_column == $value ? \' checked="checked"\' : \'\') .\' />\';
    echo \'<label for="\'. $this->get_field_id($value) .\'">\'. __(\'Column end\') .\'</label>\';
    echo \'<br/>\';

    /* Default value */
    $value = \'ecw_column_none\';

    echo \'<input value="\'. $value .\'" class="widefat" id="\'. $this->get_field_id($value) .\'" name="\'. $this->get_field_name(\'ecw_column\') .\'" type="radio"\'. ($ecw_column == $value ? \' checked="checked"\' : \'\') .\' />\';
    echo \'<label for="\'. $this->get_field_id($value) .\'">\'. __(\'Current\') .\'</label>\';

    echo \'</p>\';
}

结束

相关推荐

customize footer widgets area

我有一个自定义的页脚小部件区域,它在一行中水平显示最多4个小部件。如果我添加了4个以上的小部件,那么布局就会中断,因为我试图在同一行中显示它。我想让它更灵活,例如有2行(div),我可以在第一行中添加let’s 2 widget,在第二行中添加4个widget。可能我需要的是复制这一个,并制作两个页脚区域。这可能吗?如果可能,我如何实现?下面是我的小部件的实际代码。php: /* Footer Widgets */ $footer_widgets_num = wp_get_sidebars_