【WordPress】管理画面に独自の設定画面を追加する方法|add_menu_pageの基本と応用

【WordPress】管理画面に独自の設定画面を追加する方法|add_menu_pageの基本と応用 WordPress

WordPressでは、管理画面に独自の設定ページを追加することで、オリジナルのプラグインやテーマ設定をユーザーが簡単に変更できるようにすることができます。この記事では、add_menu_pageを使った基本的な手順から、設定値の保存やフォームの設計まで、実践的な実装方法を紹介します。

スポンサーリンク

add_menu_pageとは?

add_menu_page()は、WordPressの管理メニューに新しいトップレベルのメニュー項目を追加するための関数です。これにより、独自の設定ページを管理画面に統合することができます。

構文は以下の通りです。

add_menu_page()の構文
add_menu_page(
  string $page_title,
  string $menu_title,
  string $capability,
  string $menu_slug,
  callable $function,
  string $icon_url = '',
  int $position = null
);

基本的な設定画面を追加するサンプルコード

以下のコードをfunctions.phpまたはプラグインファイルに記述することで、管理画面に「サイト設定」という独自ページを追加できます。

functions.php:設定ページの追加
add_action('admin_menu', 'my_custom_settings_menu');
function my_custom_settings_menu() {
  add_menu_page(
    'サイト設定',
    'サイト設定',
    'manage_options',
    'my-site-settings',
    'my_site_settings_page',
    'dashicons-admin-generic',
    60
  );
}

function my_site_settings_page() {
  echo '<div class="wrap">';
  echo '<h1>サイト設定</h1>';
  settings_errors(); // 保存後の「設定を保存しました」メッセージを表示
  echo '<form method="post" action="options.php">';
  settings_fields('my_settings_group');
  do_settings_sections('my-site-settings');
  submit_button();
  echo '</form>';
  echo '</div>';
}

設定項目を保存する処理

続いて、保存する項目の登録処理です。admin_initで設定項目を登録します。

functions.php:設定項目の登録
add_action('admin_init', 'my_settings_init');
function my_settings_init() {
  register_setting('my_settings_group', 'my_option_text', array(
    'sanitize_callback' => 'sanitize_text_field',
  ));

  add_settings_section(
    'my_settings_section',
    '基本設定',
    null,
    'my-site-settings'
  );

  add_settings_field(
    'my_option_text',
    'テキスト設定',
    'my_option_text_callback',
    'my-site-settings',
    'my_settings_section'
  );
}

function my_option_text_callback() {
  $value = get_option('my_option_text', '');
  echo '<input type="text" name="my_option_text" value="' . esc_attr($value) . '" />';
}
sanitize_callbackは省略しない
register_setting()の第3引数($args)でsanitize_callbackを指定しないと、保存時のサーバー側サニタイズが一切行われません。フォームから送信された値がそのままデータベースに保存されるため、sanitize_text_fieldなど、値の性質に合った関数を必ず指定してください。

設定の読み込みと活用

設定した値は、以下のようにテンプレートや処理の中で呼び出して利用できます。

保存した設定値の取得と出力
$text = get_option('my_option_text');
echo esc_html($text);

アイコンや表示位置をカスタマイズ

add_menu_pageの引数で、ダッシュボードアイコンの指定や、表示位置を自由に調整可能です。

  • アイコン: dashicons-admin-site など
  • 表示位置: 数字が小さいほど上に表示されます(例:60で「外観」の下)

よくある質問(FAQ)

Qadd_menu_page()で設定ページを追加する基本的なコードは?
Aadd_action(‘admin_menu’, function(){ add_menu_page(‘設定タイトル’, ‘メニュー名’, ‘manage_options’, ‘my-settings’, ‘my_settings_page’); })と、コールバック関数my_settings_pageをfunctions.phpに実装します。
Q設定値をWordPressのオプションに保存・取得するには?
Asettings_fields()とdo_settings_sections()でWordPress標準のオプションAPIを使ったフォームを作成します。update_option()・get_option()で値を保存・取得します。register_setting()にはsanitize_callbackを必ず指定しましょう。
Q設定ページのフォーム送信後に保存完了メッセージを表示するには?
ASettings API(options.php経由のフォーム)を使っていれば、保存後settings-updated=true付きで自動的に元のページへリダイレクトされるため、手動でwp_redirect()を呼ぶ必要はありません。設定ページのコールバック内でsettings_errors()を呼び出すだけで、保存完了メッセージが自動的に表示されます。

まとめ

WordPress管理画面に独自の設定ページを追加することで、テーマやプラグインの利便性が大きく向上します。add_menu_pageを活用し、ユーザーが扱いやすいUIと安全な保存処理を実装することで、より洗練されたWordPress開発が可能になります。