概要
Settings APIは、WordPress 2.7で追加され、設定フォームを含む管理ページを半自動的に管理できるようにします。設定ページ、ページ内のセクション、およびセクション内のフィールドを定義できます。
新しい設定ページは、セクションとフィールドとともに登録できます。既存の設定ページにも、新しい設定セクションやフィールドを登録することで追加できます。
フィールドの登録と検証を整理するには、Settings APIを使用する開発者の努力が必要ですが、基盤となるオプション管理の複雑なデバッグを大幅に回避できます。
注意: Settings APIを使用する場合、フォームはwp-admin/options.php
に投稿され、かなり厳格な権限チェックが行われます。ユーザーはmanage_options
の権限が必要です(MultiSiteではスーパ管理者である必要があります)フォームを送信するには。
関数はwp-admin/includes/plugin.php
とwp-admin/includes/template.php
にあります。
関数リファレンス
設定の登録/登録解除:
フィールド/セクションの追加:
オプションフォームのレンダリング:
エラー:
設定フィールドの追加
この関数を使用して、既存のWordPressページに新しい設定フィールド(基本的にはwp_options
データベーステーブルのオプションですが、完全に管理されます)を追加できます。コールバック関数は、適切なHTML入力を出力し、古い値で埋める必要があります。保存は裏で行われます。add_settings_section()
を使用して、既存のページに独自のセクションを作成できます。
注意:add_settings_field()
で使用するオプションはすべて登録する必要があります。そうしないと、自動的に保存および更新されません。詳細と例については、以下を参照してください。
add_settings_field( $id, $title, $callback, $page, $section = 'default', $args = array() )
$id
– タグの’id’属性で使用する文字列。$title
– フィールドのタイトル。$callback
– フィールドを希望の入力で埋める関数。入力の名前とidは、この関数に与えられた$idと一致する必要があります。関数はその出力をエコーする必要があります。$page
– フィールドを表示する設定ページのタイプ(一般、読み取り、書き込みなど)。$section
– ボックスを表示する設定ページのセクション(デフォルトまたはadd_settings_sectionで追加したセクション、既存のものを確認するにはソースのページを見てください。)$args
– コールバック関数に渡される追加の引数
設定セクションの追加
設定セクションは、共通の見出しを持つWordPress設定ページに表示される設定のグループです。プラグイン内で、全く新しいページを作成するのではなく、既存の設定ページに新しいセクションを追加できます。これにより、プラグインのメンテナンスが簡単になり、ユーザーが学ぶ新しいページが少なくなります。関連する既存のページで設定を変更するように指示するだけです。
add_settings_section( $id, $title, $callback, $page );
$id
– タグの’id’属性で使用する文字列。$title
– セクションのタイトル。$callback
– セクションを希望のコンテンツで埋める関数。関数はその出力をエコーする必要があります。$page
– セクションを表示する設定ページのタイプ(一般、読み取り、書き込み、メディアなど)。
設定の登録
register_setting( $option_group, $option_name, $args );
unregister_setting( $option_group, $option_name );
注意:register_setting()
および上記のadd_settings_*()
関数はすべて、admin_init
アクションフックのコールバック関数から呼び出す必要があります。「例」セクションを参照してください。
オプションフォームのレンダリング
APIを使用して既存のオプションページに設定を追加する場合、フォーム自体について心配する必要はありません。すでにページのために定義されています。新しいページをゼロから定義する場合は、実際のセクションとページの設定を出力するいくつかのタグを含む最小限のフォーム構造を出力する必要があります。
隠しフィールドを表示し、オプションフォームのセキュリティを処理するために、Settings APIはsettings_fields()関数を提供します。 settings_fields( $option_group );
$option_group
(*string*) (*required*):**
設定グループ名。これは、register_setting()で使用されるグループ名と一致する必要があります。これは、フォームが表示されるページのスラッグ名です。デフォルト:なし
ページに割り当てられたセクションとその中に含まれる設定を表示するために、Settings APIはdo_settings_sections()関数を提供します。do_settings_sections( $page );
$page
(*string*) (*required*):**
出力したい設定セクションのページのスラッグ名。これは、add_settings_section()で使用されるページ名と一致する必要があります。デフォルト:なし
do_settings_fields()関数は、特定のページとセクションに割り当てられたフィールドを出力するために提供されます。この関数を直接呼び出すべきではなく、do_settings_sections()
を使用してセクションのコンテンツと関連するフィールドを出力してください。
オプションフォームには、送信ボタンも必要です。これを行うために、submit_button()関数を使用できます。
最後に、オプションのアクション先であるoptions.phpとPOSTメソッドを定義するHTML<form>タグを出力する必要があります。以下は、スラッグ名がmy-page
のページに追加されたすべてのセクションとフィールドを生成するオプションフォームコードの例です。
<form method="POST" action="options.php">
<?php
settings_fields( 'my-page' ); // pass slug name of page, also referred to in Settings API as option group name
do_settings_sections( 'my-page' ); // pass slug name of page
submit_button(); // submit button
?>
</form>
例
新しいフィールドを持つ設定セクションの追加
<?php
/**
* Add all your sections, fields and settings during admin_init
*/
function wporg_settings_api_init() {
// Add the section to reading settings so we can add our
// fields to it
add_settings_section(
'wporg_setting_section',
'Example settings section in reading',
'wporg_setting_section_callback_function',
'reading'
);
// Add the field with the names and function to use for our new
// settings, put it in our new section
add_settings_field(
'wporg_setting_name',
'Example setting Name',
'wporg_setting_callback_function',
'reading',
'wporg_setting_section'
);
// Register our setting so that $_POST handling is done for us and
// our callback function just has to echo the <input>
register_setting( 'reading', 'wporg_setting_name' );
} // wporg_settings_api_init()
add_action( 'admin_init', 'wporg_settings_api_init' );
/**
* Settings section callback function
*
* This function is needed if we added a new section. This function
* will be run at the start of our section
*/
function wporg_setting_section_callback_function() {
echo '<p>Intro text for our settings section</p>';
}
/*
* Callback function for our example setting
*
* creates a checkbox true/false option. Other types are surely possible
*/
function wporg_setting_callback_function() {
echo '<input name="wporg_setting_name" id="wporg_setting_name" type="checkbox" value="1" class="code" ' . checked( 1, get_option( 'wporg_setting_name' ), false ) . ' /> <label for="wporg_setting_name">Explanation text</label>';
}
コードがどこに配置されるべきかのグラフィカルな表現
外部参照
- The WordPress Settings API by Konstantin Kovshenin, 2012年10月23日
- Incorporating the Settings API in WordPress Themes by Chip Bennett, 2011年2月
- Settings API Explained by David Gwyer
- WordPress Settings API Tutorial by Otto
- Handling Plugin Options with register_setting() by Ozh
- Intro to the WordPress Settings API by BobGneu
- Using The Settings API: Part 1, Part 2 by Sarah Neuber
- Class Based Settings with WordPress by Francis Yaconiello
- Adding multiple sections on a single settings screen by Mathieu Decaffmeyer
- Adding multiple forms on a single settings screen by Mathieu Decaffmeyer
- The Complete Guide To The WordPress Settings API by Tom McFarlin, 2012年1月31日
- WordPress Settings API Cheat Sheet by Kenneth Odle, 2015年7月16日