ACFのオブジェクトの返り値を使って一覧を出したい
アドバンスドカスタムフィールドを使って、記事と別のタクソノミーを連携した際にの記事一覧の出し方について、当たった問題と解決策を書いてきます。
フィールド設定をタームIDにした時
タームIDを使用した際の記事一覧は、
$args = array(
'meta_query' => array(
array(
'compare' => 'LIKE',
'key' => "acf_taxonomy" // 設定したキー
'value' => 41 // 取得したい値
)
)
);
で取得できます。
フィールド設定をオブジェクトにした時
タームIDをオブジェクトにした際、設定したのフィールド名をacf_taxonomy
とすると、
ここに入っている値はWP_Terms
というオブジェクトが配列で入っています。
ですので、タームIDと同じようにはいきません。
オブジェクトで入っていると説明をしましたが、
記事に入っている情報acf_taxonomy
の中身をみてみると
'a:6:{i:0;s:2:"41";i:1;s:2:"56";i:2;s:2:"74";i:3;s:1:"2";i:4;s:1:"4";i:5;s:1:"3";}'
みたいな感じで入っています。
このダブルコーテーションで囲まれてる"41"
などが、オブジェクトのterm_idになります。
なので、この文字列に「取得したいIDが、ダブルコーテーションで囲まれて入っていれば取得」という形を取ります。
$args = array(
'meta_query' => array(
array(
'compare' => 'LIKE',
'key' => "acf_taxonomy"
'value' => '"41"' // "41"という文字列を探す
)
)
);
これで特定の値をもった記事を探す事ができます。
もしかしたらタクソノミーだけでなく、投稿とかでもつかえるかも・・・(要検証)
ACFでつまったら
たまに検索しても解決策が見つからない場合があります。
その際、
var_dump( get_post_meta($post->ID,) );
を記事が出力される箇所にいれて、
どのフィールドがどのように入っているのかをみてみると、もしかしたら解決できるかも・・・!