ブログ・サイト

【WordPress】カスタムフィールド名に「-(ハイフン)」を使うとエラーになる件

ブログ・サイト
この記事は約4分で読めます。

とっちゃん@nyanco! です。

WordPressにて「ACF(Advanced Custom Fields)」で作成したカスタムフィールドの内容を出力しようとしてナゾのエラーにハマったお話です。

結論としては、フィールド名(キー)に使っていた「-(ハイフン)」が原因でした。

スポンサーリンク

フィールド名に「-(ハイフン)」はNG

「hoge-t_excerpt」というカスタムフィールド名の内容をwebページに出力しようと下記のようなコードを書いたところ、

<!--【コードは一部抜粋】-->
  <p>
    <?php
    if(mb_strlen($post->hoge-t_excerpt)>60) {
      $content= mb_substr($post->hoge-t_excerpt,0,60) ;
        echo $content . '...';
      } else {
        echo $post->hoge-t_excerpt;
      }
    ?>
  </p>

ブラウザで確認すると以下のように盛大エラー表示が…

赤枠が全部エラーです ^^;

何か記述間違えしているのか?全角スペースが混じってるとか?
など、色々調べて試行錯誤してみるもエラーは解消せず。

こんな時は表示されているエラーメッセージに向き合ってみる、ということで最初の行から読んでいくと…

Warning: Use of undefined constant t_excerpt – assumed ‘t_excerpt’ (this will throw an Error in a future version of PHP) in /home/hogehoge/www/wp-content/themes/test/index.php on line 336

‘t_excerpt’ という箇所に違和感が!

「hoge-t_excerpt」というフィールド名の「hoge-」部分が省かれている

もしかして「-(ハイフン)」以前の文字列が認識されない?

と、仮説を立て「ACF」でフィールド名を「hoge-t_excerpt」から「hoge_t_excerpt」に変更し、コードも合わせて「hoge_t_excerpt」に変更してみたところ…

あっけなく解決!!

無事に「hoge_t_excerpt」の内容が表示されるようになりました。

どうも、フィールド名に「-(ハイフン)」を使うとエラーになるようです。

鉄則:フィールド名に使用する記号は「_」のみで徹底

そもそもなんで「-(ハイフン)」を使ってしまっていたのか。

なんとなく「-(ハイフン)」「_(アンダーバー)」URLでも使えるしデータベース的にも安全な記号なのでは、という思い込みがまずありました。

もうひとつは、「ACF」のフィールド編集画面にある補足説明文からです。

ここの補足説明文です

フィールド名
スペースは不可、アンダースコアとダッシュは使用可能。

アンダースコアダッシュ、どちらも知らないので調べてみると、

「アンダースコア」「アンダーバー(_)」の正式名称。
「ダッシュ」「enダッシュ」「emダッシュ」とあり、半角である「enダッシュ」は見た目が「ハイフン(-)」と全く区別がつかないという点から、「ハイフン(-)」を使ってしまっていたような気がします。

まぁでもとにかく、フィールド名に使う記号は「_(アンダーバー)」のみ!というシンプルなルールを徹底すれば、今後は同様のエラーには遭遇しないはずですね。

おわりに

最後に、エラーメッセージを見ていてもう一点気になった点を少し。

this will throw an Error in a future version of PHP

future version:未来のバージョン?という文言から、なんとなくPHPのバージョンに関わるエラーメッセージなのかな?と思い調べてみると、PHPのバージョンアップをした際に良く見るエラーメッセージのようで。

直近でPHPバージョンをアップデートはしてないので今回の直接的な原因ではないのでしょうが、覚えておこうと思いました。

本記事がどなたかの参考になれば幸いです。

今回は以上となります。
最後まで読んでいただきましてありがとうございました!
それではまた〜✧٩(ˊωˋ*)و✧

コメント