0

所以我有一个如下所示的表格。它有点长。它包含三个单选框。每次我选择一个,不管是哪个,然后点击提交,最后一个单选元素都会显示为已选中,而不是我单击的那个。我 var 转储选项(在本例中为 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;
}
4

3 回答 3

1

“checked”函数似乎需要该值作为第二个参数,如此处所述 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 函数进行比较。

于 2013-01-07T00:33:53.710 回答
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),
于 2013-01-06T20:41:35.863 回答
0

我确实设法写了这个:

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

这正是我想要的。将元素值与 $option[$key] 的值进行比较,如果它们匹配,则返回检查。可以通过以下方式调用:

'checked' => set_element_checked('display_rows', 'aisis_core', 'display_rows');
于 2013-01-07T01:03:28.387 回答