2026年5月28日
2026年5月28日
Parse error: syntax error とは?WordPress での直し方|unexpected token の読み方と管理画面に入れないときの復旧手順
「Parse error: syntax error, unexpected ...」は、PHPファイルの書き方に誤りがあり、PHPがファイルを読み込む段階で止まっていることを示すエラーです。直すには、エラーに表示されたファイルの該当行付近を修正するか、直前に加えた変更を元に戻します。管理画面に入れなくなっていても、FTP・ファイルマネージャー・WP-CLIのどれかでファイルを直接触れば復旧できます。この記事では、メッセージの読み方、原因の探し方、状況別の復旧手順、再発を防ぐ編集の仕方を説明します。
メッセージから場所を特定する
エラーは次のような形で表示されるか、サーバーのエラーログに記録されます。
PHP Parse error: syntax error, unexpected token "}", expecting ";" in /var/www/html/wp-content/themes/my-child/functions.php on line 42
読み取るべきなのは3点です。
- ファイルパス:どのファイルに誤りがあるか。
themes/ならテーマ、plugins/ならプラグイン、wp-config.phpなら設定ファイルです。 - 行番号:PHPが誤りに気づいた行です。実際の誤りはその直前の行にあることがよくあります。たとえば41行目の末尾のセミコロンが抜けていると、PHPは42行目の先頭で初めて不自然さに気づきます。
- unexpected の後ろ:PHPが想定していなかった記号や語です。PHP 8では
unexpected token "}"、PHP 7ではunexpected '}'のように表記が少し異なります。
画面が真っ白になってメッセージが見えない場合は、サーバーのエラーログを確認します。レンタルサーバーではコントロールパネルにエラーログの閲覧機能があることが多く、VPSならApacheやNginx、PHP-FPMのログに記録されています。
よくある原因とメッセージの対応
セミコロンや括弧の閉じ忘れ
もっとも多い原因です。unexpected token "..."、expecting ";" のように出る場合は、表示された行とその前の行の文末を確認します。unexpected end of file と出る場合は、どこかで { に対応する } が足りず、ファイルの最後まで読んでしまった状態です。関数やif文を追加した箇所の括弧の対応を数えてください。
ネット上のコードをコピーしたときの混入
ブログや資料からコードをコピーすると、次のような文字が紛れ込むことがあります。
- 引用符が
“ ”や‘ ’のような装飾付きの文字に変わっている - 全角スペースや全角の記号(
;()が入っている - 見た目では分からない制御文字が入っている
見た目では正しく見えるため、気づきにくい原因です。エディターで不可視文字を表示する設定にするか、該当行を手で打ち直すと解消します。
functions.php に <?php を重ねて書いた
functions.php はすでに先頭の <?php でPHPのコードとして読まれています。途中に追加するコードの先頭に、もう一度 <?php を付けて貼り付けると、unexpected token "<" のようなエラーになります。追加するコードからは <?php を外して貼り付けます。
PHPのバージョンに合わない書き方
?->(nullsafe演算子)や match 式はPHP 8.0以降、enum はPHP 8.1以降の構文です。新しいPHPを前提に作られたプラグインやテーマを古いPHPで動かすと、構文として解釈できずにParse errorになります(2026年10月現在、WordPressの推奨はPHP 8系です)。サーバーのPHPバージョンを下げた直後や、古いサーバーに移転した直後にこのエラーが出た場合は、まずバージョンの違いを疑ってください。
管理画面に入れる場合
致命的なエラーが起きると、WordPress 5.2以降では「このサイトで重大なエラーが発生しました」と表示され、サイト管理者のメールアドレスにリカバリーモードへのリンクが届きます。リンクから入ると、原因のプラグインやテーマを一時停止した状態で管理画面を開けるので、そのまま無効化したり、更新したりできます。
ただし、wp-config.php の誤りはWordPressの読み込みより前に起きるため、この仕組みは働きません。後述のFTPやファイルマネージャーで直します。
FTP・ファイルマネージャーで直す
管理画面に入れない場合の基本の手順です。どの作業でも、編集前にファイルのコピーを手元に保存しておきます。
- FTP/SFTPクライアントか、レンタルサーバーのファイルマネージャーで、エラーに表示されたファイルを開く
- 直前に追加・変更した部分があれば、その部分を削除して元の状態に戻す
- 変更箇所が分からなければ、表示された行番号とその前後を確認して修正する
- 保存してサイトを再読み込みし、表示が戻ったか確認する
修正箇所が見つからない場合は、原因のプラグインやテーマを止めて、まずサイトを表示させます。
- プラグインが原因:
wp-content/plugins/の中の該当フォルダ名を変更します(例:example-pluginをexample-plugin-offに)。WordPressはそのプラグインを読み込まなくなります。 - テーマが原因:
wp-content/themes/の該当フォルダ名を変更します。ほかにインストール済みのテーマがあれば、WordPressはそちらに切り替えて表示します。デフォルトテーマが残っていないと表示できないことがあるので、デフォルトテーマは削除せずに置いておくのが安全です。
WP-CLIで直す
SSHで入れるなら、作業はさらに速くなります。原因のプラグインやテーマを読み込んだままだとWP-CLI自体も同じエラーで止まるため、--skip-plugins や --skip-themes を付けて実行します。
# 構文チェック(誤りがあれば行番号付きで表示される)
php -l wp-content/themes/my-child/functions.php
# テーマ内のPHPファイルをまとめてチェックし、問題のあるものだけ表示
find wp-content/themes/my-child -name '*.php' -print0 | xargs -0 -n1 php -l | grep -v '^No syntax errors'
# 原因のプラグインを無効化(プラグインを読み込まずに実行)
wp plugin deactivate example-plugin --skip-plugins
# 原因のテーマから既定テーマへ切り替え(テーマを読み込まずに実行)
wp theme activate twentytwentyfive --skip-themes
php -l はコマンドライン用のPHPで構文を確認するため、Webで動いているPHPとバージョンが違うと結果が変わることがあります。php -v とサイトヘルスに表示されるPHPのバージョンが一致しているかも確認しておくと、前述のバージョン違いによるエラーを見落としません。
エラーログで詳細を確認する
Parse errorの内容をログに残したい場合は、wp-config.php の /* 編集が必要なのはここまでです */ より上に次を書きます。
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true ); // wp-content/debug.log に記録
define( 'WP_DEBUG_DISPLAY', false ); // 訪問者の画面には表示しない
記録は wp-content/debug.log に追記されます。本番サイトでは画面に表示しない設定にし、調査が終わったら WP_DEBUG を false に戻してください。debug.log は外部から読めるとファイルパスなどの情報が漏れるため、調査後は削除するか、Webから読めない場所に記録先を変えます。なお、wp-config.php 自体にParse errorがある場合はこの設定も読まれないので、サーバーのエラーログを見ます。
再発を防ぐ編集の仕方
Parse errorの多くは、本番サイトのファイルを直接編集したときに起きます。次の運用にすると、同じ事故を防ぎやすくなります。
- 親テーマの
functions.phpではなく、子テーマか、コードスニペット管理用のプラグインにコードを追加する。親テーマは更新で上書きされるうえ、誤りがあったときの影響も大きくなります。 - 管理画面のテーマ・プラグインファイルエディターは、保存時にループバックで致命的エラーを検査し、問題があれば変更を戻します。ただしBasic認証などでループバックが失敗する環境では使えないため、頼り切らずに使う前のバックアップを習慣にします。
- 手元のエディターで書き、
php -lで構文を確認してからアップロードする。PHPに対応したエディターなら、保存前に括弧の対応や構文の誤りが表示されます。 - ステージング環境で動作を確認してから本番に反映する。
ファイルの末尾にある ?> の後ろに空行やスペースがあると「Cannot modify header information - headers already sent」という別のエラーになります。PHPだけのファイルでは、末尾の ?> は書かないのが一般的です。
まとめ
- Parse errorはPHPの書き方の誤り。メッセージのファイルパスと行番号を見て、その行と直前の行を確認する
unexpected end of fileは括弧の閉じ忘れ、コピーしたコードでは装飾付きの引用符や全角文字の混入を疑う- 管理画面に入れなければ、FTPやファイルマネージャーで変更を戻すか、該当プラグイン・テーマのフォルダ名を変える
- WP-CLIでは
--skip-plugins・--skip-themesを付けて無効化し、php -lで構文を確認する - 本番の直接編集を避け、子テーマ・ステージング・バックアップで再発を防ぐ