サポート » プラグイン » Advanced Custom FieldsのRepeater Fieldの値で絞り込みを簡素に書く方法

  • 解決済 saki-saki

    (@saki-saki)



    いつもお世話になっております。

    記事投稿の著者をACFのRepeater Fieldを使って登録しています。
    Repeaterフィールド名:repeat_author
    サブフィールド名 :repeat_author_item
    サブフィールドのフィールドタイプには、ユーザーを選択しております。

    例(登録記事)
    著者:ユーザー01
    著者:ユーザー02

    ここから本題です。
    ACFのRepeater Fieldを使った記事の絞り込みを実装しました。
    Repeater Fieldの登録情報をデータベースで見たら

    
    repeat_author_0_repeat_author_item
    repeat_author_1_repeat_author_item
    

    上記のように追加した個数が数字で登録されていました。
    ですので、絞り込みの際は

    
    $args = array(
        'meta_query' => array(
            array(
                'key' => 'repeat_author_0_repeat_author_item',
                'value' => $value
            ),
            array(
                'key' => 'repeat_author_1_repeat_author_item',
                'value' => $value
            ),
            'relation'=>'OR',
        )
    );
    $the_query = new WP_Query( $args );
    

    と記述すれば絞り込みが可能ということはわかりましたが、
    repeat_author_0_repeat_author_itemの数字部分を予め数個用意して書く方法以外に
    きれいに書く方法はありますでしょうか?

    
    array(
        'key' => 'repeat_author_0_repeat_author_item',
        'value' => $value
    )
    

    の部分をfor文で予め5個程度用意して、呼び出してあげてもいいのですが。。。

    なにかもっと簡潔orきれいに各方法があればご教授していただければ幸いです。
    宜しくおねがいします。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • こんにちは

    キーでワイルドカード(%)を指定できるようにする方法はどうでしょうか?

    $args = array(
    	'wildcard_meta_key' => true,
    	'meta_query' => array(
    		array(
    			'key' => 'repeat_author_%_repeat_author_item',
    			'value' => $value
    		)
    	)
    );

    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 );

    ishitaka様
    いつもご回答していただき、ありがとうございます。

    自分でも調べていたところ、同じように%で書いてある記事もあったのですが
    ワイルドカードというものなのですね。
    大変勉強になりました。

    こ教示されたコードの通り、ワイルドカードを使用し、functions.php記述したところ
    無事に記事を持ってくることができました。

    ありがとうございました。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • このトピックに返信するにはログインが必要です。