web-dev-qa-db-ja.com

リレーションシップフィールド値を含む投稿の一覧表示[ACF]

'Writers'という投稿タイプと 'Documents'という別の投稿タイプがあります。

高度なカスタムフィールドの[関係]フィールドを使用して、作家(投稿オブジェクト)のリストをドキュメントにリンクします。これは、フィールドが基本的に複数のライターを含む配列であることを意味します(中には1つだけを含むものもあります)。

私は自分のテーマにテンプレートを持っています。そこでは、各作家の個々の投稿の中に追加情報を表示します。私が彼らが貢献した文書のリストを表示したいと思います(すなわち、関係フィールドに作家の名前を含む投稿)。

次のクエリを試しましたが、うまくいきません。

$item        = 0;
$writerName = get_the_title();

$my_contributions = new WP_Query( array( 
    'post_type'         => 'documents',
    'posts_per_page'    => -1,
    'meta_key'          => 'doc_contributors',
    'meta_value'        => $writerName,
    'meta_compare'      => 'LIKE'
) );

if( $my_contributions->have_posts() ) : 
    while( $my_contributions->have_posts() ) : 
        $my_contributions->the_post();
        $item++;
?>

<div class="list-line margint10 clearfix">
    <?php echo esc_attr( $item ) . ". " ?><a href="<?php the_permalink(); ?>"><?php get_the_title( $my_contributions->ID ); ?></a>
    <br />
</div>

<?php
    endwhile;
endif;
wp_reset_query();
3

以下のコメントであなたの説明に基づいて私の完全な答えを更新しています。私はこれが役立つことを願っています:

<div class="entry-content">

   <h2>Documents written by this writer</h2>
        <?php 
        /*
         *  Query posts for a relationship value.
         *  This method uses the meta_query LIKE to match the string "123" to the database value a:1:{i:0;s:3:"123";} (serialized array)
         */

         $documents = get_posts(array(
                     'post_type' => 'document',
                     'meta_query' => array(
                      array(
                            'key' => 'writer', // name of custom field
                            'value' => '"' . get_the_ID() . '"', // matches exaclty "123", not just 123. This prevents a match for "1234"
                            'compare' => 'LIKE'
                                )
                            )
                        ));

                        ?>
        <?php if( $documents ): ?>
             <ul>
             <?php foreach( $documents as $document ): ?>
                <li>
                   <a href="<?php echo get_permalink( $document->ID ); ?>">
                     <?php echo get_the_title( $document->ID ); ?>
                   </a>
                </li>
             <?php endforeach; ?>
            </ul>
      <?php endif; ?>

</div>
5
Prasad Nevase