肥大化するWordPress「functions.php テーマのための関数 」ファイルを整理整頓
WordPressでテーマをカスタマイズしたり、ショートコードを作ったり、ウィジェットを作成したりとしていくうちになが~く肥大化してくるのが、テーマのための関数 functions.php。どこにあのコードを書いたかなと探す場面が増えてくる。そのfunctions.phpを整理整頓してコードを見易く、わかりやすくする方法。
目的別のフォルダを作成 コードを小分けにしたPHPファイルを管理
WordPressをカスタマイズなどしてると何かと書き込み編集する機会が多いのがテーマフォルダにあるfunctions.php。というかほとんどいじるのはfunctions.phpかstyle.cssといった感じ。知らず知らずのうちにPHPコードが長くズラッと続くファイルになりがち。
コメントとか入れてわかりやすくできるといえばそうだが、functions.phpが2000行とかになってくると探すのに一苦労だし、functions.phpの不要な部分を削除しようとしてうっかり必要な部分も消してしまってお決まりの「ワードプレスが真っ白」状態になんてことも起こりえる。
テーマフォルダ内に目的別?まあ自分がわかるような名前のフォルダを作成し、functions.phpの内容を小分けにしたPHPファイルを作成、目的別フォルダに仕分けして管理する。例えば、ウィジェット関連のコードはwigフォルダに、関数関係のコードはfunフォルダに、ショートコード関連のコードはshortフォルダにと分ける。
functions.phpをいじるので正常にWordPressが動いている状態(表示されている状態)のfunctions.phpをいじる前に小まめにバックアップしておく必要がある。全角入力で改行してしまったとか、全角スペースをいれてしまったとかで真っ白状態にといったことはありがち。この状態から戻すには正常にWordPressが動いていた時のfunctions.phpが必要だ。
なおファイルの生成とか編集はWEB上のWordPress内でできないので、PCにテーマをFTPなどでダウンロードしてテキストエディターで編集してアップロードということになるゆえに、一気にやらないで少しづつ作業した方がよいと思う。実際にWordPressの動きを確認しては少し作業を進めるという形の方が、トラブった時の原因がわかりやすい。
functions.php テーマのための関数を整理整頓する手順
現在、無料のWordPressテーマ「Luxeritas」 を使っており、Luxeritasの子テーマを使ってデザインや機能などのカスタマイズを行っている。子テーマのフォルダ名はluxech。子テーマフォルダluxechのfunctions.phpを前提に説明する。他のテーマでもこの方法でfunctions.phpを整理整頓できるはず。
子テーマのフォルダluxech内に分類するフォルダを作成
子テーマのフォルダluxech内に赤で囲った様に、functions.phpの内容を目的別に小分けにしたコードを書いたPHPファイルを仕分けしていれるフォルダを作る。フォルダ名は自分がわかる様につければよい。
functions.phpの内容を目的別に小分けしたPHPファイルを作成
functions.php内のコードを小分けにしてPHPファイルを作成する作業に入る。例として、functions.php内に書かれたショートコードを登録するコードをfunctions.phpから切り出してPHPファイルを作成、ショートコード分類のフォルダshortに仕分けし管理する手順を説明。
functions.phpを開いてショートコードを登録するコードを切り取る
functions.phpを開いてショートコードを登録するコードを切り取る。実際のコードは下のようなコード。2つのショートコードが登録されている。
<?php
/* 年齢・年数ショートコード */
function nensuu_nyuryoku($bthday) {
$genzai = date("Ymd");
$tanjyoubi = $bthday[0];
return floor(($genzai-$tanjyoubi)/10000);
}
add_shortcode('nensuu', 'nensuu_nyuryoku');
function watasi_nenrei(){
$genzai = date('Ymd');
$tanjyoubi = "19820401";
return floor(($genzai-$tanjyoubi)/10000);
}
add_shortcode('nenrei', 'watasi_nenrei');
切り取ったコードを新しいテキストエディターに貼り付ける
functions.phpから切り取ったコードを新しいテキストエディター(無題)に貼り付ける。ちなみに今使ってるテキストエディターはTeraPad。
文字コードUTF-8Nで名前をつけて保存
文字コードUTF-8Nを指定して無題のテキストを保存する。日本語がテキスト内にないと文字コードUTF-8Nが指定できないかもしれない。そのあたりは使ってるテキストエディターによって違うだろう。
PHPファイルとしてshortフォルダに保存
文字コードUTF-8NでPHPファイルとしてshortフォルダに保存。ファイル名には命名規則的なものをつけていて、接頭辞、プレフィックスの様な規則を設定してある。
shortフォルダ内のPHPファイルには頭に「code-」をつける。年齢・年数のショートコードのファイル名はcode-age.phpとした。規則的なものといっても自分で勝手に決めることができる。
もちろんPHPファイルなので先頭の<?phpを忘れないようにする。PHP閉じの?>はいらない。というか、つけるとエラーになるんじゃなかったかな。
無事に子テーマフォルダluxech→shortフォルダにcode-age.phpが作成された。
functions.phpにget_template_partを追記する
functions.phpにget_template_partを使って小分けにしたPHPファイルの要求を追記する。実際に追記するのは下のコード。get_template_partの()の中に、さっきの命名規則的なものが出てくる。
get_template_part( 'short/code', 'age' );
shortはフォルダ名、codeはshortフォルダ内のPHPファイルの頭につけるcode-からハイフンを取ったもの、ageはハイフン以降のファイル名の部分という構成になっている。
例えば新たにショートコード登録のコードをfunctions.phpから切り取って、shortフォルダにcode-hoge.phpと保存した場合次のコードをfunctions.phpに追記することになる。
get_template_part( 'short/code', 'hoge' );
新たにウィジェット関連のコードをまとめたいと思い、子テーマフォルダluxechにwigフォルダを作成、PHPファイルの頭にwiget-をつけるルールにして、wiget-ninki.phpをwigに保存した場合は下のようにfunctions.phpに追記することになる。
get_template_part( 'wig/wiget', 'ninki' );
FTPでfunctions.phpとフォルダ群をアップロード
PHPファイルは正しく保存できてるか、functions.phpにget_template_partが正しく追記されてるか確認後、FTPでサーバーの子テーマフォルダluxechにfunctions.phpとフォルダ群をアップロードする。
実際には1つずつ、functions.phpからコードを切り出し、PHPファイルを作成しフォルダに保存、functions.phpにget_template_partを追記、サーバーにアップロード、動作確認という作業を繰り返した方がトラブル時に原因がわかりやすいし、元に戻しやすい。
「functions.php テーマのための関数」ファイルがすっきり
肥大化・煩雑になりやすいfunctions.phpがこんなにすっきり。自分でわかりやすいフォルダ名でまとめているので探しやすいし、PHPファイルも小分けにしているのでコード自体短くて読みやすい。テーマを変えるときなんかも便利かもしれない。(テンプレートにタグを打つ手間は同じだけど)
デメリットは何箇所もリクエストするわけだからサーバーに負荷がかかったり、重くなったりしないかが素人目に不安。レスポンスも悪くなるかもしれない。でも、便利で見易くて管理しやすいのが一番だと思う。