WordPress无线电盒 - 仅选择最后一个

时间:2013-01-06 18:47:51

标签: wordpress radio-button wordpress-theming checked

所以我有一张如下图所示的表格。它有点长。它包含三个无线电盒。每次我选择一个,无关紧要,然后点击提交,最后一个无线电元素显示为选中而不是我点击的那个。我转储了选项(在这种情况下是aisis_core ['display_rows']),它会说出我选择的无线电元素的值而不是当前选择的电流。

所以我选择列表,它会显示列表,但选中的单选框是no_posts。有人可以告诉我我做错了吗?

 <form action="options.php" method="post">
   <input type='hidden' name='option_page' value='aisis_options' /><input type="hidden"
   name="action" value="update" /><input type="hidden" id="_wpnonce" name="_wpnonce"
   value="f0385965c6" /><input type="hidden" name="_wp_http_referer" value=
   "/WordPressDev/wp-admin/admin.php?page=aisis-core-options&amp;settings-updated=true" />
     <fieldset>
       <div class="control-group">
         <label class="radio"><input type="radio" id="rows" class="display" name=
         "aisis_core[display_rows]" value="display_rows" checked="checked" /> Display
         posts as rows. <a href="#radioRows" data-toggle="modal"></a></label>

         <div class="control-group">
           <label class="radio"><input type="radio" class="display" name=
           "aisis_core[display_rows]" value="list" checked="checked" /> Display posts a
           list. <a href="#radioLists" data-toggle="modal"></a></label>
         </div>

         <div class="control-group">
           <label class="radio"><input type="radio" id="noDisplay" class="display" name=
           "aisis_core[display_rows]" value="no_posts" checked="checked" /> Display no
           posts.</label>

           <div class="no_posts_section borderBottom">
             <div class="well headLine">
               <h1>Display No Rows</h1>

               <p>If you choose to display no rows please give me a url of the page or
               content you would like to display instead.</p>

               <p class="text-info"><strong>Note:</strong> Formatting of said content is
               up you. All we do is display it.</p>
             </div>

             <div class="control-group">
               <div class="controls">
                 <input type="url" name="aisis_core[index_page_no_posts]" value=
                 "http://google.ca" placeholder="Url" />
               </div>
             </div>
           </div>

           <div class="control-group">
             <div class="form-actions">
               <input type="submit" class="btn btn-primary btn-large" />
             </div>
           </div>
         </div>
       </div>
     </fieldset>
   </form>

我在wordpress中使用的功能是:

checked('radio_box_value', isset($options['display_rows']), false)

注意: radio_box_value将替换为无线电盒的值。

在这种情况下,只有最后一个单选框在其标签中有“已选中”,而它应该是我选择的那个。

如何创建元素?

以下是我如何创建元素,它们打印出你在html中为单选按钮看到的内容。这些完成类似于但不完全是zend框架。

它非常直接正在做什么,创建元素,向元素添加选项然后返回它。 我希望这可以更好地了解这些是如何创建的。

protected function _radio_rows_element(){
    $options = get_option('aisis_core');
    echo $options['display_rows'];
    $radio_element = array(
        'name' => 'aisis_core[display_rows]',
        'value' => 'display_rows',
        'class' => 'display',
        'id' => 'rows',
        'checked' => checked('display_rows', isset($options['display_rows']) && $options['display_rows'] == 'display_rows', false),
        'label' => ' Display posts as rows. <a href="#radioRows" data-toggle="modal">
            <i class="icon-info-sign"> </i></a>'        
    );

    $radio = new CoreTheme_Form_Elements_Radio($radio_element, $this->sub_section_rows_array());

    return $radio;
}

protected function _radio_list_element(){
    $options = get_option('aisis_core');
    echo $options['display_rows'];
    $radio_element = array(
            'name' => 'aisis_core[display_rows]',
            'value' => 'list',
            'class' => 'display',
            'checked' => checked('list', isset($options['display_rows']) && $options['display_rows'] == 'list', false),
            'label' => ' Display posts a list. <a href="#radioLists" data-toggle="modal">
            <i class="icon-info-sign"> </i></a>'
    );

    $radio = new CoreTheme_Form_Elements_Radio($radio_element);
    return $radio;
}

protected function _radio_no_posts_element(){
    $options = get_option('aisis_core');
    echo $options['display_rows'];
    $radio_element = array(
            'name' => 'aisis_core[display_rows]',
            'value' => 'no_posts',
            'class' => 'display',
            'id' => 'noDisplay',
            'checked' => checked('no_posts', isset($options['display_rows']) && $options['display_rows'] == 'no_posts', false),
            'label' => ' Display no posts.</a>'
    );

    $radio = new CoreTheme_Form_Elements_Radio($radio_element, $this->_sub_section_now_posts_array());
    return $radio;
}

3 个答案:

答案 0 :(得分:2)

“已检查”功能似乎需要将值作为第二个参数,如此处所述http://codex.wordpress.org/Function_Reference/checked

试试这样:

protected function _radio_rows_element(){
    $options = get_option('aisis_core');
    echo $options['display_rows'];
    $radio_element = array(
        'name' => 'aisis_core[display_rows]',
        'value' => 'display_rows',
        'class' => 'display',
        'id' => 'rows',
        'checked' => checked('display_rows', (isset($options['display_rows']))?$options['display_rows']:'', false),
        'label' => ' Display posts as rows. <a href="#radioRows" data-toggle="modal">
            <i class="icon-info-sign"> </i></a>'        
    );

    $radio = new CoreTheme_Form_Elements_Radio($radio_element, $this->sub_section_rows_array());

    return $radio;
}

protected function _radio_list_element(){
    $options = get_option('aisis_core');
    echo $options['display_rows'];
    $radio_element = array(
            'name' => 'aisis_core[display_rows]',
            'value' => 'list',
            'class' => 'display',
            'checked' => checked('list',(isset($options['display_rows']))?$options['display_rows']:'', false),
            'label' => ' Display posts a list. <a href="#radioLists" data-toggle="modal">
            <i class="icon-info-sign"> </i></a>'
    );

    $radio = new CoreTheme_Form_Elements_Radio($radio_element);
    return $radio;
}

protected function _radio_no_posts_element(){
    $options = get_option('aisis_core');
    echo $options['display_rows'];
    $radio_element = array(
            'name' => 'aisis_core[display_rows]',
            'value' => 'no_posts',
            'class' => 'display',
            'id' => 'noDisplay',
            'checked' => checked('no_posts', (isset($options['display_rows']))?$options['display_rows']:'', false),
            'label' => ' Display no posts.</a>'
    );

    $radio = new CoreTheme_Form_Elements_Radio($radio_element, $this->_sub_section_now_posts_array());
    return $radio;
}

当没有声明变量$ options ['display_rows']时,这不会发出警告(正如你所说的那样是你的情况)并且会将值传递给WordPress函数进行比较。

答案 1 :(得分:0)

您需要检查已检查条件中的值,而不是仅检查是否选择了任何值,在提交后始终为真

变化

checked('display_rows', isset($options['display_rows']), false)

为:

checked('display_rows', isset($options['display_rows']) && $options['display_rows'] == 'display_rows', false),

以及列表:

checked('display_rows', isset($options['display_rows']) && $options['display_rows'] == 'list', false),

答案 2 :(得分:0)

我确实设法写了这个:

public function set_element_checked($value, $option, $key){
    $options = get_option($option);
    if(isset($options[$key]) && $options[$key] == $value){
        return 'checked';
    }
}

完全符合我的要求。将元素值与$ option [$ key]的元素值进行比较,如果它们匹配则返回check。可以通过以下方式调用:

'checked' => set_element_checked('display_rows', 'aisis_core', 'display_rows');