この記事はで読むことができます。
当ブログでは商品・サービスのリンク先にプロモーションを含みます。
PHPのバージョンを上げたらサイトが真っ白になった…
エラーログに「create_function()」と出て意味が分からない
PHP8.3にしたいけど、エラーが怖くて踏み出せない
WordPressサイトの表示速度やセキュリティのために、PHPのバージョンアップは欠かせません。
しかし、いざバージョンを上げてみたら「サイトが真っ白に…」なんて経験はありませんか?

まさにそれです!PHP7.4から8.3にしたらエラーが出てしまいました…。
エラーメッセージが表示されると、焦ってしまいますよね。でも大丈夫です。エラーの原因を一つひとつ特定し、正しく対処すれば必ず解決できます。
この記事では、実際にPHP7.4からPHP8.3へのアップデートで発生したエラーを例に、具体的な原因と誰でもできる修正方法を詳しく解説します。
- PHP8.3で発生する「create_function()」エラーの解決策
- PHP8.3で表示される「Undefined variable」警告の対処法
- PHPアップデートの必要性とメリット
- エラー解決の具体的な手順
PHP8.3で発生した致命的エラー「create_function()」

まず、どのようなエラーメッセージが表示されたか教えていただけますか?
はい、以下のような「Fatal error(致命的なエラー)」が表示されました。
Fatal error: Uncaught Error: Call to undefined function create_function() in /path/to/wp-content/themes/your-theme/functions.php:256
原因:PHP8.0で削除された古い関数
このエラーの直接的な原因は、メッセージにある `create_function()` という関数です。
この `create_function()` は、実はPHP 7.2.0の時点ですでに「非推奨(もうすぐ使われなくなる古い書き方)」とされていました。そして、PHP 8.0でついに完全に「削除」されたのです。
そのため、PHP7.4ではギリギリ動作していましたが、PHP8.3にアップデートしたことで「そんな関数は存在しません」というエラーになってしまった、というわけです。
解決策:無名関数(クロージャ)への書き換え
解決方法は非常にシンプルです。エラーが出ているテーマの `functions.php` ファイルを開き、古い `create_function()` の記述を、現在の主流である「無名関数(クロージャ)」に書き換えるだけです。
▼修正前のコード(functions.php:256)
/*パスワードを入れた状態でログイン⇒パスワードをリセットできるので、それをログインできませんでしたにする*/
add_filter( 'login_errors', create_function('$a', "return 'エラー: ログインできませんでした';") );
▼修正後のコード
/*パスワードを入れた状態でログイン⇒パスワードをリセットできるので、それをログインできませんでしたにする*/
add_filter( 'login_errors', function($a) {
return 'エラー: ログインできませんでした';
} );

たったこれだけの修正で、致命的なエラーは解消されます。
もう一つの警告「Undefined variable」
先ほどの致命的なエラーを修正すると、サイトは表示されるようになりました。しかし、今度はトップページに以下のような「Warning(警告)」が表示されることがあります。
Warning: Undefined variable $cat_ID in /path/to/wp-content/themes/your-theme/home.php on line 271

これも出ました!サイトは見えるけど、気になります…。
原因:未定義の変数の使用
この警告は、「`$cat_ID` という変数が、中身が空のまま(定義されていない状態)で使われようとしていますよ」というPHPからのお知らせです。
PHP7.4以前はこうした記述に寛容で、警告が出ないこともありましたが、PHP8.x系ではより厳格にチェックされるようになったため、警告として表示されるようになりました。サイトの表示を崩すものではありませんが、コードの品質としては修正すべき点です。
解決策:不要なコードブロックの削除
警告が出ている `home.php` のコードを確認すると、新着記事を取得するクエリの中で、この未定義の変数が使われていました。
▼修正前のコード(home.php:271付近)
'tax_query' => array(
'relation' => 'OR',
array(
'taxonomy' => 'category',
'field' => 'term_id',
'terms' => $cat_ID, // ←ココが問題!
),
array(
'taxonomy' => 'member_cat',
'field' => 'slug',
'terms' => 'private',
),
array(
'taxonomy' => 'category',
'field' => 'slug',
'terms' => 'news',
),
),
このコードを見ると、すでに `news` というカテゴリの記事を取得する条件が別に指定されています。そのため、`$cat_ID` を使っている部分はそもそも不要な記述である可能性が高いです。
そこで、この不要なコードブロックを丸ごと削除します。
▼修正後のコード
'tax_query' => array(
'relation' => 'OR',
// array( ← このブロックを削除
// 'taxonomy' => 'category',
// 'field' => 'term_id',
// 'terms' => $cat_ID,
// ), ← ここまで削除
array(
'taxonomy' => 'member_cat',
'field' => 'slug',
'terms' => 'private',
),
array(
'taxonomy' => 'category',
'field' => 'slug',
'terms' => 'news',
),
),
この修正により、警告メッセージはきれいに消え、コードもスッキリしました。
そもそも、なぜPHPのアップデートは必要なの?

エラーが出るなら、古いPHPのままでもいいのでは…?

それはとても危険です!PHPのアップデートには大きなメリットがあります。
- セキュリティの向上(最重要)
古いPHPには脆弱性が見つかっても修正パッチが提供されません。サイト乗っ取りなどのリスクを避けるため、アップデートは必須です。 - パフォーマンスの向上
新しいPHPは処理速度が大幅に向上しています。サイトの表示が速くなることは、SEOにも訪問者の満足度にも繋がります。 - 互換性の維持
WordPress本体やプラグインは、新しいPHPに合わせて開発されます。古いPHPを使い続けると、最新の機能が使えなくなる可能性があります。
まとめ
今回は、WordPressサイトをPHP7.4から8.3へアップデートした際に発生した2つのエラーについて、原因と解決策を解説しました。
- 「create_function()」エラーは、PHP8.0で削除された関数が原因。無名関数に書き換えて対応する。
- 「Undefined variable」警告は、中身が空の変数が使われているのが原因。不要なコードなら削除する。
- PHPのアップデートは、エラーのリスク以上にセキュリティとパフォーマンスのメリットが大きい。
PHPのバージョンアップでエラーが出ると焦りますが、メッセージをよく読めば原因は必ず特定できます。この記事を参考に、安全にサイトを最新の状態に保ちましょう。

アップデート前には、必ずサイトのバックアップを取ることを忘れないでくださいね。