長いfunctions.phpを複数外部ファイルに分割して高速化
長いfunctions.phpを複数外部ファイルに分割して高速化
この記事ではWordPressにおいて「どんどん長くなるfunctions.phpの内容を複数の外部ファイルに分割して読み込み管理し、開発の効率化やサイトの表示スピードを高速化」する方法を紹介します。
WordPressでサイトを運営していると、機能をカスタマイズが積み重なり以下のようなデメリットが出てきます。
- functions.phpのソースコードが肥大化し読みづらい、開発を効率化したい
- functions.phpを1行変更するだけで全体に影響が及ぶリスクがある
- 機能追加しすぎてサイトの表示スピードが遅くなった
そんな問題をこの記事では解決していきます。
ぜひ最後まで読んでみてください。
functions.phpについてわからない方はこちらをご覧ください。
わかる方は飛ばして結構です。
functions.phpの編集方法まとめ
functions.phpはWordPressの機能追加をするためのPHPファイルです。
(※実ファイルは/wp-content/themes/<テーマ名>/の直下にあります)
functions.phpを修正する場合は必ず親テーマではなく子テーマのfunctons.phpを修正してください。
※その理由や親テーマと子テーマについてはこちら↓の記事を参考に。
管理画面からfunctions.phpを参照・編集するには以下のように「外観>テーマ(ファイル)エディター」にアクセスしてテキスト編集をします。
PHPファイルの記述ルールとしてプログラムコードは以下のようにphpタグの囲みの中にある必要があります。
<?php
→PHPのプログラムを書く場所
?> ←最後PHPで終わる場合だけ省略可能
また、直接functions.phpを編集するよりもこちらのプラグインで編集した方が便利なので参考にしてみてください。
functions.phpについての詳細はこちらの記事にまとめてあります。
functions.phpを複数の外部ファイルに分割する手順について
実際の例を見てみた方が早いのでサンプルのfunctions.phpを複数の外部ファイルに分割してみましょう。
元の対応前のfunctions.phpのサンプルソースコード
例えばサンプルとして下記の内容のfunctions.phpがあったとします。
ショートコードの定義が4つされているだけのサンプルソースコードです。
<?php
add_shortcode('echo_a', function($atts, $content, $tag ){
return "【ショートコードの出力A】";
});
add_shortcode('echo_b', function($atts, $content, $tag ){
return "【ショートコードの出力B】";
});
add_shortcode('echo_c', function($atts, $content, $tag ){
return "【ショートコードの出力C】";
});
add_shortcode('echo_d', function($atts, $content, $tag ){
return "【ショートコードの出力D】";
});
サンプルなのでわかりやすいように短いですがこちらを複数の外部ファイルに分割してfunctions.phpから読み込む形に修正していきます。
以下の3ステップで進めていきます。
- 【ステップ①】分割先の複数の新規ファイルを作成
- 【ステップ②】functions.phpから外部ファイルを読み込むように修正する
- 【ステップ③】functions.phpの実行結果を確認する
【ステップ①】分割先の複数の新規ファイルを作成
元のfunctions.phpソースコードの中身を新しいファイルに分割して記述します。
functions.phpと同じフォルダ(ディレクトリ)に以下の内容の4ファイルを新規作成します。
wordpressのファイルの新規作成についてはFTPなどを使うよりも、こちらのプラグインが超絶便利なのでぜひ使ってみてください。
中身は4ファイルともアルファベットが変わるだけです。
ファイル①shortcode_echo_a.php
<?php
//文字列を出力するだけのショートコードを登録
add_shortcode('echo_a', function($atts, $content, $tag ){
return "【ショートコードの出力A】";
});
ファイル②shortcode_echo_b.php
<?php
//文字列を出力するだけのショートコードを登録
add_shortcode('echo_b', function($atts, $content, $tag ){
return "【ショートコードの出力B】";
});
ファイル③shortcode_echo_c.php
<?php
//文字列を出力するだけのショートコードを登録
add_shortcode('echo_c', function($atts, $content, $tag ){
return "【ショートコードの出力C】";
});
ファイル④shortcode_echo_d.php
<?php
//文字列を出力するだけのショートコードを登録
add_shortcode('echo_d', function($atts, $content, $tag ){
return "【ショートコードの出力D】";
});
【ステップ②】functions.phpから外部ファイルを読み込むように修正する
次はfunctions.phpを修正して、内容を直接書くのではなく読み込み管理だけに徹するよう内容を書き換えます。
必要な場所だけに読み込めるようにURLによって読み込み可否を分岐させています。
- 毎回必ず読み込む
- URLにマッチしたときだけ読み込む
- URLにマッチしないときだけ読み込む
<?php
/*************************************************************
* 毎回必ず読み込む
************************************************************/
@include_once('shortcode_echo_a.php');
/*************************************************************
* パスが条件にマッチした時だけ読み込む
************************************************************/
if(strpos($_SERVER["REQUEST_URI"], "/echo_test2") !== false){ //URLに指定した文字列が見つかった場合
@include_once('shortcode_echo_b.php');
}
if(strpos($_SERVER["REQUEST_URI"], "/echo_test3") !== false){ //URLに指定した文字列が見つかった場合
@include_once('shortcode_echo_b.php');
@include_once('shortcode_echo_c.php');
}
/*************************************************************
* パスが条件にマッチしなかったら読み込む
************************************************************/
if(strpos($_SERVER["REQUEST_URI"], "/echo_test3") === false){ //URLに指定した文字列が見つからなかった場合
@include_once('shortcode_echo_d.php');
}
@imclude_onceの@マークはエラーを出さないようにするための演算子です。
同じファイル名がWordPress内にありそうなときは __DIR__を使って以下のようにします。
〇 @include_once(__DIR__ . '/shortcode_echo_a.php');
× @include_once('./shortcode_echo_a.php'); ※相対パスは使えない
【ステップ③】functions.phpの実行結果を確認する
ではどんな結果になるのか検証してみましょう。
全部で3ページ作成します。
1ページ目 /echo_test1/
/echo_test1/というURLでアクセスします。
投稿のソースコード
投稿のソースコードは全て共通です。
[echo_a]
[echo_b]
[echo_c]
[echo_d]
表示結果
AとDだけがショートコード展開されました。
2ページ目 /echo_test2/
/echo_test2/というURLでアクセスします。
投稿のソースコード
[echo_a]
[echo_b]
[echo_c]
[echo_d]
表示結果
C以外が全部ショートコード実行されています。
3ページ目 /echo_test3/
/echo_test2/というURLでアクセスします。
投稿のソースコード
[echo_a]
[echo_b]
[echo_c]
[echo_d]
表示結果
D以外が全部実行されました。
全て意図通りにfunctions.phpからそれぞれの分割したファイルを読み込むことができているようです。
これでfunctions.phpの複数の外部ファイル分割と読み込みの設定は終了です。
最後までお読みいただきありがとうございました!