管理画面に独自メニューを追加するスニペットの注意点

この記事はこんな人向けです
  • 「設定画面を作りたい」「運用を楽にしたい」などで、管理画面に独自メニューを増やしたい人
  • functions.phpやプラグインでの実装方針(add_menu_page / add_submenu_page)の違いを整理したい人
  • ロール・権限(capabilities)やセキュリティ、保守を意識した設計ポイントを知りたい人

WordPressレベル別 対応難易度

Lv1 Lv2 Lv3 Lv4 Lv5 Lv6 Lv7
レベル判断は、右のレベル表(スマホは画面下)を参考にしてください。

赤:外注推奨 オレンジ:条件付き自力可 緑:自力対応可

管理画面に独自メニューを追加する全体像と対応方針

独自メニューの追加は「便利化」の一方で、権限・設計・保守の3点を外すと後から運用コストが跳ね上がります。
まずは要件を「誰が(role/capabilities)」「どこで(メニュー階層・並び順・アイコン)」「何をする(設定保存・一覧・権限別表示)」の3軸で固めるのが良いです。
コードはプラグイン化してテーマから分離し、セキュリティ(nonce/CSRF、sanitize/validate)と将来の拡張性(i18n、REST API連携、マルチサイト対応)を見据えて設計します。

管理画面に独自メニューを追加 ~WordPressレベルごとのおすすめ対応

「便利にしたい」が目的なら要件の棚卸し

赤レベルの方は、実装に踏み込む前の設計と判断が最重要です。メニュー追加は簡単そうに見えて、気づけば「どのユーザーにも見える」「誤操作で全体設定が変わる」などの事故が発生しがちです。
やるべきことは以下の明確化です。

  • 誰に見せる? → 管理者のみか、編集者にも見せるかなどを確定させます。将来の委託運用まで想定してロールとcapabilitiesを決めましょう。
  • どこに置く? → トップレベル(左メニュー直下)か、既存設定のサブメニュー(一般設定配下など)かを確定させます。並び順・アイコンも早めに決めるのが良いです。
  • 何をさせる? → 設定保存(options)、一覧(カスタム一覧・CSVエクスポート)、操作(バッチ処理/REST)などの機能粒度をスコープ化します。

特に注意したいのは、セキュリティとバックアップです。保存フォームにはnonceを入れる、入力値はsanitize/validateを通す、処理はcapabilityチェックでガードする、この3点が抜けると事故率が上がりますので注意が必要です。
不安があるなら無理せず外注がおすすめです。要件だけ整えて渡すだけでも工数は下がります。

プラグイン化・権限設計・画面設計をセットで

オレンジレベルの方は、テーマ functions.php ではなく、独自プラグインとして分離し、将来のテーマ変更に耐える構成にします。
実装時は以下の観点で進めると迷いません。

  • メニュー追加APIの選定:add_menu_page / add_submenu_page を用途で使い分ける(設定系は既存メニュー配下に入れる判断が多い)。
  • capabilities:「管理者だけが触れる」「編集者にも見せる」など、将来の委託運用を考えてどこまで権限を与えるか決めておく。
  • 画面設計:フォームは nonce・current_user_can を必ず通します。保存は Settings API や options/update_option のどちらに寄せるか方針を決める。
  • データ設計:単純設定は options、複雑データは CPT/タクソノミーや独自テーブルで管理。エクスポート/インポート方針も事前に決める。
  • 運用性:ロール別の項目表示、操作ログ(だれが・いつ・何を変えたか)、WP-CLIやREST APIによる一括処理の拡張余地。

UIは「既存のWordPress管理画面に馴染ませる」のが原則です。独自CSSを盛り過ぎると将来のコア更新で崩れやすくなります。デザインよりも、フィードバック(更新完了の通知)・エラーメッセージ・戻る導線の品質を優先しましょう。

高度化:モジュール設計・拡張API・将来互換まで

緑レベルの方は、モジュール設計拡張可能性に寄せて進めます。ビジネス要件が変わっても痛まず、他案件にも転用できる構成が理想です。

  • プラグイン構造:Service/Hook/Screen/Repositoryに分離し、画面生成・保存処理・権限判定を疎結合化。i18n・uninstall.php も用意。
  • Settings API / REST:設定はSettings APIに寄せ、RESTで外部からも更新できる設計に。CSRF・認可(capability + nonce + application passwords/OAuth)を徹底。
  • 権限の最小化:最小権限の独自capabilitiesを登録して配布。ロール編集系プラグイン導入時も破綻しない粒度に。
  • パフォーマンスとUX:大規模一覧はサーバーサイド処理・ページネーション・部分更新(AJAX)を活用。非同期処理はキュー/スケジューラで。
  • 保守・監査:操作ログ、変更履歴、バックアップ/リストア手順、マルチサイト・ステージング対応。リリース手順書も揃える。

壊れにくい土台」が価値。要件の変化や人の入れ替わりを前提に、再利用可能な抽象化とテスト(ユニット/統合)を整えておきましょう。

独自メニュー追加を外注する場合のポイント

要件が固まっていない・セキュリティや権限設計が不安・将来拡張を見据えたい、そんなときは外注が近道です。費用感・流れ・準備物を押さえて失敗を避けましょう。

項目ポイント
費用の目安 ・単純な設定ページ+保存(既存capabilities・バリデーション軽め):3~8万円
・一覧/検索/エクスポート、capabilities細分化、UI設計込み:10~25万円
・REST/外部API連携、独自テーブル、監査ログ・WP-CLI対応:30万円~(要件次第)
依頼の流れ 1. 要件共有(誰に見せる・どこに置く・何をさせる/将来拡張の範囲)
2. 見積・スケジュール提示(画面遷移・保存仕様・権限設計を含む)
3. 試作→レビュー(ステージングで動作確認、権限チェック)
4. 本番反映(バックアップ・ロールバック手順・運用ドキュメント整備)
準備しておくと便利 ・管理メニューの配置イメージ(トップ or どのサブ配下か)、アイコン有無・並び順
・対象ユーザー(管理者/編集者など)と必要な操作(閲覧/編集/実行)の一覧
・保存項目のサンプル(入力例・バリデーション条件・既存データとの関係)
・将来やりたい拡張(CSV/REST/自動処理)と、予算・優先順位
まとめ

独自メニューは「便利」の裏側に、権限・セキュリティ・保守の落とし穴があります。先に要件を固め、テーマ依存を避けるためプラグイン化し、nonce・sanitize・capabilityチェックを徹底しましょう。

は外注前提で要件整理、オレンジは条件つきで自力、は拡張性と将来互換まで設計が基本方針です。

迷うポイントは早めに相談し、壊れにくい土台を先につくる。これが長期運用の最短ルートです。

この記事を書いた人
著者アイコン

桐山智行(株式会社H.T.P. 代表)

2007年よりWeb制作に従事し、現在は企業サイトやWordPressの保守・改善支援も行っています。これまで100社以上・500サイトを超える案件を担当し、トラブル対応から集客サポートまで幅広く経験しています。

その他のWordPress関連記事はこちら

  • Lv1 初心者 初心者 … ログインなど基本も不安
  • Lv2 基本操作 基本操作 … 投稿OK/更新は不安
  • Lv3 投稿メイン 投稿メイン … 記事更新・差替えはできる
  • Lv4 更新ユーザー 更新ユーザー … テーマ/プラグイン更新経験あり
  • Lv5 データ操作 データ操作 … DBやバックアップを理解
  • Lv6 カスタマイザー カスタマイザー … 子テーマ・CSS修正が可能
  • Lv7 マスター マスター … コード/サーバーまで自走可能