【WordPress】functions.phpのコードを分割して管理する方法

WordPressテーマの必須ファイルであるfunctions.phpを編集することで、テーマを拡張したり必要な機能を自作して使用することができますね。

オリジナルのWordPressテーマを作成する場合、functions.phpファイルへの記述量が多くなり、管理が大変になってしまいます。

そこで今回の記事では、functions.phpファイルを分割して管理する方法を紹介します!

  1. 機能ごとにファイルを分割可能
  2. 可読性・保守性アップ

こういったメリットがありますので、ぜひこの記事を参考にして試してみてください。

目次

functions.phpを分割する手順

ここからは以下の順番で、実際の手順を説明していきます。

  • 下準備:ディレクトリ構成の確認
  • 手順①:functionsフォルダを作成する
  • 手順②:functions.phpファイルのコードを分割する
  • 手順③:functions.phpファイルで分割したファイルを読み込む

下準備:ディレクトリ構成の確認

まずはテーマファイルのディレクトリ構成を簡単に説明しておきます。

テーマによって構成が異なるかと思いますが、ここではわかりやすくするため最低限必要なファイルのみを記述しています。

|- original_theme(テーマ本体)
    |- index.php
    |- functions.php
    |- functions/
      |- init.php // 初期設定
      |- pagination.php // ページネーション関連
      |- thumbnail.php // サムネイル画像関連

テーマフォルダの直下にindex.phpfunctions.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文の中では、

  1. パスが正しければファイルを読み込む
  2. パスが間違っている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引数$loadtrueにするとファイルを読み込む
  • 第3引数$require_oncetrueにするとファイルを一度だけ読み込む(重複する場合は読み込まない)

これで、ファイルが存在する場合はそのファイルを読み込むという処理が完成しました。

続いてはファイルが存在しない、またはパスが間違っている場合の処理を見ていきましょう。

 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の記述量が膨大になりがちです。

そこで今回の記事で紹介したように分割管理することで、可読性・保守性がアップしますので、ぜひ試してみてください。

記事が役に立ったらサポートしてください

Web制作に関する
記事案を募集中!

Web制作について知りたいこと、質問等ありましたら、以下のフォームから気軽に投稿してください。
要望が多かったものは解説記事を作成します。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次