プチIT化 PR

【WordPress】php.functionでsyntax errorが出る原因とは

記事内に商品プロモーションを含む場合があります。
当サイトは、アフィリエイト広告を利用しています。

こんにちは!今回の記事は、phpでショートコードを作成しようとfunction.phpを編集して更新しようとしたところ、syntaxエラーというが出た時にどう対処すれば良いか?という記事になります。

WordPressの外観>テーマから編集できる[function.php]というファイルを更新しようとしたところ以下のエラーが出ました。
syntax error, unexpected identifier画面

syntax error, unexpected identifier " return"

このエラー、過去にもたまに出たりしたのですが何をやったか分からないが解決した…ということがありました。ただ、再発時にしっかり対応できるよう、原因を徹底的に調べてみました。

記事を全部読みたくない、結論だけ先にという方もいらっしゃるかと思うので、結論を先に述べておきますね。

ただのスペース(空白)と思っていたら特殊なスペース(NBSP)が入っていたのが原因でした!

本記事では詳しく解説していきますね。テーマはCocoonを利用しているので、画面や操作方法がCocoon寄りな記事になっている箇所もあるかもしれませんが、ご了承ください。それでは、いってみましょう!

Syntax errorの原因

今回のエラーはこちら。(冒頭の再掲です。)

syntax error, unexpected identifier " return"

このエラーを少しずつ読み解いていきましょう!

ますSyntax Errorとは何か

拙い英語で直訳してみると、「構文エラーだよ、returnのところに予期しない識別子が入っているみたい」とのこと。

Syntaxとは日本語だと「構文」という意味です。構文エラーということで、関数の使い方などが間違っているのか?と疑いました。

原因:スペースがノーブレークスペース(NBSP)となっていた

エラーが発生していた行のreturnの前にスペースがあったのですが、これが通常のスペースではなくノーブレークスペース(NBSP)という特殊なスペースで、Wordpressで扱えない文字であることが原因でした。returnの前のノーブレークスペースを削除したところ、無事に更新できました!

画面上は一見同じに見えるスペースですが、いくつか種類があるようです。テキストエディタで見てみましょう。ノーブレークスペースの所にカーソルを持っていくと「U+00A0」と表示されていました。※ちなみにエラーが出ずに更新できたスペースは「20」と表示されていました。

コード:00A0のノーブレークスペース

「U+00A0」はノーブレークスペース(NBSP)というスペースで、スペースの間で改行ができないようにするための特別なスペースとなります。このノーブレークスペースがエディタの中で使われていたため、構文が理解できないというエラーが出ていたという訳です。

対処:構文を再度チェック

該当行を確認

syntax error, unexpected identifier画面

このように、*****ファイル〇行目エラーのためという記述があるので、その対象行をエラーから確認します。上記画像の場合は、44行目になりますね。

該当行をしっかりチェック

Syntax errorの対処方法としては、そのエラー内容の通り該当行の文をよくチェックしてみましょう。

  • スペースを一度削除(特殊なスペースが入っている可能性)
  • 文を全て打ち直してみる

同じ原因であれば、解消できるかと思います。ダメ元でやってみてください。タダなので(笑)Webページなどからコピーしてくる時は思わぬ文字コードでコピーしてきてしまう事もあるので、注意が必要ですね。(自戒)

実例で紹介

今回編集していたphpコード

エラーが出た当時、このようなコードを記載していました。

///* 記事更新から一定日数経過した場合にメッセージ表示 */
function shortcode_since_message() {
   return the_modified_time('F j, Y');
}
add_shortcode('since_message', 'shortcode_since_message');

このショートコードを作成している時は、the_modified_timeという関数の使い方を調べながら、コピーペーストしながらの作業でした。

構文に問題があるということで、関数の使い方や関数名の文字列をひとつひとつ確認しました。ですが、

わたあめ
わたあめ
構文や単語は間違ってない…!

という思いが芽生えました。何度も何度も見直して理解してだったので。ですので、別の所に原因があるのだと睨み、空白(スペース)が原因だとたどりつきました。

さいごに

さいごまでお読みいただき、ありがとうございました。少しでも参考になる記事であれば幸いです。それでは、また!