【WordPress】Advanced Custom Fieldsの挙動がおかしい時にやってみること
たまにあるけどあって欲しく無いのがエラーですが。
コードの記述の問題もないし、シンタックスエラーも出てない。
その証拠に、同じフィールドグループの別のカスタムフィールドにはしっかりと値が反映されている。
結構焦る状況です。
Advanced Custom Fields(以下、ACF)もワードプレスのプラグインなので、エラーの原因はワードプレスで起きるものとだいたい同じですが。
違う原因によって不具合が起きている場合もあります。
自分に起きたことも説明しつつ、ACFのカスタムフィールドと利用したコードが期待した動作をしてくれない場合に。
コードの修正をする前にやってみても良いことを書いておきます。
WordPressで不具合が起こるよくある理由
まずはWordPressのカスタマイズをしている場合によくある不具合の理由について、おさらいしておきましょう。
一応、ACFがメインの内容なので、カスタムフィールド絡みのみとさせていただきます。
不具合が起きる原因は、ワードプレスの設定を行ったりコードを作成したりという人間の操作によるものが多いです。
・変数のスペルミスやシンタックスエラーなどの入力間違いや入力漏れが理由で、コードが間違っている。
・カスタムフィールドの設定が間違っている。例えば、カスタムフィールドの名前が重複していたり、カスタムフィールドの設定を変更したのにコードに反映させてないなど。
このような内容であれば、エラーログを確認してコードの間違いを修正したり、var_dump()して変数の動作の確認をしたり。
設定内容を見直してみたり、カスタム投稿作成時に推奨されているパーマリンクの更新を試したり。
大体の対処方法は症状をググれば原因がはっきりし、解決できます。
しかし、自分達コードを書く側が原因ではない場合もあります。
それは、ワードプレス本体やプラグインのアップデートや、ブラウザのキャッシュの影響が原因の場合です。
WP本体の場合はアップデートされた際に、不具合が起きないようブラウザキャッシュを削除するようにアラートが出ますが。
プラグインの場合は開発者の設定によるところもあるので、出ないものもあります。
なので、ACFの挙動がおかしくて、コードや設定に問題が無い場合はブラウザのキャッシュクリアも試してみるのも良いです。
自分に起きたことをざっくりと説明
しかし、そこまでやっても改善されない場合がこの記事冒頭で書いた状態です。
自分が体験したことを簡単に説明すると・・・
カスタム投稿タイプに投稿済の条件に当てはまる投稿をループで表示したい。
→ループ内で、同じカスタムフィールドグループの同じ投稿IDに保存されているカスタムフィールドの値を取得し表示したい
→カスタムフィールドA・B・Cの値をそれぞれ取得したところ、AとCは表示されているのに、Bは表示されていない。
→ループ内で変数が違うだけで動作は同じコードで繰り返し呼び出しているので、コードが間違っていればAとCも表示されないけど、表示されている。
→変数に格納したカスタムフィールド名やフィールドキーも確認したけど、半角英数字記号すべて合っている。
→var_dump()してみたら、返しの形がなぜかIDのみになっていたので設定を確認すると、それ以外も返す方が選択されていた。(例えば、「投稿オブジェクト」が選択されていたのに「投稿ID」だけが返されているということ)
→んんんん???????
という感じです。
その直前にACFのアップデートを行っていたこともあり、それが原因かなぁと思いキャッシュクリアとかしたけど改善されず。
あれやこれやと確認したりやってみて、とりあえず改善できたので行った対処法を残しておきます。
やってみた事
ACFを使用しているコードの確認やカスタムフィールドの設定を見直し。
エラーコードやvar_dump()の対応もやり。
ブラウザのキャッシュも削除した・・・
という一通りの対処を終えた前提で進めます。
もう一つ前提があって、アップデートを反映したり、コードやカスタムフィールドの設定を変更をする前は期待通りの動作になっていた、ということです。
コードを作成した後に始めて動かして期待通りの動作にならない場合は、書いたコードに原因がある場合がほとんどなので、じっくりとコードを見直しましょう。
フィールドを開いて変更せずに保存
まずは、不具合の原因となっているカスタムフィールドの設定画面を開き、何もせずにそのまま保存します。
これだけで期待した挙動が戻ってくる場合があります。
原因ははっきりとは分からないので予測でしかありませんが。
カスタムフィールドの内容を変更したり、設定を変更したり。
またはACFのアップデートが行われると、保存していた内容が変わってしまう場合があるのかなと。
ACFを動かしているJSとの兼ね合いでありえなくも無いかと。
返り値を他の項目にチェックして戻して保存
フィールドを開いて保存するだけで改善が見られない場合で、「投稿オブジェクト」などの返り値を指定するフィールドタイプの場合。
フィールド設定を開いて、一度違う返り値を選択し、一呼吸おいてから目的の返り値を選択して保存してみて下さい。
これだけでも期待した挙動に戻ることも。
これも原因はそのまま保存する場合と同じくなにかのタイミングで、保存していた内容が変わってしまったんだと思います。
ただ、この場合はvar_dump()すると返り値が指定したもので返されていない場合もあるので、その時点で気付くかもしれません。
まさに自分に起きた状況で、最初に異変に気がついたのがvar_dump()で返り値を確認していた時です。
そこでコードに原因があると思っていじってしまい、何も変わらずに沼ってましたw
で、なんとなくこの返り値の指定を一旦変更し、元に戻してみたところ。
改善されました。
ホッとしたものの、なんで?とw
不具合対処は落ち着いて
と、内容としては少し肩透かしのようなものとなりますが、コードを変更する前にやってみる価値はあるかなと。
実際、ACFの不具合の対処でコードを調整するような情報はあっても、こういうのはあまり見かけなかったので、記事にすることにしました。
最初はコードの問題だと思い、ChatGPTやプログラミング系の生成AIに聞こうとしたんですが。
文字化が難しくてプロンプトにできないなぁと。
自分の言語化能力が低いだけかもしれませんがw
なので、考えられる原因を潰してった結果、操作としては単純な方法で解決できたのです。
問題の原因は意外と単純・・・ということはよくあることです。
落ち着いて、一つずつ可能性を潰しましょう。