肥大化するWordPress「functions.php テーマのための関数 」ファイルを整理整頓

2018年1月31日

肥大化するWordPress「functions.php テーマのための関数 」ファイルを整理整頓

WordPressでテーマをカスタマイズしたり、ショートコードを作ったり、ウィジェットを作成したりとしていくうちになが~く肥大化してくるのが、テーマのための関数 functions.php。どこにあのコードを書いたかなと探す場面が増えてくる。そのfunctions.phpを整理整頓してコードを見易く、わかりやすくする方法。

目的別のフォルダを作成 コードを小分けにしたPHPファイルを管理

肥大化するWordPress「functions.php テーマのための関数 」ファイル
肥大化するWordPress「functions.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 テーマのための関数を整理整頓する手順

functions.php テーマのための関数を整理整頓する手順
functions.php テーマのための関数を整理整頓する手順

現在、無料のWordPressテーマ「Luxeritas」 を使っており、Luxeritasの子テーマを使ってデザインや機能などのカスタマイズを行っている。子テーマのフォルダ名はluxech。子テーマフォルダluxechのfunctions.phpを前提に説明する。他のテーマでもこの方法でfunctions.phpを整理整頓できるはず。

子テーマのフォルダ名はluxech
子テーマのフォルダ名はluxech

子テーマのフォルダluxech内に分類するフォルダを作成

子テーマのフォルダ luxechに分類するフォルダを作成
子テーマのフォルダ luxechに分類するフォルダを作成

子テーマのフォルダluxech内に赤で囲った様に、functions.phpの内容を目的別に小分けにしたコードを書いたPHPファイルを仕分けしていれるフォルダを作る。フォルダ名は自分がわかる様につければよい。

functions.phpの内容を目的別に小分けしたPHPファイルを作成

functions.php内のコードを小分けにしてPHPファイルを作成する作業に入る。例として、functions.php内に書かれたショートコードを登録するコードをfunctions.phpから切り出してPHPファイルを作成、ショートコード分類のフォルダshortに仕分けし管理する手順を説明。

functions.phpを開いてショートコードを登録するコードを切り取る

functions.phpの内容を目的別に小分けしたPHPファイルを作成 functions.phpを開く
functions.phpの内容を目的別に小分けしたPHPファイルを作成 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で名前をつけて保存

文字コードUTF-8Nを指定して無題のテキストを保存する。日本語がテキスト内にないと文字コードUTF-8Nが指定できないかもしれない。そのあたりは使ってるテキストエディターによって違うだろう。

PHPファイルとしてshortフォルダに保存

PHPファイルとしてshortフォルダに保存
PHPファイルとしてshortフォルダに保存

文字コードUTF-8NでPHPファイルとしてshortフォルダに保存。ファイル名には命名規則的なものをつけていて、接頭辞、プレフィックスの様な規則を設定してある。

shortフォルダ内のPHPファイルには頭に「code-」をつける。年齢・年数のショートコードのファイル名はcode-age.phpとした。規則的なものといっても自分で勝手に決めることができる。

もちろんPHPファイルなので先頭の<?phpを忘れないようにする。PHP閉じの?>はいらない。というか、つけるとエラーになるんじゃなかったかな。

年齢・年数のショートコードcode-age.phpが無事にshortフォルダに保存される
年齢・年数のショートコードcode-age.phpが無事にshortフォルダに保存される

無事に子テーマフォルダluxechshortフォルダにcode-age.phpが作成された。

functions.phpにget_template_partを追記する

functions.phpにget_template_partを追記する
functions.phpにget_template_partを追記する

functions.phpにget_template_partを使って小分けにしたPHPファイルの要求を追記する。実際に追記するのは下のコード。get_template_partの()の中に、さっきの命名規則的なものが出てくる。

get_template_part( 'short/code', 'age' );
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' );

新たにウィジェット関連のコードをまとめたいと思い、子テーマフォルダluxechwigフォルダを作成、PHPファイルの頭にwiget-をつけるルールにして、wiget-ninki.phpをwigに保存した場合は下のようにfunctions.phpに追記することになる。

get_template_part( 'wig/wiget', 'ninki' );

FTPでfunctions.phpとフォルダ群をアップロード

FTPでfunctions.phpとフォルダ群をアップロード
FTPでfunctions.phpとフォルダ群をアップロード

PHPファイルは正しく保存できてるか、functions.phpにget_template_partが正しく追記されてるか確認後、FTPでサーバーの子テーマフォルダluxechfunctions.phpフォルダ群をアップロードする。

実際には1つずつ、functions.phpからコードを切り出し、PHPファイルを作成しフォルダに保存、functions.phpにget_template_partを追記、サーバーにアップロード、動作確認という作業を繰り返した方がトラブル時に原因がわかりやすいし、元に戻しやすい。

「functions.php テーマのための関数」ファイルがすっきり

「functions.php テーマのための関数」ファイルがすっきり
「functions.php テーマのための関数」ファイルがすっきり

肥大化・煩雑になりやすいfunctions.phpがこんなにすっきり。自分でわかりやすいフォルダ名でまとめているので探しやすいし、PHPファイルも小分けにしているのでコード自体短くて読みやすい。テーマを変えるときなんかも便利かもしれない。(テンプレートにタグを打つ手間は同じだけど)

デメリットは何箇所もリクエストするわけだからサーバーに負荷がかかったり、重くなったりしないかが素人目に不安。レスポンスも悪くなるかもしれない。でも、便利で見易くて管理しやすいのが一番だと思う。