Advanced Custom Fields Pro(ACF PRO)の繰り返しフィールドの値で絞り込んだ記事一覧を取得する方法

Advanced Custom Fields Pro(ACF PRO)の繰り返しフィールドの値で絞り込んだ記事一覧を取得する方法

Advanced Custom Fields Pro(ACF PRO)の繰り返しフィールドの値で絞り込んだ記事一覧を取得する方法

Advanced Custom Fields Pro(ACF PRO)を導入している際に、繰り返しフィールドの値で記事を絞り込みたいこともあると思います。

繰り返しフィールドの値で絞り込みたい時は少々クセがあるので、絞り込み方法をご紹介したいと思います。

ACF PROの繰り返しフィールドの値で絞り込んだ記事一覧を取得する方法

前提として、WP_Queryで記事一覧を取得するものとします。また、繰り返しフィールドのフィールド名は「author」、サブフィールド名を「subauthor」としています。

2パターンの方法がありますので、それぞれご紹介します。

パターン1. 複数の繰り返しフィールドに対応した方法

※この方法はフォーラムの「Advanced Custom FieldsのRepeater Fieldの値で絞り込みを簡素に書く方法」で回答されていた方法を参考にしたものです。

meta_keyの絞り込みにワイルドカードを使えるようにして、繰り返しフィールドの値で記事一覧を絞り込む方法です。

まずは適用しているテーマのfunctions.phpに以下を追記します。

function my_posts_where_wildcard($where, $query) {
  if ($query->get('wildcard_meta_key')) {
    $where = str_replace('meta_key =', 'meta_key LIKE', $where);
  }
  return $where;
}
add_filter('posts_where', 'my_posts_where_wildcard', 10, 2);

WP_Queryで記事一覧を取得する際に、パラメータに「’wildcard_meta_key’ => true,」を追加し、meta_queryのkeyで「author_%_subauthor(繰り返しフィールドのフィールド名_%_サブフィールド名)」を指定して絞り込みます。

$args = array(
  'paged' => $paged,
  'posts_per_page' => 10,
  'post_type' => 'book',
  'post_status' => 'publish',
  'wildcard_meta_key' => true,
  'meta_query' => array(
    array(
      'key' => 'author_%_subauthor',
      'compare' => 'LIKE',
      'value' => 'tanaka',
    )
  )
);
$wp_query = new WP_Query($args);

keyを変えることで色んな繰り返しフィールドに対応できます。

パターン2. 特定の繰り返しフィールドのみに対応した方法

※この方法は100ウェブさんの「アドバンストカスタムフィールドの「繰り返しフィールド:repeater field」の値を条件に投稿を取得する」を参考にさせていただきました。

パターン1ではwildcard_meta_keyを使うことで他の繰り返しフィールドでも絞り込みが可能ですが、パターン2は特定の繰り返しフィールドのみに対応したやり方です。

まずは適用しているテーマのfunctions.phpに以下を追加します。パターン1と原理は同じですが、meta_keyを指定することで特定の繰り返しフィールドのみがワイルドカード利用の対象になり、WP_Queryで絞り込む時にwildcard_meta_keyのようなパラメータを追加する必要がありません。

function my_author_posts_where($where) {
  $where = str_replace("meta_key = 'author_$", "meta_key LIKE 'author_%", $where);
  return $where;
}
add_filter('posts_where', 'my_author_posts_where');

WP_Queryのパラメータ指定は以下のようにします。meta_queryのkeyに「繰り返しフィールドのフィールド名_$_サブフィールド名」を指定することで、繰り返しフィールドの値によって記事を絞り込めます。

$args = array(
  'paged' => $paged,
  'posts_per_page' => 10,
  'post_type' => 'book',
  'post_status' => 'publish',
  'meta_query' => array(
    array(
      'key' => 'author_$_subauthor',
      'compare' => 'LIKE',
      'value' => 'tanaka',
    )
  )
);
$wp_query = new WP_Query($args);

あとがき

あえて1つのフィールドのみに固定することもないと思いますので、パターン1の方が柔軟性があって良さそうですね。

ACF PROを使っていて、繰り返しフィールドの値で記事一覧を絞り込みたい時はぜひお試しください。

この記事が気に入ったら
いいね!してね♪

Twitter で

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です