WordPressの「Advanced Custom Field(ACF)」を便利に使っている。
その中に「関連(relationship)」というカスタムフィールドがあり、記事に別の投稿オブジェクトや投稿IDをひもづけることができる。
で、少々複雑なのだが、「自分自身に紐付けられている投稿」をリストしたい。
つまり、記事Bが記事Aを関連に持ち、記事Cも記事Aを関連に持っている時に、記事Aに「この投稿に関連付けられた記事リスト」を付けたい。
本来なら記事Aに「記事B」「記事C」を関連づければ済む話なのだが、まあちょっと事情があって。
目次
環境
- WordPress 4.9.8
- Advanced Custom Fields5.7.12
苦労した点
compare
にLIKE
を指定する。これはどうやら関連フィールドが配列でIDを持っていることと関係あるらしい。
php - wordpress handle ACF custom fields of type relationship with WP_Query - Stack Overflow
追記
53と253が混同されるケースに遭遇したので調べたら、そのものズバリ公式サイトにあった。
'value' => '"' . get_the_ID() . '"', // matches exactly "123", not just 123. This prevents a match for "1234"
コード
<!-- ▼ココカラ リスト--> <?php $args = array( 'posts_per_page' => '99', 'meta_key' => 'display_order', 'orderby' => 'meta_value_num', 'order' => 'ASC', 'meta_query' => array( array( 'key' => 'some_field_name', 'value' => '"' . get_the_ID() . '"', 'compare' => 'LIKE', ), ), ); ?> <?php $my_query = new WP_Query( $args ); ?> <?php if($my_query->have_posts()):?> <ul> <?php while ( $my_query->have_posts() ) : $my_query->the_post(); ?> <li> <span><?php the_title()?></span> <span><?php the_author(); ?></span> </li> <?php endwhile; ?> </ul> <?php endif; wp_reset_postdata(); ?> <!-- ▲ココマデ リスト-->