WordPressのカスタムフィールドを便利に使えるようにしてくれる至高のプラグイン「Advanced Custom Fields」。
このプラグインの上位版「Advanced Custom Fields Pro」にはユーザーが任意にカスタムフィールドの数を増減したり並び替えたりできるようにする「Repeater Fields」機能が備わっています。
(詳細は「Advanced Custom Fields : Repeater Fieldの出力例」)
とあるお仕事で「Repeater Fields」のサブフィールドを使ったクエリを組み立てる必要があったので、その覚書です。
下記2点が今回の仕様:
- カスタム投稿「PEOPLE」の投稿詳細ページに、カスタム投稿「PUBLICATIONS」の投稿を「WP_Query」で出力したい
- カスタム投稿「PUBLICATIONS」の投稿がもつRepeater Fields「authors」のサブフィールド「authors_name」とカスタム投稿「PEOPLE」の投稿がもつカスタムフィールド「name2」が「完全一致」するものだけ出力したい
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
$authors = get_field('name2'); if($authors || $authors2){ function my_posts_where($where){ $where = str_replace("meta_key = 'authors_$", "meta_key LIKE 'authors_%", $where); return $where; } add_filter('posts_where', 'my_posts_where'); $authors_args = array( 'numberposts' => -1, 'post_type' => 'publications', 'meta_query' => array( 'relation' => 'AND', array( 'key' => 'authors_$_name', 'compare' => '=', 'value' => $authors, ), ) ); $post_loop = new WP_Query($authors_args); //ここからいつものループ }//endif |