ACFのRepeaterかFlexible Contentをお使いですか?
それなら『have_rows』に対応するのは『get_sub_field』ではないでしょうか。
whileやforeachなどを使用しないで取得
これは難しいのではないかと思います。
x743様
ご回答ありがとうございましす。
ACFのPro版を使っています。
それなら『have_rows』に対応するのは『get_sub_field』ではないでしょうか。
これは難しいのではないかと思います。
やっぱりそうですよね。
ひょっとしたら「array_xxx()」とか使ってできないかななんと思ってしまいました。
ループを使用しますの、どうしても自分の中で
流れが美しくないと感じてしまして(めんどくさいのもあります。。。)
結果としては表示されてるのですが
模索しております。
phpのバージョン依存になりますが
$meta_keywords = array_map(function($custom_field_value) {
return $custom_field_value['meta-keyword'];
}, $ky);
をimplodeでつないでやればいけなくもないです。
クロージャが使えなければ別関数用意してevalみたいなので。
ただパッと見で分かりにくいのでループで回したほうがやはりいいかと思います。
jdbb様
ご回答ありがとうございます。
たとえばなんですけど
最終ときには、下の感じにしたいのですが可能なものでしょうか。
$keyword = sub_field1,sub_field2,sub_field3,・・・・・・・・
恐れ入ります、よろしくお願い致します。
jdbbさんの提案を少し変更して
$keyword = implode(',', array_map('current', $ky));
これでもいけると思います。
実際はDBを直接説叩けばループを使用しないでRepeaterなどの値を取得することは出来るかと思います。
$fields = $wpdb->get_results($wpdb->prepare("SELECT meta_value FROM $wpdb->postmeta WHERE post_id = %d AND meta_key LIKE %s", $post_id, $field_key), ARRAY_N);
これを前述のimplodeで繋げば同じような出力になりますし、
$fields = $wpdb->get_row($wpdb->prepare("SELECT group_concat(meta_value separator ',') AS meta_value FROM $wpdb->postmeta WHERE post_id = %d AND meta_key LIKE %s", $post_id, $field_key), OBJECT);
いっそのことgroup_concatで繋げちゃってもいいと思います。
Repeaterなどのmeta_keyは{リピーターフィルド名}_{オフセット}_{サブフィールド名}などというようにフォーマットが決まっていますので、それに合わせてLIKEで探索させるという感じです。
とは言え、美しさなら、Wordpress関数に合わせた仕様になっているhave_rows, the_row, get_sub_fieldのマニュアル通りの組み合わせで取得や結合をしていくのがベターだと思います。
$ky[0][‘meta-keyword’]
最初に示されたような形式で値が取得できているのなら、foreachで回してカンマをくっつければいいのではないでしょうか(implodeで繋げてもいいと思います)。
jdbb様
x743様
いろいろとありがとうございます。
なるほどです。
色々と勉強させて頂きました。
本当にありがとうございました。