Because We Love Happy Coding

フリーライターからエンジニア × 講師。発信力だけあり余ってる感じ

WP_Queryでカスタムフィールドの「関連」を呼び出す

今日もまたコーディング。だって僕らはHappy Codingが大好きだから。

WordPressの「Advanced Custom Field(ACF)」を便利に使っている。

その中に「関連(relationship)」というカスタムフィールドがあり、記事に別の投稿オブジェクトや投稿IDをひもづけることができる。

で、少々複雑なのだが、「自分自身に紐付けられている投稿」をリストしたい。

つまり、記事Bが記事Aを関連に持ち、記事Cも記事Aを関連に持っている時に、記事Aに「この投稿に関連付けられた記事リスト」を付けたい。

本来なら記事Aに「記事B」「記事C」を関連づければ済む話なのだが、まあちょっと事情があって。

目次

環境

  • WordPress 4.9.8
  • Advanced Custom Fields5.7.12

苦労した点

compareLIKEを指定する。これはどうやら関連フィールドが配列でIDを持っていることと関係あるらしい。

php - wordpress handle ACF custom fields of type relationship with WP_Query - Stack Overflow

ACF | Relationship

追記

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(); ?>
<!-- ▲ココマデ リスト-->

参考記事