カスタム投稿タイプや独自の管理機能を追加するとき、コードをテーマのfunctions.phpに書くか、プラグインに分けるかで迷いませんか。動けば同じに見えても、置き場所を誤るとテーマ変更で機能が消えたり、停止しにくい処理が残ったりします。機能の役割から配置を決めると、あとからの改修もぐっと楽になります。
まず「何に結びつく機能か」で分ける
判断の軸は、その機能がデザインに属するのか、サイトのコンテンツや運用に属するのかです。見た目の調整やテーマ専用の表示処理なら、テーマ側に置くのが自然です。一方、テーマを変更しても使い続けたい機能は、独自プラグインに分けると管理しやすくなります。
- functions.php:そのテーマでのみ使う表示やデザイン関連の処理
- 独自プラグイン:カスタム投稿タイプ、独自の管理機能、外部サービス連携など
- MUプラグイン:サイト全体で常に有効にしたい、停止させたくない処理
たとえば「事例」という投稿タイプを作るなら、表示デザインはテーマに、投稿タイプの登録はプラグインに分ける方法があります。テーマを交換しても事例データを扱えるため、見た目の変更とコンテンツの仕組みを別々に保てます。
カスタム投稿タイプはプラグイン側で管理する
カスタム投稿タイプは、WordPressのregister_post_type()をinitに登録するのが基本です。投稿タイプ名には他のプラグインと衝突しにくい接頭辞を付け、識別子を短く保ちます。ブロックエディターやREST APIから扱う場合は、登録時のshow_in_rest設定も確認してください。
パーマリンク設定を変更した際にリライトルールの更新が必要になることがあります。ただし、flush_rewrite_rules()を毎回実行すると不要な負荷につながるため、プラグイン有効化時など、必要なタイミングに限定する設計が大切です。
カスタムフィールドは型と公開範囲も決める
投稿にひもづく値は、まず投稿メタで表現できるか検討します。register_post_meta()などを使い、値の型、単一値かどうか、サニタイズ方法、権限、REST APIへの公開設定を明確にします。REST APIに公開する場合は、投稿タイプ側でcustom-fieldsのサポートも必要です。
「RESTで見えるようにする」ことと「誰でも書き換えられる」ことは別です。更新処理ではユーザーの権限を確認し、入力値も検証してください。Cookie認証のリクエストではnonceも使いますが、nonceは権限確認の代わりにはなりません。
MUプラグインは便利ですが、停止方法に注意
MUプラグインはwp-content/mu-pluginsに置くと自動的に有効になり、通常のプラグイン一覧から停止できません。ホスティング環境に必要な処理など、管理画面から誤って無効化されたくない機能には便利です。
その反面、問題が起きたときはファイルを変更・削除して対応する必要があります。何でもMUプラグインに集約するのではなく、担当者が把握できる範囲に絞り、変更手順も共有しておきましょう。
実装前後に確認したい安全性と保守性
コードを動かす前に、検証環境でテーマやプラグインとの競合を確認します。データベースを書き換える処理がある場合は、事前にバックアップを取り、復元方法も確認してください。公開後に慌てないための大事なひと手間です。
- 入力値は用途に応じて検証・サニタイズし、出力時は文脈に合った方法でエスケープする
- 管理操作やデータ更新では、権限確認とnonceを適切に組み合わせる
- JavaScriptやCSSは必要なページに限定して読み込む
- 変更内容と、停止・切り戻しの方法を記録する
迷ったら、「テーマを変えても必要か」「管理画面から停止できるべきか」を最初に考えてみてください。見た目はテーマ、サイトの機能はプラグイン、必ず動かす基盤処理はMUプラグイン。この整理だけでも、WordPressのカスタマイズはずっと見通しよくなります。
参考
Registering Custom Post Types – Plugin Handbook | Developer.WordPress.orgWordPress comes with five default post types: post, page, attachment, revision, and menu. While developing your plugin, you may need to…WordPress Developer Resources
Plugin Handbook | Developer.WordPress.orgWelcome to the WordPress Plugin Developer Handbook; are you ready to jump right in to the world of WordPress plugins? The Plugin Developer…WordPress Developer Resources
Must-Use Plugins – Advanced Administration Handbook | Developer.WordPress.orgMust-use plugins, also known as mu-plugins, are plugins installed in a special directory inside the content folder. They are automatically…WordPress Developer Resources
register_meta() – Function | Developer.WordPress.orgRegisters a meta key.WordPress Developer Resources
REST API – Plugin Handbook | Developer.WordPress.orgWordPress 4.4 introduced the infrastructure for a REST API. The REST API provides an easy way to get data into and out of WordPress. Data…WordPress Developer Resources- WordPress Developer Resources:入力のサニタイズと出力のエスケープ
- WordPress Plugin Handbook:JavaScriptの読み込み



