WordPressで管理画面にテーマ用の設定ページを作る方法です。
作るもの
下の画面のように、管理パネルにテーマ用の設定メニューを追加していきます。
設定ページは、シンプルに文字列の設定値だけがあるものを作っていきます。
流れ
大きく次の流れになります。
- テーマ設定メニューを作ります。
- 設定を保存しておく設定値を作ります。
- 設定値をサニタイズする関数を作ります。(エラーチェック)
- テーマ設定ページを作ります。
1. 作成開始
次のファイルを作って、そこにコードを入れていきます。
wp-content/themes/{対象テーマ}/theme-option.php
2. テーマ設定メニューと設定値を作る
次のような感じで、add_menu_page()関数でメニューを作成し、register_setting()関数でテーマ用の設定値を作ります。
// 管理パネルならテーマ設定メニューを配置します。
if ( is_admin() ) {
add_action( 'admin_menu', 'add_mytheme_menu' );
add_action( 'admin_init', 'register_mytheme_settings' );
}
/**
* テーマ用の設定メニューを管理メニューに追加します。
*/
function add_mytheme_menu() {
add_menu_page(
'テーマ設定', // メニューページのタイトル文字列
'テーマ設定', // メニュー文字列
'manage_options', // メニューの表示権限
'mytheme-settings', // メニューのスラグ(URLのパス)
'create_mytheme_settings_page' // メニューページの表示用の関数
);
}
/**
* テーマ用の設定値を作成します。
*/
function register_mytheme_settings(){
register_setting(
'mytheme_options_group', // 設定値のグループ名
'mytheme_options', // 設定値の名前
'sanitize_mytheme_options' // サニタイズ用の関数
);
}
3. 設定値のサニタイズ関数を作る
サニタイズ関数は、意図しない値が保存されないようにチェックするための関数です。
今回は文字列の設定値なので、sanitize_text_field()関数で文字列をサニタイズしています。文字列設定値の名前は something にしています。
/**
* 設定値をサニタイズします。
*/
function sanitize_mytheme_options( $options ) {
$new_options = array();
// 文字列設定値のサニタイズ
if ( isset( $options['something'] ) ) {
$new_options['something'] = sanitize_text_field( $options['something'] );
}
return $new_options;
}
4. 設定ページを作る
下のようになります。保存回りは、WordPress自体に用意されている options.php が処理してくれますので、form の action には options.php を指定します。
/**
* テーマ設定ページを描画します。
*/
function create_mytheme_settings_page() { ?>
<div class="wrap">
<h1>テーマ設定</h1>
<?php /* 設定用のフォームを作成します。 */ ?>
<form method="post" action="options.php">
<?php /* 設定値のグループを指定し、設定値を取得します。 */ ?>
<?php settings_fields( 'mytheme_options_group' ); ?>
<?php do_settings_sections( 'mytheme_options_group' ); ?>
<?php $options = get_option( 'mytheme_options' ); ?>
<?php /* 設定値を表示します。 */ ?>
<table class="form-table">
<tr valign="top">
<th scope="row">文字列設定値</th>
<td>
<?php /* 設定値をエスケープして表示します。 */ ?>
<?php $option = isset( $options['something'] ) ? esc_attr( $options['something'] ) : '' ?>
<input type="text" name="mytheme_options[something]" value="<?php echo $option; ?>">
</td>
</tr>
</table>
<?php submit_button(); ?>
</form>
</div><!-- .wrap -->
<?php }
5. 実行する
次のファイルを開いて。
wp-content/themes/{対象テーマ}/functions.php
次のコードを追記します。
// テーマオプションを読み込みます。
require_once ( get_stylesheet_directory() . '/theme-options.php' );
動作確認
新しいメニューと設定ページが表示されることを確認したら、文字列設定値の値を変えて、保存されることを確認します。
以上です。