[WordPressカスタマイズ]オプションページの作り方

wordpress custmize

WordPressで独自プラグインを作ったら、プラグイン固有のオプション(設定)ページを作る機会もあると思います。そこで今回はプラグインからオプションページを作る方法を調べてみました。WP2.7以上限定です。

オプションページの作り方はしっかりと公式サイトに載ってますのでそちらを参考に。

英語版ページ:Creating Options Pages « WordPress Codex

このページにはWP2.7から使えるようになった関数を使ったサンプルが掲載されてます。これらを使うとこれまでより簡単にオプションページを作成できるみたいなので、2.7用のコードをピックアップします。

ステップ1

まずはプラグインヘッダを書きます。

 /*
   Plugin Name: Create Options Pages
   Plugin URI: http:/scianto.net/
   Description: オプションページを作成するサンプルプラグイン
   Version: 1.0
   Author: Paon
   Author URI: http://scianto.net/
 */

ステップ2

add_action('admin_menu', 'baw_create_menu');

add_action関数を使ってアクションフックadmin_menuに関数を登録します

ステップ3

メニューの追加

add_menu_page('BAW Plugin Settings', 'BAW Settings', 'administrator', __FILE__, 'baw_settings_page',plugins_url('/images/icon.png', __FILE__));

add_menu_page関数はトップレベルメニューを追加します。

書式

add_menu_page(''page_title'', ''menu_title'', ''access_level/capability'', ''file'', ''[function]'', ''[icon_url]'');
page_title
オプションページのタイトルです。head内のtitle要素の内容です。
menu_title
メニューに表示されるときの名前です。
access_level/capability
オプションページを呼び出したり、編集するために必要なユーザーレベル。ここでは管理者をあらわす[administrator]。[10]でもいけます。
 
file
オプションページを表示するためのページ識別子。
「wp-admin/admin.php?page=ページ識別子」としてアクセスするための文字列になります。ここでは定義済み定数__FILE__をつかってファイル名を指定しています。もちろん、任意の文字列でもOKです。
function
ページを表示するための実行関数。
icon_url
メニューにカスタムアイコンを追加します。WP2.7から使えます。

コンテンツ表示関数の登録

add_action( 'admin_init', 'register_mysettings' );

add_action関数でadmin_initアクションフックに対して、オプションページを表示するための関数を登録&実行します。admin_initは管理画面にアクセスしたときにどのフックよりも先に実行するためのフック?のようです(英語弱いので自信ない・・・)。詳しくは以下を参照。

admin_initのリファレンス(英語)

ステップ4

先のadmin_initにフックさせたregister_mysettings関数を定義します。

function register_mysettings() {
	register_setting( 'baw-settings-group', 'new_option_name' );
	register_setting( 'baw-settings-group', 'some_other_option' );
	register_setting( 'baw-settings-group', 'option_etc' );
}

ここで登場した新しい関数register_settingはformから送信した値をデータベースに登録したりサニタイズするための関数のようです。

書式

register_setting( $option_group, $option_name, $sanitize_callback );
$option_group
設定のグループ名。ここで指定した名前を次のステップで使うsettings_fields関数の引数に指定します。
$option_name
登録するオプションの名前。input要素などのname属性を指定します。
sanitize_callback
オプションの値をサニタイズするためのコールバック関数。

詳しくはリファレンスを参照してください。

register_settingのリファレンス(英語)

ステップ5

実際にオプションページに表示する内容を書き出す関数です。

function baw_settings_page() {
  <div class="wrap">
		<h2>Your Plugin Name</h2>
		<form method="post" action="options.php">
		<?php settings_fields( 'baw-settings-group' ); ?>
			<table class="form-table">
				<tr valign="top">
					<th scope="row">New Option Name</th>
					<td><input type="text" name="new_option_name" value="<?php echo get_option('new_option_name'); ?>" /></td>
				</tr>
				<tr valign="top">
					<th scope="row">Some Other Option</th>
					<td><input type="text" name="some_other_option" value="<?php echo get_option('some_other_option'); ?>" /></td>
				</tr>
				<tr valign="top">
					<th scope="row">Options, Etc.</th>
					<td><input type="text" name="option_etc" value="<?php echo get_option('option_etc'); ?>" /></td>
				</tr>
			</table>
			<p class="submit">
				<input type="submit" class="button-primary" value="<?php _e('Save Changes') ?>" />
			</p>
		</form>
</div>
} 

(*上のコードは見やすいように一部変更していますので構文として正しくありません。ご注意ください。)

setting_fields関数を使うことで、これまで必要だったhiddenフィールドやnonceフィールドを自動で追加してくれるようになったのでずいぶん楽になりました^ ^。

ところで、form要素のaction属性値がoptions.phpになっています。これはformから送信されたデータの登録やら書き換えなんかをやってくれる便利な関数が詰まっているようです。
options.phpはwp-admin/options.phpにあります。

以上でオプションページを追加することができますね。

ただ、これだけだと値を登録することしかできませんよね?。実際はその値を使って何かに反映させたいわけですから、値をDBから呼び出し加工するようにしなければならないと思います。このあたりは当面の課題ということで・・・。今回はここまで。

そうのひとりごと

© 2017 PAOLOG