functions.phpは、WordPressのテーマファイルにおいて「機能」を追加する重要なファイルです。
基本的な書き方や設置場所のほか、実際によく使われる書き方の手法について解説します。
functions.phpとは
functions.phpは、WordPressのテーマファイルが読み込まれたタイミングで最初に読み込まれるファイルです。functions.phpに記述した関数が順番に実行されていき、特定の機能が反映されたり、CSSファイルが特定の順番で読み込まれていったりするわけです。
そういった重要な役割を持つ反面、functions.phpに重大なエラーがあるとページが真っ白になってしまったりエラーが表示されたりする可能性がありますから、他のテンプレートファイルよりも取り扱いには注意しましょう。
functions.phpの設置場所
functions.phpは、テーマフォルダ直下に設置することで自動的に読み込まれます。具体的には下記のパスです。
/wp-content/themes/設置したいテーマフォルダ/functions.php
名称はfunctions.phpで固定ですので、変更しないようにしてください。
functions.phpの書き方
functions.phpにまとめて書く
もっともベーシックな書き方としては、functions.phpのファイルに上から順番に関数を書いていくような方法が用いられます。
functions.phpが下記のようなファイルになるイメージです。
<?php
if (!defined('ABSPATH')) exit;
//目次を作る機能
function add_toc(){
//コード記述
}
//カスタムブロックを追加する機能
function add_custom_blocks(){
//コード記述
}
//アイキャッチ画像を有効にする機能
function theme_setup(){
//コード記述
}
...
単純ではありますが、しかしコードが煩雑になりますので、テーマが大規模になるほど保守性が低下します。実際の現場ではあまり使われないかもしれません。
functions.phpをハブにして細かくファイルを分けて書く
functions.phpは入口として使用するのみで、実際の機能はファイルごとに細かく分けて書くような方法もあります。たとえば「functions」というフォルダを作り、そこに機能ごとに整理したファイルを設置して呼び出すような運用です。
下記のようなファイルの置き方になります。
/wp-content/themes/テーマフォルダ/functions/実際に実行する複数のファイル
当テーマDAWNYでも色々と機能を追加していますが、functions.phpには下記の記述しかしていません。
<?php
if(!defined('ABSPATH')) exit;
require_once get_template_directory() . '/functions/_load.php';
functionsというフォルダを作り、その中の_load.phpを呼び出しています。ちなみに_load.phpは下記の記述にしています。
<?php
if(!defined('ABSPATH')) exit;
require_once dirname( __FILE__ ) . '/common.php';
require_once dirname( __FILE__ ) . '/editor.php';
require_once dirname( __FILE__ ) . '/js.php';
require_once dirname( __FILE__ ) . '/css.php';
require_once dirname( __FILE__ ) . '/toc.php';
require_once dirname( __FILE__ ) . '/widget.php';
require_once dirname( __FILE__ ) . '/breadcrumbs.php';
require_once dirname( __FILE__ ) . '/schema.php';
require_once dirname( __FILE__ ) . '/customizer/header-customize.php';
common.phpには共通関数を、css.phpにはCSSの読み込みに関する関数を、toc.phpには目次機能に関する関数を、といったようにファイルを分けて管理しています。
この方が保守性は高まりますので、実際に運用する際の書き方としてはおすすめの方法です。