誰かのためにデザインをして、なにかを作る。
そうして過ごす時間が好きです。

【ACF】投稿オブジェクトとして登録されたカスタム投稿から、登録した記事を一覧表示する

【ACF】投稿オブジェクトとして登録されたカスタム投稿から、登録した記事を一覧表示する

今回やりたかった事

  1. 【A】というカスタム投稿が存在
  2. 【B】という別のカスタム投稿のうち【B-1】【B-2】【B-3】という記事で、カスタム投稿【A】の記事【A-1】をACFのカスタムフィールド【投稿オブジェクト】として登録
  3. 【A-1】の個別ページにて、【A-1】を紐付けている【B】の記事を表示させたい

タグやカスタムタクソノミーの使用を考えたりもしましたが、できるだけ投稿時の作業をシンプルにしたくこのような仕様を検討しました。

一覧表示させるコード

<?php
    $post_id = $post->ID; //現在表示している記事のIDを取得
    $posts = get_posts(array(
        'posts_per_page'    => -1, //全表示
        'post_type'         => 'カスタム投稿名',
        'meta_key'      => 'カスタム投稿Bで使用しているカスタムフィールド名',
        'meta_value'    => $post_id,
        'meta_compare' => 'LIKE'
    ));
if( $posts ): ?>
<ul>
    <?php foreach( $posts as $post ):
    setup_postdata( $post ); ?>
    <li>
        <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
    </li>
    <?php endforeach; ?>
</ul>
<?php wp_reset_postdata(); ?>
<?php endif; ?>

サブフィールドを使用している場合

繰り返しやグループなどを使用し、対象のカスタムフィールドがサブ要素になっている場合は、カスタムフィールド名を下記のように指定します。

親カスタムフィールド名_0_サブカスタムフィールド名
<?php
    $post_id = $post->ID; //現在表示している記事のIDを取得
    $posts = get_posts(array(
        'posts_per_page'    => -1, //全表示
        'post_type'         => 'カスタム投稿名',
        'meta_key'      => '親カスタムフィールド名_0_サブカスタムフィールド名',
        'meta_value'    => $post_id,
        'meta_compare' => 'LIKE'
    ));
if( $posts ): ?>
<ul>
    <?php foreach( $posts as $post ):
    setup_postdata( $post ); ?>
    <li>
        <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
    </li>
    <?php endforeach; ?>
</ul>
<?php wp_reset_postdata(); ?>
<?php endif; ?>
BACK SCROLL