Afisarea unei liste de postări care conțin o valoare din câmpul de relație [ACF]

31 dec. 2015, 14:12:40
Vizualizări: 17.3K
Voturi: 8

Am un tip de postare numit 'Autori' și altul numit 'Documente'.

Folosesc câmpul de relație din Advanced Custom Fields pentru a lega o listă de Autori (obiecte post) unui Document. Acest câmp este practic un array care conține mai mulți autori (unele conțin doar unul).

Am un șablon în tema mea unde afișez informații suplimentare pentru fiecare Autor în postările lor individuale. Aș dori să afișez o listă de documente la care au contribuit (adică Postări care conțin numele autorului în câmpul de relație).

Am încercat următoarea interogare dar nu funcționează:

$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();
0
Toate răspunsurile la întrebare 2
4
13

Am actualizat răspunsul meu complet pe baza clarificării din comentariul de mai jos. Sper că acest lucru vă va fi de ajutor:

<div class="entry-content">

   <h2>Documente scrise de acest autor</h2>
        <?php 
        /*
         *  Interoghează postări pentru o valoare de relație.
         *  Această metodă folosește meta_query LIKE pentru a potrivi șirul "123" cu valoarea din baza de date a:1:{i:0;s:3:"123";} (matrice serializată)
         */

         $documents = get_posts(array(
                     'post_type' => 'document',
                     'meta_query' => array(
                      array(
                            'key' => 'writer', // numele câmpului personalizat
                            'value' => '"' . get_the_ID() . '"', // se potrivește exact cu "123", nu doar 123. Acest lucru previne potrivirea pentru "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>
31 dec. 2015 16:34:17
Comentarii

Bună ItsMePN, îmi cer scuze că nu am explicat corect. Câmpul de relație conține de fapt un array de "Scriitori" care sunt legați de Documente. Așadar, vreau să afișez o listă de Documente care conțin numele Scriitorului curent. Mulțumesc.

Stanley Umeanozie Stanley Umeanozie
31 dec. 2015 17:47:29

Am actualizat răspunsul și codul meu. Te rog verifică.

Prasad Nevase Prasad Nevase
31 dec. 2015 19:11:29

Aceasta a fost și soluția mea. Este extrem de important să pui meta_query într-un array ÎN interiorul altui array pentru ca să funcționeze. Mulțumesc!

Jos Jos
19 iun. 2019 10:37:37

Mulțumesc, m-ai salvat

Amino Amino
7 ian. 2020 14:06:33
1

Dacă cineva întâmpină probleme cu afișarea a mai mult de 5 rezultate, iată o mică ajustare.

$documents = get_posts(array(
                     'post_type' => 'document',
                     'posts_per_page' => -1, //adaugă această linie
25 oct. 2020 09:24:15
Comentarii

Rețineți că acest lucru poate duce la blocarea serverului deoarece va prelua toate postările de acel tip.

fuxia fuxia
25 oct. 2020 11:05:39