web-dev-qa-db-ja.com

プラグインのドロップダウンを使った設定ページの作成

私は自分のプラグインの設定ページを設定していて、そのページに欲しいフィールドを手に入れることができますが、それらをテキストボックスではなくドロップダウンにしたいのですが。 add_settings_fieldを使うよりも。 add_settings_fieldを使うと自分の設定のドロップダウンを表示できますが、それをプラグイン設定ページに表示することはできません。たとえば、それを 'reading settings page'に表示させることはできます。

基本的に私は使ったことがある

私のPlugin Optionsページがwordpressバックエンドの設定メニューの下に表示されるようにadd_options_page()、そして私の設定を登録するためのaddaction()、そしてadd_options_pageからのコールバック関数で構築されたフォーム。これはすべてうまくいきます、私はテキストボックス以外に何も手に入れることができません...そしてドロップダウンとおそらくチェックボックスが欲しいです。

それが理にかなっていると思います。

ありがとうございます。

4
Jack

いくつかのSettings API呼び出しが間違っているようです。あなたのドロップダウン入力はあなたのadd_settings_field()のコールバックで作成されます。各設定フィールドは、それがどの設定セクションに属しているのかを知る必要があります。そして、あなたのオプションページはdo_settings()関数を通して表示する必要がある設定セクションを伝えます。これはチェックボックスを使用した短いコード例です(いくつかのコールバック関数を省略していますが、すべてのコールバックは有効な関数である必要があります - たとえ空の関数にしたとしても)。

function plugin_admin_init()
{
     //Register your plugin's options with the Settings API, this will be important when you write your options page callback, sanitizing callback omitted
     register_setting( 'plugin_options_group', 'plugin_options_name', 'sanitizing_callback' );
     //Add a new settings section, section callback omitted
     add_settings_section( 'section_id', 'Plugin Settings', 'section_callback', 'section_options_page_type' );
     //Add a new settings field
     add_settings_field( 'plugin_checkbox', 'Send automated emails?', 'field_callback', 'section_options_page_type', 'section_id' );
}
add_action('admin_init', 'plugin_admin_init');

function field_callback()
{
     //The key thing that makes it a checkbox or textbox is the input type attribute. The thing that links it to my plugin option is the name I pass it.
     echo "<input id='plugin_checkbox' name='plugin_options_name[plugin_checkbox]' type='checkbox' value='true' />"
}

function setup_menu()
{
     add_menu_page('Page Name', 'Page Name', 'user_capability_level', 'page_slug', 'page_callback');
}
add_action('admin_menu', 'setup_menu');

function page_callback()
{
?>
<div class='wrap'>
     <h2>Page Name</h2>
     <form method='post' action='options.php'>
     <?php
     //Must be same name as the name you registered with register_setting()
     settings_fields('plugin_options_group');
     //Must match the type of the section you want to display
     do_settings_section('section_options_page_type');
     ?>
          <p class='submit'>
               <input name='submit' type='submit' id='submit' class='button-primary' value='<?php _e("Save Changes") ?>' />
          </p>
     </form>
</div>
<?php
}
?>
3
Chiubaka