こんにちは!STEP WILLのSeitoです!
今回はWordPressテーマを初めて制作し始めた人がぶつかる最初の壁、PHPエラーが起こった時に慌てないようにするために確認すべきポイントをお話ししたいと思います。
テーマを開発するときには必ずデバッグモードをtrueにする
まずWordPressテーマを開発する際にはエラーだけでなく、WarningやNoticeといったメッセージを確認するためにデバッグモードをtrueにしましょう。
デバッグモードをtrueにするには、WordPress本体ファイルのwp-config.phpを開きます。
define( 'WP_DEBUG', true);
もし開発が終わって納品する場合、本番で運営を始める場合は逆にセキュリティリスクにつながる恐れもあるので、必ずfalseに戻すようにして下さい。
WordPressテーマ制作ででてくるエラーの原因は大きく四つ
PHPで表示されるエラーの原因は大きく4つあります。
- テンプレートタグ(関数)のスペルミス
- 関数の括弧の閉じ忘れ
- セミコロンやカンマの書き忘れ
- 変数、整数以外の値のシングルコーテーション、ダブルコーテーションの書き忘れ、閉じ忘れ
それぞれ見ていきます。
今回は、職業訓練のWordPressの授業で参考書として使わせていただいた、「1冊ですべて身につくWordPress入門講座」のChapter6を参考にエラーについて共有していきたいと思います。

1.テンプレートタグ(関数)のスペルミス
エラーの一つ目は、テンプレートタグ(関数)のスペルミスです。

画像を見ると「Call to undefined function language_attribute()」となっています。このCall to undefined function XXというのは、「定義されていない関数XXを呼び出しています。」という日本語になります。
つまり、言い換えればそんな関数無いよ!というエラーです。
ここではlanguage_attribute()が無いと言っています。
更に、文章最後の方にそのエラーが発生しているファイルとその行数を教えてくれていますので確認すると
C:\xampp\htdocs\wcb\wp-content\themes\wcbnaturallife\header.php on line 2
header.phpの2行目でエラーが発生していることが分かります。
それではソースコードを見てみます。

確かに「language_attribute()」となっていますね。ただし、この場合教科書を書くにすると正しくはlanguage_attributes()となりますので、最後のsが抜けていたため、関数が存在せずエラーが出たという事になります。
このようにCall to undefined functionの場合は、エラーが発生しているファイルとその行数を確認すると解決する場合が多いです。
2.関数の括弧の閉じ忘れ
次に関数の括弧の閉じ忘れです。

今回のエラーは「syntax error, unexpected ‘;’, expecting ‘)」となっています。
syntax errorとは構文エラーというエラーで、定義している関数の形を無視している場合にエラーが発生しています。
syntax errorの次に「unexpected ‘;’」というのがありますね。これは、本来期待している値や記号がなく、予期せぬ「;」があるんだけど、と言っています。
エラーのファイルと行数を見ると、「header.php on line 15」ですので、ソースコードを見てみます。

すると、15行目に赤く波線が表示されているのと、括弧をよく見ると赤く色が付いているのが分かりますね。本当はこの段階でVS Codeがおかしいよ!と教えてくれているので未然に防げるエラーではありますが、ここがおかしいというのがエラーで分かりました。
で、ここでの間違いは何かというと、「esc_url」の閉じ括弧がないのがエラーの原因だと言うことが分かりますね。

3.セミコロンやカンマの書き忘れ
次に結構多い、セミコロンやカンマの書き忘れです。

一つ前と同じ様にsyntax errorで今度は、unexpected ‘wp_enqueue_style’というのが出てきました。
エラーの場所は「functions.php on line 9」ということで、functions.phpを見てみましょう。

すると、確かに9行目を見ると赤い波線が表示されているのが分かりますね。しかしながら、「wp_enqueue_style」を見てもどこがエラーなのか分かりませんね。
先ほどエラーの場合は、エラーメッセージの行数の括弧が閉じられていなくてエラーになりましたが、syntax errorがでた場合は、その行だけではなく、その行より前の行に問題がある場合も多いです。
ではエラーは何かというと、7行目の最後にセミコロンがないことがエラーの原因です。
セミコロンがないことによって、関数が続いている文章になってしまい、関数の後に「wp_enqueue_style」が出てきたため、構文が間違っているというのがエラーの原因です。

これが正解です。
4.変数、整数以外の値のシングルコーテーション、ダブルコーテーションの書き忘れ、閉じ忘れ
最後ですが、データを代入したり関数に引数として値を入れる際に、文字列をそのまま使う場合はシングルコーテーションやダブルコーテーションで囲む必要があります。
それに対して、代入する値が変数や数値そのものの場合は値をそのまま記述します。
ではそれを踏まえた上でエラーを観てみましょう。

今回はhtmlの表示上にエラーが表示されています。エラー内容は
Warning: Use of undefined constant description - assumed 'description' (this will throw an Error in a future version of PHP) in C:\xampp\htdocs\wcb\wp-content\themes\wcbnaturallife\header.php on line 18
ですね。正確に言うとエラーではなくWarningですが、表示が上手くいっていないことには変わりありませんので、適切に対処する必要があります。
今回のメッセージのポイントは、assumedというところです。
assumedは日本語で訳すと想定されるですが、このエラー分の場合は ‘description’と想定されるなので、日本語的にいうと「本当は’description’(シングルコーテーションありのdescription)ではありませんか?」と言い換えることができます。
では、header.phpの18行目のソースコードを見てみましょう。

bloginfo()の引数にdescriptionがありますが、本来は‘description’が正解です。このようにテキストが直接入る場合は必ずシングルコーテーションが必要なので、エラーとして表示されました。
ちなみに、PHPではこういった関数の引数にはシングルコーテーションなしに文字が入ることはありません。あるとしたら、変数($description)のように$記号が付いた変数か、1,2などの数値のみです。
エラーすら表示しないが表示がおかしい時のエラーの確認方法
次に、エラーすらでない時のエラーの確認方法をお伝えします。
例えば、次のようなページがあります。

このページでわざとエラーを起こして、表示をおかしくしてみます。

このページは、これ以上スクロールも出来ない状態です。いつもならどこかしらにはエラーが出てきて、間違いを確認する事が出来ましたが、今回の場合はエラーを表示してくれません。

もしこのような状態になったら、右クリックメニューから「ページのソースを表示」で、htmlソースコードを確認してみましょう。

そうすると、一番下の方にスクロールすると赤文字でエラーが表示されているのが分かりますね。
エラーには
Uncaught Error: Call to undefined function get_theme_file_url() in C:\xampp\htdocs\wcb\wp-content\themes\wcbnaturallife\header.php:15
と書いてあり、答えを言ってしまうとget_theme_file_urlは間違いで、get_theme_file_uriと書いていないため、エラーとなり表示が出来なくなってしまったということです。
このようにエラーが表示されない場合は、ページのソースからエラーが分かることもあるので慌てずエラーを見つける方法を思い出すようにして下さい。
まとめ
今回は、プラグラミング初心者が最初に躓くエラーの対処方法について書きました。
プログラミングのエラーはほとんどの場合英語なので、その時点でキツいという人もいるかと思いますが、これは本当に慣れで、エラーのパターンが分かればそれほど怖がらなくても大丈夫になります。
またエラーが起きた分、それが経験値になりますので、エラーをうまく使って開発上手になっていって下さい。
以上、「WordPressテーマ制作でPHPのエラーが出たときに慌てないために知っておくこと」でした!