WordPressテーマの必須ファイルであるfunctions.php
を編集することで、テーマを拡張したり必要な機能を自作して使用することができますね。
オリジナルのWordPressテーマを作成する場合、functions.php
ファイルへの記述量が多くなり、管理が大変になってしまいます。
そこで今回の記事では、functions.phpファイルを分割して管理する方法を紹介します!
- 機能ごとにファイルを分割可能
- 可読性・保守性アップ
こういったメリットがありますので、ぜひこの記事を参考にして試してみてください。
functions.phpを分割する手順
ここからは以下の順番で、実際の手順を説明していきます。
- 下準備:ディレクトリ構成の確認
- 手順①:
functions
フォルダを作成する - 手順②:
functions.php
ファイルのコードを分割する - 手順③:
functions.php
ファイルで分割したファイルを読み込む
下準備:ディレクトリ構成の確認
まずはテーマファイルのディレクトリ構成を簡単に説明しておきます。
テーマによって構成が異なるかと思いますが、ここではわかりやすくするため最低限必要なファイルのみを記述しています。
|- original_theme(テーマ本体)
|- index.php
|- functions.php
|- functions/
|- init.php // 初期設定
|- pagination.php // ページネーション関連
|- thumbnail.php // サムネイル画像関連
テーマフォルダの直下にindex.php
、functions.php
、そして分割したファイルを格納するためのfunctions
フォルダを配置し、その中に分割したファイルを保存します。
最終的にはこのような構成になるということがわかっていただければOKです。
次から実際の手順を説明していきますね。
手順①:functionsフォルダを作成する
まずはテーマファイルの直下にfunctions
という名前のフォルダを作成します。(名前は分かりやすければなんでもOKです)
このフォルダは、functions.php
の分割ファイルをまとめるのに使用します。
手順②:functions.phpファイルのコードを分割する
次はfunctions.php
に記載しているコードを、機能ごとに分割していきます。
init.php
…初期設定のコードpagination.php
…ページネーション関連thumbnail.php
…サムネイル画像関連
というふうに、機能がひと目でわかるような名前にしておくことで、管理しやすくなります。
あとは手順①で作成したfunctions
ディレクトリ内に分割したファイルを保存することで完了です。
手順③:functions.phpファイルで分割したファイルを読み込む
最後に、分割したファイルを読み込むためのコードをfunctions.php
に記述していきます。
以下が完成形のコードですので、すぐに使いたい方は自身のfunctions.php
ファイルにコピペしてください。
※$function_files
の配列内には、自身で作成した分割ファイルのパスを記入してください。
<?php
// 分割したファイルパスを配列に追加
$function_files = [
'/functions/init.php',
'/functions/pagination.php',
'/functions/thumbnail.php',
];
foreach ($function_files as $file) {
if ((file_exists(__DIR__ . $file))) { // ファイルが存在する場合
// ファイルを読み込む
locate_template($file, true, true);
} else { // ファイルが見つからない場合
// エラーメッセージを表示
trigger_error("`$file`ファイルが見つかりません", E_USER_ERROR);
}
}
以下でコードの解説をしていきますので、内容を理解したい方は読み進めてください。
1. 分割したファイルを配列に追加
まずは分割したファイルを配列$function_files
に格納します。
$function_files = [
// ここに分割したファイルのパスを記入
'/functions/file1.php',
'/functions/file2.php',
'/functions/file3.php'
];
パスの部分は各自で記入してください。
2. foreachで分割ファイルを読み込む
foreach
文で、$function_files
に格納されているパスをひとつずつ取り出して処理をします。
foreach ($function_files as $file) {
// ここに反復処理を記入(以下で解説)
}
foreach
文の中では、
- パスが正しければファイルを読み込む
- パスが間違っているorファイルが存在しなければエラーを表示
という処理を行います。
パスが正しいかどうかの判別には、file_exists
関数を使用します。
if ((file_exists(__DIR__ . $file))) {
// パスが正しい場合
} else {
// パスが間違っているor存在しない場合
}
file_exists
関数は、ファイルまたはディレクトリが存在するかを判別してくれる関数です。
引数にはパスを指定しますが、__DIR__
で現在のファイルのディレクトリ、つまりfunctions.php
ファイルが存在するディレクトリを返します。
それに$file
を繋げることで、functions
ディレクトリ内の分割ファイルを参照することができますね。
続いて、指定したパスが正しい場合の処理をみていきましょう。
パスが正しければファイルを読み込みたいので、WordPressの関数locate_template
を使用します。
locate_template($file, true, true);
locate_template
はテンプレートファイルの取得や読み込みを行える関数で、引数を3つ指定することができます。
- 第1引数
$template_names
…テンプレートファイル名 - 第2引数
$load
…true
にするとファイルを読み込む - 第3引数
$require_once
…true
にするとファイルを一度だけ読み込む(重複する場合は読み込まない)
これで、ファイルが存在する場合はそのファイルを読み込むという処理が完成しました。
続いてはファイルが存在しない、またはパスが間違っている場合の処理を見ていきましょう。
trigger_error("`$file`ファイルが見つかりません", E_USER_ERROR);
PHPのtrigger_error
関数で、ファイルが見つからなかった場合にエラー文を表示します。
こうすることでパスの間違いや存在しないファイルがあった場合に原因を特定することができます。
以上でパスが正しい場合はファイルを読み込む、間違っている場合はエラーを表示するという処理が完成しました。
全体のコードをもう一度確認してみましょう。
<?php
// 分割したファイルパスを配列に追加
$function_files = [
'/functions/init.php',
'/functions/pagination.php',
'/functions/thumbnail.php',
];
foreach ($function_files as $file) {
if ((file_exists(__DIR__ . $file))) { // ファイルが存在する場合
// ファイルを読み込む
locate_template($file, true, true);
} else { // ファイルが見つからない場合
// エラーメッセージを表示
trigger_error("`$file`ファイルが見つかりません", E_USER_ERROR);
}
}
functions.php
に記述するコードはたったこれだけで、他はfunctions
フォルダ内で分割管理できるようになりました。
以上でコードの解説は終わりです。
【まとめ】functions.phpファイルを分割して管理する方法
functions.php
ファイルを分割して管理する方法を紹介しました。
WordPressでオリジナルテーマを作成するとなると、どうしてもfunctions.php
の記述量が膨大になりがちです。
そこで今回の記事で紹介したように分割管理することで、可読性・保守性がアップしますので、ぜひ試してみてください。
コメント