WordPress開発に必須!PHPのincludeとrequireの違いと使い分けを徹底解説【エラー例付き】
WordPressテーマやプラグインを開発する際によく使われるPHPの「include」と「require」。この2つの違いや適切な使い分けについて、ちゃんと把握したいという方は一定数いるのではないでしょうか。この記事では、エラーの挙動からWordPress特有の関数との関係まで、実例を交えてわかりやすく解説します。
「include」と「require」とは?
include
- 概要
PHPファイルを呼び出すための構文の一つ。呼び出すファイルが存在しない場合でも「警告 (Warning)」が表示されるものの、スクリプト自体は継続して実行されるのが大きな特徴。 - エラーの動作
ファイルが見つからない場合などはWarning: include(...): failed to open stream...
という警告が出る。処理は継続するが、呼び出し元のコードがファイルの内容を前提としていると不都合が生じる場合がある。
require
- 概要
同じく外部ファイルを呼び出す構文だが、includeとの違いとして、呼び出したファイルが存在しない場合には「致命的エラー (Fatal error)」を発生させる。スクリプトの実行がそこで停止するため、存在が必須のファイルを読み込む際に使用されることが多い。 - エラーの動作
ファイルが見つからない場合はFatal error: require(): Failed opening required...
のように致命的エラーが出て、残りの処理は実行されない。
一度だけ読み込むには?
同じファイルを複数回読み込むとエラーや処理の重複が発生する可能性があるため、一度だけ読み込むための構文として include_once
や require_once
もよく使われます。通常の include
/ require
の代わりに使用することで、同一ファイルの二重読み込みを防げます。
includeとrequireの使い分け
どちらを使うべきか?
- 「必須ファイル」なら
require
たとえば、テーマの設定ファイルやコア機能に関わる重要なファイルなど、呼び出しに失敗すると処理を続行できない場合はrequire
を使うのが一般的です。 - 「あると便利だが無くても動くファイル」なら
include
たとえば、追加で読み込みたいパーツや、エラーが出ても致命的ではない外部ファイルを扱う場合はinclude
が多いです。ファイルが存在しない環境などで、エラーをログに残しつつ処理を継続させたいシチュエーションで用いられます。
WordPress特有の関数との違い
WordPressでは以下のようなテーマ向け関数が用意されています。これらは「テンプレートファイルを読み込む」というPHPの基本動作に近いですが、内部処理や子テーマ対応などWordPressの仕組みにあわせた拡張があります。
- get_template_part()
テンプレートパーツ(部分的なテンプレートファイル)を読み込む際に使われます。たとえばget_template_part('header')
でheader.php
を呼び出せます。内部的にはlocate_template()
という機能で子テーマを優先したり、ファイルの存在をチェックするなどの処理を行います。 - locate_template()
テンプレートファイルの位置を探して返す関数です。結果をrequire
で読み込むことが多いため、ファイルが見つからなかった場合などはエラーが出やすい仕組みになっています。
基本的には「WordPressでのテンプレート読み込み = get_template_part()」を使う、というふうに覚えておくとよいでしょう。ただし、一般的なPHPファイルを扱う場合はinclude
やrequire
が用いられます。
実際の使用例
include の例
<?php
// sidebarの追加レイアウトを読み込みたいとき
include 'sidebar-extra.php';
// ファイルが無い場合はWarningが出るが、スクリプトは継続する
echo 'メインの処理は継続します。';
?>
こういうときに便利
- テスト的に機能を切り出したPHPファイルなど、存在しなくても致命的ではないが、あれば表示したいレイアウトパーツや追加機能を呼び出したい場合。
require の例
<?php
// テーマに必須の設定ファイルを読み込む
require 'theme-config.php';
// ここが読み込めないと動作自体が不完全になるような重要ファイル
echo '設定ファイルが存在する前提で、以下の処理を実行します。';
?>
こういうときに便利
- 必ず存在しないと困るファイルを呼び出すとき。
- ファイル読み込みに失敗したらサイト表示を停止させ、明確にエラーを出してデバッグしたい場合。
パスの記述でよく使われる関数
WordPressやプラグイン開発では、読み込むファイルのパスを安全に指定するために以下のような関数が使われます。
get_template_directory()
:現在のテーマのディレクトリパスを取得(WordPress用)plugin_dir_path(__FILE__)
:現在のプラグインファイルのディレクトリパスを取得
例:
require get_template_directory() . '/inc/theme-config.php';
WordPress関数を利用した例
<?php
// header.php(または子テーマ側のheader.php)を探して読み込む
get_template_part('header');
// ループ部分のテンプレート
get_template_part('loop', 'archive');
// sidebar.phpを探して読み込む
get_template_part('sidebar');
// footer.phpを探して読み込む
get_template_part('footer');
?>
- WordPressのテーマではテンプレート読み込みを
get_template_part()
で行うことで、子テーマやテンプレート階層など、WordPressの仕組みによる拡張機能を活かせます。 include
やrequire
を直接使うよりも、WordPressが用意する仕組みに乗る方が、テーマの構造や管理がしやすくなります。
エラーの違い・対処方法
includeのエラー
- 警告 (Warning) が表示される。スクリプトは継続。
- ローカル開発環境や
WP_DEBUG
が有効な状態でファイルが見つからなければ「Warning: include(): failed to open stream: No such file or directory…」が出る。
requireのエラー
- 致命的エラー (Fatal error) が表示される。スクリプトは停止。
- 「Fatal error: require(): Failed opening required ‘xxx.php’…」のようなメッセージが表示される。
よくあるエラー対処方法
- ファイルパスを確認する
- 相対パス/絶対パスの指定ミスや、タイポ(綴り間違い)が原因のことが多い。
- ファイルの置き場所を確認する
- テーマフォルダ内、プラグインディレクトリ内など正しい場所にファイルを置いているか。
- PHPの設定を確認する
- ローカル環境の設定によっては、読み込み許可が制限されている場合がある。
- 読み込むファイル名のセキュリティに注意する
- 外部からの入力を使って読み込むファイル名を決定するようなコードは、パストラバーサル攻撃(../で上のディレクトリにアクセスされる)の原因になります。
basename()
や固定ディレクトリの利用、入力のバリデーションを徹底しましょう。
- 外部からの入力を使って読み込むファイル名を決定するようなコードは、パストラバーサル攻撃(../で上のディレクトリにアクセスされる)の原因になります。
FAQ:PHPのincludeとrequireの違いに関するよくある質問
- PHPのincludeとrequireの違いは何ですか?
-
include
は読み込むファイルが存在しない場合でも警告(Warning)を出してスクリプトを継続しますが、require
は致命的エラー(Fatal error)を出してスクリプトを停止します。存在が必須なファイルにはrequire
、任意のファイルにはinclude
を使うのが基本です。 - include_onceとrequire_onceはどう違うのですか?
-
include_once
やrequire_once
は、それぞれ一度だけファイルを読み込む構文です。同じファイルを複数回読み込まないようにするため、処理の重複やエラーを避けたい場合に使います。違いは通常のinclude
とrequire
と同様です(エラー時の動作に差がある)。 - WordPressではincludeやrequireを使わないほうがいいの?
-
WordPressテーマやプラグインの開発では、
include
やrequire
を使うこともありますが、テンプレートの読み込みにはget_template_part()
やlocate_template()
などのWordPress専用関数を使うのが推奨されています。これにより、子テーマ対応やテンプレート階層が正しく機能します。 - ファイルのパス指定でよくあるエラーの原因は?
-
多くの場合、相対パスや絶対パスの指定ミス、ファイル名のスペルミス、ファイルの配置場所が異なるといった点が原因です。WordPressでは
get_template_directory()
やplugin_dir_path(__FILE__)
などの関数でパスを取得すると安全です。 - 外部入力を使ってファイルを読み込んでも大丈夫ですか?
-
セキュリティ上のリスクが高いため注意が必要です。特にユーザーの入力値で読み込むファイルを決める場合、パストラバーサル攻撃を防ぐために
basename()
でファイル名を制限したり、ホワイトリストを設けるなどの対策が必要です。
まとめ
- include
- ファイルがなくても「警告(Warning)」を出すだけで処理続行。
- 存在が必須ではないが、あれば機能が拡張されるファイルに向いている。
- require
- ファイルが存在しないと「致命的エラー(Fatal error)」が発生してスクリプト停止。
- 必須機能を提供するファイルや、絶対に読み込みが必要なファイルに使われる。
- WordPressテーマ内での一般的なテンプレート読み込み
get_template_part()
を使用するのがベストプラクティス。内部的にファイルの存在確認や子テーマの優先読み込みなどを行う。
どちらを使うかは「そのファイルが存在しなくても動作を継続させたいか」、「存在しなければ動かない重要ファイルか」を基準にすると分かりやすいです。WordPressテーマの制作や開発をする上では、include
/require
のPHP標準構文を使う場面よりも、WordPressが用意する関数(get_template_part()
など)を利用することが多いですが、理解しておくとテンプレートファイル以外の調整などにも役立ちます。
以上が「includeとrequireの違いとは?WordPressでの使い分け解説(実際の使用例とエラーの違いまで)」でした。必須ファイルかどうかを基準として使い分けること、そしてWordPress特有のテンプレート階層を利用する際はget_template_part()
などの公式関数を活用することがポイントです。エラーが出たときには、ファイルのパスや存在をまず疑い、ログやデバッグモードを確認するとスムーズに問題を解決できます。