WordPressの表示がおかしくなったときに確認すること
※本ブログの目的は個人の備忘録であり、コードは参考用として掲載しています。
実際に使用される際は、ご自身の環境で十分に動作確認を行ってください。
コードの利用によって生じたいかなる問題についても責任を負いかねますので、あらかじめご了承ください。
WordPressでサイトを運営していると、ある日突然「表示がおかしい」「記事が真っ白になった」といった状況に遭遇することがあります。
焦る気持ちはよくわかりますが、多くの場合はコードや設定の小さなミスが原因です。この記事では、特にPHPを使ったテーマやカスタムコードでよく起こるトラブルと、その確認ポイントをまとめました。
PHPの条件式に注意
個人的に最もよくあるミスだと思っていることが、PHPの条件式によるエラーです。
よくあるパターンを以下にまとめました。
セミコロンの付け忘れ
条件式の直後や関数の末尾にはセミコロンが必要です。
if( is_home() ) // セミコロンが抜けているとエラー
echo 'ホームです';コロン(:)とセミコロン(;)の混同
PHPでは条件式やループに「波括弧 {}」の代わりに「コロン :」を使うことができますが、使い方を間違えると構文エラーになります。
コロン : を使う場合は endif; で閉じる、波括弧 {} を使う場合はそのまま閉じましょう。
// NG: セミコロンを使ってしまった
if(is_home()); {
echo 'ホームです';
}
// OK: 波括弧かコロンを正しく使う
if(is_home()) {
echo 'ホームです';
}
// OK: コロンを使う場合
if(is_home()):
echo 'ホームです';
endif;括弧や波括弧の閉じ忘れ
if(is_page('about') {
echo 'このページはAboutです';
}) の閉じ忘れで構文エラーになります。
値が存在しない場合の処理
以下の例の場合、$postが空だとエラーになってしまいます。
if($post->ID == 10) { // $postが空だとエラー
echo '記事ID10です';
}$postや変数が存在するか確認してから比較する必要があります。以下は修正例です。
if(isset($post) && $post->ID == 10) {
echo '記事ID10です';
}比較演算子の間違い
=や==や===の使い方を間違えていないか確認しましょう。
if($value = 1) { // = は代入。== や === を使うべき
echo '値は1です';
}記号 | 名前 | 意味 | 用途 | 例 | 結果 |
|---|---|---|---|---|---|
| 代入演算子 | 右辺の値を左辺に代入する | 変数に値を入れる |
|
|
| 等価演算子(ゆるい比較 / 抽象的比較) | 値が 等しいか を比較する(型は自動変換される) | 型が違っても値が同じならOKにしたいとき |
| true(型が違っても値が同じ) |
| 同一演算子(厳密比較) | 値も 型も 両方等しいか比較する | 型変換を避け、厳密に比較したいとき |
| false(型が違うため) |
プラグインによるエラー
WordPressではプラグインごとに用意された関数やフックがあります。問題になるのは、そのプラグインを有効化していないのに専用コードを書いてしまった場合です。
例えば、以下のようなコードを functions.php に書いたとします。
// お問い合わせフォーム用プラグインの関数
if( function_exists('contact_form_7') ) {
contact_form_7();
}このコードは Contact Form 7 プラグインが有効化されている場合のみ動作します。
プラグインを有効化していない場合、undefined functionエラーになり、サイトが真っ白になることがあります。
コードを使いまわしているときに、つい使っていないプラグインの記述を入れてしまうことがあると思いますので、気をつけましょう。
対策
使わないのであれば書かない、削除するように気をつけることが大事ですが、事前に対策しておくことも可能です。
1.function_exists() で存在をチェックする
if ( function_exists( 'wpcf7_contact_form' ) ) {
// プラグインが有効化されている場合のみ実行
$contact_form = wpcf7_contact_form( 123 );
echo $contact_form->title();
} else {
// プラグインが無効の場合の処理(必要なら)
// echo 'Contact Form 7 が有効化されていません。';
}2.class_exists() でクラスの有無をチェックする
プラグインによっては関数ではなくクラスベースで機能を提供しているものもあります。
その場合は class_exists() を使います。
if ( class_exists( 'WPCF7_ContactForm' ) ) {
// クラスが存在する
$form = WPCF7_ContactForm::get_instance( 123 );
}3.defined() で定数の有無をチェックする
プラグインによっては、読み込み時に専用の定数を定義しているものも多いです。
定数がある=プラグインが読み込まれている、と判断できます。
// Contact Form 7 が有効化されているかを定数でチェック
if ( defined( 'WPCF7_LOAD_JS' ) ) {
// CF7 が有効
echo 'Contact Form 7 は有効です。';
}まとめ
WordPress でサイトが「真っ白になる」「表示がおかしくなる」原因の多くは、PHPコードや設定のちょっとしたミスです。特に条件式の書き方、セミコロンや括弧の閉じ忘れ、存在しない変数の参照、使っていないプラグイン用コードの混入などは、実務でも頻繁に起こります。
トラブル時は慌てず、
- セミコロン・括弧の閉じ忘れ
- 比較演算子の誤り
- 変数やオブジェクトが存在しているか
- プラグイン専用コードを呼び出していないか
といった基本のポイントを一つずつ確認してみてください。
普段から function_exists() や class_exists() での存在チェックを徹底し、不要なコードを残さないようにしておくことで、突然のエラーを防ぎやすくなります。小さな見直しが、安定したサイト運営につながります。