とっちゃん@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バージョンをアップデートはしてないので今回の直接的な原因ではないのでしょうが、覚えておこうと思いました。
本記事がどなたかの参考になれば幸いです。
今回は以上となります。
最後まで読んでいただきましてありがとうございました!
それではまた〜✧٩(ˊωˋ*)و✧
コメント