0

だから私は以下に示すようなフォームを持っています。少し長いです。3 つのラジオ ボックスが含まれています。いずれかを選択するたびに、どれでもかまいません。送信をクリックすると、クリックしたラジオ要素ではなく、最後のラジオ要素が選択済みとして表示されます。オプション (この場合は aisis_core['display_rows']) を var ダンプすると、現在選択されているラジオ要素ではなく、選択したラジオ要素の値が表示されます。

リストを選択すると、リストが表示されますが、選択されたラジオボックスは 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>

私がワードプレスから使用している機能は次のとおりです。

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」関数には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 関数に渡して比較します。

于 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 に答える