web-dev-qa-db-ja.com

カスタムページ(add_submenu_page)にセクション(add_settings_section)を追加します

add_submenu_pageで作成したプラグインページがあります。そこに新しいセクションを追加したいのですが、何も起こりません:

add_submenu_page('parent', 'Foo', 'Foo', 'manage_options', 'foo-settings', 'anothercallback');
add_settings_section('foo-settings-section', 'Settings', 'acallback', 'foo-settings');

カスタムページでそれを使う正しい呼び出しは何ですか?完全な例はありますか?

3
thom

add_settings_section()関数は単純にWordPressを使ってフォームセクションを特定のスラッグに登録します。セクションとそれに追加したすべてのフィールドを特定のメニューページに表示するには、メニューのコールバックにdo_settings_sections($sections-slug)メソッドを含める必要があります。これは、もちろん、add_settings_sectionがその一部であるSettings APIを使用していると仮定しています。

例:

function plugin_admin_init() {
     //All callbacks must be valid names of functions, even if provided functions are blank
     register_setting( 'option_group', 'option_name', 'sanitize_callback' );
     add_settings_section( 'section_id', 'section_title', 'section_callback', 'section_page_type' );
     add_settings_field( 'field_id', 'field_title', 'field_callback', 'section_page_type', 'section_id' );
}
add_action( 'admin_init', 'plugin_admin_init' );

function add_menus() {
     add_menu_page( 'menu_page_title', 'menu_title', 'menu_capability', 'menu_slug', 'menu_callback');
     add_submenu_page( 'menu_slug', 'submenu_page_title', 'submenu_title', 'submenu_capability', 'submenu_slug', 'submenu_callback' );
}
add_action( 'admin_menu', 'add_menus' );

function submenu_callback() {
     ?>
     <div class='wrap'>
          <h2>Settings</h2>
          <form method='post' action='options.php'>
          <?php 
               /* 'option_group' must match 'option_group' from register_setting call */
               settings_fields( 'option_group' );
               do_settings_sections( 'section_page_type' );
          ?>
               <p class='submit'>
                    <input name='submit' type='submit' id='submit' class='button-primary' value='<?php _e("Save Changes") ?>' />
               </p>
          </form>
     </div>
     <?php
}

すべてのパラメータ名を一意にしておくように最善を尽くしました。そのため、それらを区別してどこに移動するかを追跡できるようにする必要があります。 Settings APIはどこに行く必要があるのか​​について非常に具体的になるので、あなたがそれをすべて持っていることを確認してください。また、この例ではすべてのコールバック関数を省略しましたが、実際には必要です。

10
Chiubaka

add_submenu_page()コールバックでこれがあなたの問題です:

settings_fields( 'option_group' );
do_settings_section( 'section_page_type' );

settings_fields()の場合:

  • register_setting()に渡した$optiongroupパラメータを使う必要があります。

do_settings_sections()の場合:

  • 関数はdo_settings_sections()です、 not do_settings_section()(複数形に注意してください)
  • add_submenu_page()に渡した$pageidパラメータを渡す必要があります。

編集

ああ、決して気にしないで。私は他の誰かの答えに答えていましたが、それを実際のコールバック関数のマークアップと誤解しました。ここでの答えは当てはまるかもしれません。コールバックを含む完全なコードを見る必要があります。

1
Chip Bennett