[WordPress] functions.phpを編集、修正、管理しやすくする書き方
photo credit: teamstickergiant via photopin cc

[WordPress] functions.phpを編集、修正、管理しやすくする書き方

WordPressをカスタマイズする時、もっともコードを追加したり、編集したりするのはfunctions.phpになるのではないでしょうか

ネット上の情報でも便利な機能を追加、拡張するために「functions.phpにこのコードを書きます。」という説明によく出会うと思います。

もちろん、それで実現したいことができるので間違いではありません。

しかし、そのままコードを追加していくと管理が難しくなります。

functions.phpに関数を増やすと管理が難しくなる?

WordPressの機能を拡張する方法には大きく分けて2つあります。

  • プラグインを入れる
  • functions.phpにコードを書く

プラグイン

2つを比べると分かると思いますが、1つ目のプラグインを使う方法はとても管理がしやすいです。管理しやすさには以下の点があげられます。

  • フォルダで管理されプラグインが何を行なう物か明白に分かれている
  • FTPソフトや管理画面からも追加、停止、削除が簡単
  • フィルターフックが用意されたプラグインは元のコードはそのままで機能拡張できる

functions.php

対するfunctions.phpで機能を拡張する方法は、まだWordPressのカスタマイズを始めたばかりの方ですと、フォルダやファイルを分けずに機能を追加する関数も全てfunctions.phpに書いてしまっていることと思います。

するとテンプレートファイルに比べてかなり肥大化したファイルになります。そうなると以下の問題ができ管理が難しくなります。

  • functions.phpを開くまで何が関数として機能が追加されているかわからない
  • あとから編集、修正を加える時、その箇所を探すのに時間がかかる
  • 同じようなコードを書いてしまうかもしれない

これを改善する、編集・修正・管理がしやすくfunctions.phpを書く方法を紹介します。

functions.php 管理方法

functions.phpに書いていたコードは機能ごとにグループ分けして、別のphpファイルを作ります。新しいフォルダを作り、作ったphpファイルを入れ、functions.phpにはそのファイルを読み込むコードを記述します。

すると以下のようなメリットがあります。

  1. ファイルを開かず新しく作成したフォルダを見ればどんな機能を追加したかわかる
  2. 編集時、グループ分けしたファイルから修正箇所をすぐ探せる
  3. 編集時、他のファイルを触らないので誤った入力が減る
  4. ファイルごとにグループ分けすることで同じようなコードを書くミスをなくす
  5. オフにしたい機能はfuncutions.phpでインクルードした箇所をコメントアウトするだけ

早速functions.phpを管理しやすい形にしていきましょう。手順は3ステップです。

  1. 分解するファイルを入れる新しいフォルダ作成
  2. functions.phpを分解してphpファイルを作る
  3. functions.phpにファイルの読み込むコードを書く

分解するファイルを入れる新しいフォルダ作成

テーマフォルダにはテンプレートファイルが並んでいると思います。そこに一緒に関数を定義したファイルを並べるのは、見た目に関わるテンプレートファイルと区別が付きづらくなるので綺麗ではありません。

なので、別に新しいフォルダを作成しましょう。フォルダの名前は以下に私がベターだと思う候補を5つ上げておきます。

  • functions
  • library
  • lib
  • includes
  • inc

私はGithubで人気のWordPress starter theme「roots」を参考にlibraryの短縮したlibと名前を付けています。WordPressテーマの「TwentyFourteen」はincにカスタムヘッダーやウィジェットなどをまとめていますね。

ここでは「lib」というフォルダを作成したと仮定して話を進めます。

functions.phpを分解してphpファイルを作る

functions.phpをグループに分解して、先ほど作成した「lib」フォルダに保存していきましょう。私の場合は、以下のファイルに分けています。

上記のようにfunctions.php内を全てファイルに分けてlibフォルダに保存し、functions.php内は空にしておきます。

functions.phpにファイルの読み込むコードを書く

functions.phpには分解したファイルを読み込むコードとそのファイルの説明を記述するだけにします。いわばプラグインの管理画面のようにさっと見て何が定義されているか分かる状態です。

以下は、functions.phpにファイルをインクルードしている例です。この記述は先ほどのフォルダ名の時と同じように「roots」を参考にしています。

上記のコード、実はrequire_onceを書かなくてもWordPressに用意された関数locate_templateだけでファイルの読み込みができます。

require_once と locate_template

まずは、require_oncelocate_templateについて簡単な説明をします。

require_once
ファイルがすでに読み込まれているかどうかを PHP がチェックし、読み込みます。すでに読み込まれている場合はそのファイルを読み込みません。
locate_template
locate_templateはテンプレートファイルがあるかチェックするWordPressの関数で、ファイルが見つかった場合はファイルのパス名を返します。見つからなかた場合は''を返します。

locate_templateにはパラメータが3つあります。

locate_templateだけでfunctions.phpに読み込むコードは以下のように書くことができます。

なぜ、私がrequire_onceを書く方を採用しているか、それはコードを見た時に読み込んでいる必要なコードなんだな、というのが分かりやすいからです。locate_templateだけでは、その関数を知らないと何がtrueなのか理解するまでに時間がかかるかもしれません。

locate_templateについては以下のサイトも参考にしてみてください。

まとめ

  • テーマフォルダ内にfunctions.phpを分解したファイルを入れるフォルダを作る
  • functions.phpをグループに分け分解したファイルを作る
  • functions.phpにはインクルードする記述を書く

あとがき

これでfunctions.phpが肥大化している方は少しは管理しやすくなるんじゃないでしょうか、参考になれば幸いです。また、もっといい管理方法があれば教えて下さい。

表示に関するテンプレートファイルの管理方法についてはこちらを参考にしてください。