web-dev-qa-db-fra.com

Afficher la liste des articles contenant une valeur de champ de relation [ACF]

J'ai un type de message appelé "Écrivains" et un autre type de message appelé "Documents".

J'utilise le champ Relation dans Champs personnalisés avancés pour lier une liste de rédacteurs (objets postaux) à un document. Cela signifie que le champ est fondamentalement un tableau contenant plusieurs écrivains (certains n'en contiennent qu'un).

J'ai un modèle dans mon thème où j'affiche des informations supplémentaires pour chaque écrivain dans leurs messages individuels. Je souhaite afficher une liste des documents auxquels ils ont contribué (par exemple, les messages contenant le nom de l'auteur dans le champ de la relation).

J'ai essayé la requête suivante mais cela ne fonctionne pas:

$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
Stanley Umeanozie

Je mets à jour ma réponse complète en fonction de votre clarification dans le commentaire ci-dessous. J'espère que ça aide:

<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