Settings API で WordPress 管理画面を作る
WordFes Nagoya 2015のセッションで取り上げるサンプルプラグインの解説です。
管理画面の登録
管理画面をまず作る処理です。add_options_pageを使います。このページへの実際の出力はコールバック関数で設定します。
Settings APIの場合、「ページ」「セクション」「フィールド」の順に作っていきます。
// 設定画面を追加する
function my_slider_settings_menu() {
add_options_page(
'スライダー詳細設定', // ページのタイトル
'スライダー詳細設定', // メニューのタイトル
'manage_options', // このページを操作する権限
'my_slider_settings', // ページ名
'my_slider_settings_plugin_options' // コールバック関数。この関数の実行結果が出力される
);
}
add_action('admin_menu', 'my_slider_settings_menu');
// フォームの枠組を出力する
function my_slider_settings_plugin_options() {
?>
<div class="wrap">
<form action="options.php" method="post">
<?php do_settings_sections('my_slider_settings'); // ページ名 ?>
<?php settings_fields('my_slider_settings-group'); // グループ名 ?>
<?php submit_button(); ?>
</form>
</div>
<?php
}
do_settings_sectionsで設定セクションを作ります。 settings_fieldsは画面が正当であることを証明するコード等を出力します。つまり、settings_fieldsを入れるだけで、面倒な処理をWPが面倒見てくれます。
画面上にセクションを作成
次に、セクションを作ります。add_settings_sectionを使います。4番目の引数は、先ほどdo_settings_sectionsで設定したページ名に合わせます。
// 管理画面の作成
function my_slider_settings_init() {
add_settings_section(
'my_slider_settings_section', // セクション名
'スライダーの設定', // タイトル
'my_slider_settings_section_callback_function', // コールバック関数。この関数の実行結果が出力される
'my_slider_settings' // このセクションを表示するページ名。do_settings_sectionsで設定
);
}
add_action('admin_init', 'my_slider_settings_init');
function my_slider_settings_section_callback_function() {
echo '<p>スライダーの詳細設定を行います</p>';
}
画面上にフィールドを作成
さて、ようやくフィールドを作ります。このフィールドのところが、入力項目を作る部分になります。 add_settings_fieldを使います。4番目の引数は、先ほどdo_settings_sectionsで設定したページ名に合わせます。5番目の引数は、先ほどadd_settings_sectionで設定したセクション名に合わせます。
入力項目の処理は、register_settingで設定します。1番目の引数は、先ほどsettings_fieldsで設定したグループ名に合わせます。 実際の処理内容は、3番目の引数でコールバック関数を指定します。
// フィールドの追加1
function my_slider_field1() {
add_settings_field(
'num_of_slides', // フィールド名
'枚数', // タイトル
'num_of_slides_callback_function', // コールバック関数。この関数の実行結果が出力される
'my_slider_settings', // このフィールドを表示するページ名。do_settings_sectionsで設定
'my_slider_settings_section' // このフィールドを表示するセクション名。add_settings_sectionで設定
);
register_setting(
'my_slider_settings-group', // グループ名。settings_fieldsで設定
'my_slider_settings_num_of_slides', // オプション名
'my_slider_settings_num_of_slides_check' // 入力値をサニタイズする関数
);
}
add_action('admin_init', 'my_slider_field1', 15);
// フォーム項目を表示する
function num_of_slides_callback_function() {
echo '<input name="my_slider_settings_num_of_slides" id="my_slider_settings_num_of_slides" type="text" value="';
form_option( 'my_slider_settings_num_of_slides' );
echo '" />';
}
// 入力値「スライド枚数」を検証する
// 必要に応じてエラーメッセージを出す
function my_slider_settings_num_of_slides_check( $input ) {
$filter_option = array(
'options' => array(
'min_range' => 1,
),
);
if ( filter_var( $input, FILTER_VALIDATE_INT, $filter_option) ) {
return $input;
} else {
add_settings_error(
'my_slider_settings',
'invalid_num',
'枚数: ' . intval( $filter_option['options']['min_range'] ) . ' 以上の数字を指定してください。',
'error'
);
return intval( get_option( 'my_slider_settings_num_of_slides' ) );
}
}
コールバック関数my_slider_settings_num_of_slides_checkの内部で、入力が適切かどうかをチェックします。この例では、PHPの標準機能であるフィルタ機能を使って、「入力が数値である&1以上である」をチェックしています。
入力が条件を満たさなかった場合
コールバック関数内で検証した結果、入力が条件を満たさなかった場合は、add_settings_errorでエラーメッセージを設定することができます。 こうしておくと、WPがエラーメッセージを表示してくれます。このようにWPの標準機能を使うと、画面遷移等の面倒な処理を自分で記述する必要はありません。
フィールドの数だけ繰り返す
複数のフィールドが有る場合は、add_settings_fieldとregister_settingを繰り返し記述してください。
(データベースで一つの項目として保存したい場合は、記述を変更する必要がありますが、今回はSettings APIの使い方の説明を中心にしたので、単純な方式で記述しています。)
// フィールドの追加2
function my_slider_field2() {
add_settings_field(
'random', // フィールド名
'ランダム表示', // タイトル
'random_callback_function', // コールバック関数。この関数の実行結果が出力される
'my_slider_settings', // このフィールドを表示するページ名。do_settings_sectionsで設定
'my_slider_settings_section' // このフィールドを表示するセクション名。add_settings_sectionで設定
);
register_setting(
'my_slider_settings-group', // グループ名。settings_fieldsで設定
'my_slider_settings_random', // オプション名
'intval' // 入力値をサニタイズする関数
);
}
add_action('admin_init', 'my_slider_field2', 25);
// フォーム項目を表示する
function random_callback_function() {
echo '<input name="my_slider_settings_random" id="my_slider_settings_random" type="checkbox" value="1" ';
checked( 1, get_option( 'my_slider_settings_random' ) ) ;
echo ' />';
echo 'ランダム表示する';
}
WordPress 管理画面を効率よく、安全に作成する方法 from Fumito Mizuno


