functions.phpの基本
WordPressではPHPのコードを記述し、様々な機能を追加することができます。個別のテンプレートにPHPのコードを直接記述することもできすが、複雑なコードや汎用的に使用するコードをそれぞれのテンプレートに書いていたらとても大変で、読みにくいコードとなってしまいます。
そのため、WordPressには「functions.php」という特別なファイルが用意されており、テーマ内で汎用的に使用するコードはここに記述しておく仕組みとなっています。
functions.phpのファイルは、他のテンプレートよりも先に実行され、テーマ専用のプラグインのような動作をします。
functions.phpにできること
functions.phpでは多くのことができますが、例えば下記のようなことができます。
- ショートコードの定義
- アイキャッチ画像の設定
- ページネーションの設定
- 記事抜粋の文末を変更
- 検索から固定ページを除外
- サイト内検索結果をカスタマイズ
- 管理ページのカスタマイズ
これらの機能はほんの一例です。このほかにも、functions.phpにPHPコードを記述することで様々な機能を追加することができます。
functions.phpの注意点
functions.phpはWordPressを動作させるためにとても重要なファイルです。一文字間違えただけでも予期せぬ動作を起こしたり、WordPressが表示されなくなってしまうこともあります。そのため、コードを書くときには十分に注意してください。
また、functions.phpを書き換えるときには必ずバックアップを取るようにしましょう。バックアップがあれば、コードの記述を間違ってWordPressの動作に問題が起きても、元の状態に戻すことができます。
ただし、バックアップを取るときは文字コードに気をつけてください。通常は「UTF-8」で記述されていることが多いと思いますが、文字コードが間違っているとバックアップファイルを後から使いたいときに文字化けして読めないということもあります。
functions.phpの分割
カスタマイズの規模や内容によっては、functions.phpにとても多くのコードを記述することもあります。その場合、後からコードを修正する必要が出てきたときに該当箇所のコードを探しだす作業は、とても大変なものとなります。
functions.phpに多くのコードを書く場合は、ファイルを分割することでメンテナンス性がよくなります。
ファイルを分割するには、それぞれの機能ごとにグループを作り、適当な名前をつけたファイルを用意します。そして、functions.phpでは、get_template_part関数を使ってそれぞれのファイルを読み込みます。
例えば、「functions」というディレクトリの中に
- 初期設定の記述(init.php)
- ショートコードの定義(short_code.php)
- エディターのカスタマイズ(editor.php)
- ページネーションのカスタマイズ(pagenation.php)
- 管理メニューのカスタマイズ(menu.php)
このようなグループごとのファイルを作った場合、functions.phpの記述は下記のようになります。
<?php
get_template_part('functions/init'); //初期設定の記述
get_template_part('functions/short_code'); //ショートコードの定義
get_template_part('functions/editor'); //エディターのカスタマイズ
get_template_part('functions/pagenation'); //ページネーションのカスタマイズ
get_template_part('functions/menu'); //管理メニューのカスタマイズ
?>
get_template_part()
get_template_part関数はWordPress独自の関数で、テンプレートパーツを他のテンプレートへ読み込むためのものです。引数に拡張子を除いたテンプレートファイル名を指定することで、その場所のテンプレートファイルを読み込みます。また、テーマのディレクトリにサブディレクトリを作って、そこにファイルがある場合は、ディレクトリ名も含めたファイル名を指定します。
例えば「sample.php」といテンプレートパーツを作り、テーマディレクトリの直下にファイルを置いた場合は「get_template_part(‘sample’)」、testというフォルダを作りそこにファイルを置いた場合は「get_template_part(‘test/sample’)」でテンプレートパーツを読み込むことができます。