今回はWordPressのカスタムフィールドがなぜか出力されない場合に考えられる原因と対処法を解説します。
対処法1.記事を更新する
途中から新しいフィールドを用意した場合などは記事編集画面でそのフィールドの値を設定しないと表示されません。
新しく用意したフィールドは値が入ってないので表示されないのは当たり前なのですが、注意しないといけないのはデフォルト値を設定したとしても一度記事を更新しないと反映されないという点です。ここが一番の引っかかりポイント。
ラジオボタンやチェックボックスはデフォルト値が設定できるので設定したら勝手に値が表示されると思いがちですが、そんなことはないみたいです。
また、フィールド名やラジオボタンなどのフィールドの値を変更した場合も記事を更新しないと反映されません。なので最初によく考えて後々手戻りが発生しないように名前や選択肢を決めるのが大事ですね。
ちなみにWordPressには記事を一括更新する機能がデフォルトで備わっていますが、それを使って記事を更新してもデフォルト値は反映されません。
面倒ですが1記事ずつ編集画面に入って更新していくしかないっぽいです。もしかしたら他に方法があるかもしれないですが僕が知る限りではわかりませんでした。
対処法2.ループ処理の中で使う
カスタムフィールドはループ処理の中で使わないと値がうまく表示されません。
そもそもカスタムフィールドは特定の投稿タイプなどの条件の中で表示されるものなので、ループ処理の外側に書いたところで記事ごとのフィールドの値を表示するようなことはできないわけです。
get_field()
やthe_field()
でカスタムフィールドの値を出力したいならサブループの中で投稿タイプなどを絞って出力すればokです。
サブループの作り方は以下の記事で解説しているので詳しく知りたい方は以下のリンクからどうぞ。
>>WordPressでサブループを作る方法!メインループとの違いは?
対処法3.ACFのバージョン問題
僕はまだ遭遇したことはないですが、ACF(Advanced Custom Fields)を使っているとバージョンの関係でおかしくなることもあるみたいです。
基本的に最新の状態にしておけば問題ないとは思いますが、少し前に作ったサイトの保守でACFのバージョンを最新にしたらうまく表示されなくなったみたいな事があるかもしれないので、ACFのバージョンのせいで表示がおかしくなることがあるというのも知っておくといいと思います。
対処法4.その他のプラグインとの干渉
これもACFを使っている場合ですが、他のプラグインと干渉して表示がおかしくなる可能性も無きにしもあらずです。
これは地道にプラグインをオフにしていって干渉しているプラグインを特定するしかないので、面倒ですが手作業で頑張る必要がありそうです。
まあACFが他のプラグインと干渉すること自体ほぼないと思いますが、少し古いサイトで新しいバージョンと古いバージョンのプラグインをごちゃまぜに使っていると起こるかもしれませんね。
まとめ
表示されない原因としてデフォルト値を設定しても記事を更新しないとダメという点と、ループ処理の中で使わないとダメという2つが結構多いと思います。というか僕はここでハマりました。
解決策自体はシンプルなので頭の中に入れておくといいと思います。