WordPress管理画面にログインした時のこと…
真っ白画面にこんなエラーが表示されました。
Parse error: syntax error, unexpected '?'
少し厄介なエラーではありますが、
自力で解決することも不可能ではありません。
この解決方法には2種類があります。
※ ただしセルフ解決するなら自己責任!!
その原因・解決策とかを色々解説していきます。
目次
なぜか syntax error, unexpected '?' がログイン画面で発生
WordPressにログインしようとした時
なぜか次のホワイトスクリーンに遭遇しました。
▼ 全WPユーザーが恐れるあの画面
Parse error: syntax error, unexpected '?' in /home/hogehoge/hogehoge.com/public_html/wp-content/plugins/jm-twitter-cards/admin/views/settings/settings.php on line 61
簡単に説明すると Syntax error = 「構文エラー」のこと、そして原因は unexpected '?' = 「予期せぬはてなマークあるよ」とエラーメッセージは伝えています。
分からない人からしたら厄介すぎる問題です。
原因はプラグインの入れすぎ&不用意に最新アプデしたこと
実はログイン前に次を試したんですよね。
- 未更新のプラグインがあるのを気づく
- それを最新にアップデート
プラグインのどれかがエラー排出したようです。
なぜ分かったかは先ほどのエラーに書いてあったから
↓ この短いエラーにたくさんのヒントが隠れている
Parse error: syntax error, unexpected '?' in /home/hogehoge/hogehoge.com/public_html/wp-content/plugins/jm-twitter-cards/admin/views/settings/settings.php on line 61
↓ jm-twitter-cardsプラグインのsettings.phpが原因
/home/hogehoge/hogehoge.com/public_html/wp-content/plugins/jm-twitter-cards/admin/views/settings/settings.php
このようにWordPressでは pluginsフォルダにプラグイン全てが格納されていて、その中のフォルダ名(ここではjm-twitter-cards)がプラグイン名をあらわしてます。
その中のsettings.phpが構文エラーを吐いていた……
こういう風にエラーメッセージから色々推理できます。
これは使える知識なので知ってて損はないです。
問題のプラグインPHPファイルを開いて確認した
次にエラー原因のプラグインファイルを調べました。
↓ 以下の場所に問題があった
[
'name' => 'twitterImage',
'label' => esc_html__('Image Fallback', 'jm-tc'),
'type' => 'file',
'default' => $opts["twitterImage"] ?? "",
],
↓ エラー行だけを抜き出すとココ
'default' => $opts["twitterImage"] ?? ""
ここが syntax error, unexpected '?' の原因。
なんとPHP7以上でしか動かない構文なんです。
でもPHPコードとしては正しい真っ当なコードです。
- 自分の環境はPHP5で動いていた
- だからPHP7の最新構文には対応してない
- 結果としてエラー発生(泣)
こういう理由だったと分析で判明しました。
この ?? = はてな2つ はnull合体演算子という構文
この構文はnull合体演算子と呼ばれる構文です。
↓ null合体演算子のシンプルな例
$opts = ["name" => "Fukuro"];
$name = $opts["name"] ?? "Unknown";
このコードだと $opts["name"] がnullでなかったらその値を採用し、もしnullだったら右の値 "Unknown" が評価されるって感じです。
PHP7以前の書き方なら次と同じになります。
↓ null合体演算子はPHP5以前ならこう書ける
$opts = ["name" => "Fukuro"];
$name = isset($opts["name"])
? $opts["name"] : "Unknown";
プログラマーは冗長さを嫌うそうです。
だからできるだけ短くムダなく書きたい。
その願望を叶えるのがnull合体演算子という訳です。
それがエラーの原因とは皮肉ですね……
このsyntax error, unexpected '?'のWordPressでの解決策
まあWordPressに限った話ではないです。
次のどちらかの解決策を試してください。
1.PHPバージョンを思い切ってPHP7に切り替える
初めに思いつくのはPHP7に切り替えること
そもそも古いPHPを使ってるのが原因です。
だからPHPバージョン7に切り替えるのがベスト
ところがリスクもあるから気を付けてください。
- 互換性のないコードによるエラーリスク
→ PHP5以下では動いてたけどPHP7以降では動かないコードがプラグイン・テーマに紛れてるかも。そういうリスクを覚悟すべき - 古いWordPressだとPHP7と互換性がないリスク
→ 断言できないけどWordPressバージョン(ver3以下?)ではPHP7・PHP8などと互換性がないケースがある。そういうリスクを覚悟すべき
このリスクを受け入れるなら試してください。
以下はWordPress + PHPバージョンアップの関連記事
▼ WordPressサーバー応答時間を短縮する効果的な方法
▼ PHPバージョンアップでWordPresエラーの対処法
相当リスクがあるので自己責任でお願いします。
PHPコードが書けてWordPresも理解している……
そういう人は自力解決に挑戦してみてください。
2.古いPHPと互換性のあるコードに修正する
この syntax error, unexpected '?' エラー
そもそも古いPHPと互換性がないから問題です。
それなら古いPHPと互換性のある書き方に直せば解決
↓ 例えば先ほどのプラグインコード例(×)
[
'name' => 'twitterImage',
'label' => esc_html__('Image Fallback', 'jm-tc'),
'type' => 'file',
'default' => $opts["twitterImage"] ?? "",
],
↓ このコードなら次のように修正する(○)
[
'name' => 'twitterImage',
'label' => esc_html__('Image Fallback', 'jm-tc'),
'type' => 'file',
'default' => isset($opts["twitterImage"])
? $opts["twitterImage"] : "",
],
地道にnull合体演算子が使われているプラグイン・テーマのコードを修正していってください。あるいは使わないなら停止するか・削除するでもOKです。
とにかくnull合体演算子を使わないコードにする
もちろん自己解決するなら自己責任でお願いします。
WordPress初心者・中級者なら詳しい人に相談しよう
以上の方法はWP初心者には難易度高すぎです。
- 最低でもPHPコードが書けないといけない
- エラー箇所を自分で修正しないといけない
- PHPバージョンアップもリスクが大きい
問題をさらに悪化させることもあります。
少なくともWordPress初心者にはムズすぎです。
もし自力解決できずに困っているなら……
迷わず次の場所で相談した方がいいですよ。
特に修正代行依頼したいなら1番目のサービスが一番
そこで 《Webサイト制作・Webデザイン》 から依頼してみてください。
ちなみに、私自身もそこでサービス出品してます。
WordPressブログ経験歴の長さ。
トラブルに遭遇して自力解決した経験。
それを武器にWPトラブル解決相談をやってます。
もしお困りならお気軽にご相談ください。
フク郎
最新記事 by フク郎 (全て見る)
- トレンドブログが資産に?放置でアクセス急増の事例 - 3月 14, 2024