2022.10.28 システム
【Advanced Custom Fields Pro】繰り返しフィールドの中のGroupフィールドの中のフィールドで絞り込みがしたい
こんにちは。
最近諸事情があり一生分のココスに行って体重が増えたWebクリエイターです。
先日、WordPressプラグイン「Advanced Custom Fields Pro」の
「繰り返しフィールドの中のGroupフィールドの中のフィールド」
で絞り込みをしたい!という場面がありました。
※繰り返しフィールドは「Advanced Custom Fields Pro」でのみ利用可能
ということで、今回はこちらの実装方法について紹介したいと思います。
ソースコード
忙しい人のためにまずはコードをお見せします。
コード内は、
繰り返しフィールド名:repeater
Groupフィールド名 :group
テキストフィールド名:text
としていますので、ご自身で設定しているものに変換してお使いください。
呼び出し側
<?php
$args = array(
'post_type' => 'posttype', //投稿タイプ
'posts_per_page' => -1, //表示件数
//カスタムフィールドで絞りこみ
'meta_query' => array(
array(
'key' => 'repeater_$_group_text', //絞り込むフィールド名
'value' => 'りんご', //絞り込む値
'type' => 'CHAR', //文字列で検索
'compare' => 'LIKE'
),
),
);
$the_query = new WP_Query($args);
if($the_query->have_posts()){
?>
<ul>
<?php
while($the_query->have_posts()){
$the_query->the_post();
?>
<li><?php the_title(); ?></li>
<?php } ?>
</ul>
<?php
}
wp_reset_postdata();
? >
functions.php
function replace_acf( $where ) {
$where = str_replace( "meta_key = 'repeater_$", "meta_key LIKE 'repeater_%", $where );
return $where;
}
add_filter( 'posts_where', 'replace_acf' );
解説
WordPress管理画面
管理画面は以下のような形を想定しています。
上記のテキストフィールドで「りんご」の値を持つ投稿を絞り込んでいきます。
WP_Queryで絞り込み
絞り込みにはWP_Queryを利用します。
ここでポイントとなるのがmeta_query内で指定するフィールドキーです。
'key' => 'repeater_$_group_text', //絞り込むフィールド名
フィールドキーは「[繰り返しフィールド名]_$_[Groupフィールド名]_[Groupフィールド内フィールド名]」という構造で指定します。
1つずつ見ていきましょう。
Groupフィールドの取得は、シンプルにアンダースコア同士で繋げます。
これはいくつ入れ子になっても同様なので、
「Groupフィールド01>Groupフィールド02>子フィールド」という二重入れ子構造の場合は
「[Groupフィールド01]_[Groupフィールド02]_[子フィールド]」といった形で記載します。
繰り返しフィールドのキーは、「repeater_0」「repeater_1」のように、フィールド名の後に行番号が付与されます。
行数は投稿によって異なるため、固定数値での指定はできません。
このため、繰り返しフィールドすべてを検索対象にするには、「repeater_$」のように行番号にあたる部分を正規表現(ワイルドカード)で指定する必要があります。
posts_whereで繰り返しフィールドの検索
functions.php内でposts_whereフックを利用して、細かい検索条件を指定することができます。
WP_Queryで呼び出しているSQL文に対し、正規表現を用いて「repeater_%」で全文検索をするようにします。
(SQLのワイルドカード文字は「%」)
$where = str_replace( "meta_key = 'repeater_$", "meta_key LIKE 'repeater_%", $where );
これはカスタムクエリと呼ばれ、今回のように複雑なものや細かい検索条件を指定することができる優れものです。
今回詳しく解説はしませんが、気になる方は調べてみてください。
あとは、お好きなように表示の調整をしてもらえば完璧です。
いかがでしたでしょうか。
利用する機会としてはさほど多くないかと思いますが、何かの参考になれば幸いです。
多機能なサイトを作りたい!という方はぜひお問い合わせください。
それでは。