Mostrar lista de publicaciones que contienen un valor de campo de relación [ACF]

31 dic 2015, 14:12:40
Vistas: 17.3K
Votos: 8

Tengo un tipo de publicación llamado 'Escritores' y otro tipo llamado 'Documentos'.

Utilizo el campo de Relación en Advanced Custom Fields para vincular una lista de Escritores (objetos de publicación) a un Documento. Esto significa que el campo es básicamente un array que contiene múltiples escritores (algunos contienen solo uno).

Tengo una plantilla en mi tema donde muestro información adicional para cada Escritor dentro de sus publicaciones individuales. Me gustaría mostrar una lista de documentos en los que han contribuido (es decir, Publicaciones que contienen el nombre del escritor en el campo de relación).

He intentado la siguiente consulta pero no funciona:

$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
Todas las respuestas a la pregunta 2
4
13

Estoy actualizando mi respuesta completa basado en tu aclaración en el comentario abajo. Espero que esto ayude:

<div class="entry-content">

   <h2>Documentos escritos por este autor</h2>
        <?php 
        /*
         *  Consulta posts para un valor de relación.
         *  Este método usa meta_query LIKE para coincidir el string "123" con el valor de la base de datos a:1:{i:0;s:3:"123";} (array serializado)
         */

         $documents = get_posts(array(
                     'post_type' => 'document',
                     'meta_query' => array(
                      array(
                            'key' => 'writer', // nombre del campo personalizado
                            'value' => '"' . get_the_ID() . '"', // coincide exactamente con "123", no solo 123. Esto evita que coincida con "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 dic 2015 16:34:17
Comentarios

Hola ItsMePN, lamento no haber explicado correctamente. El campo de relación realmente contiene un array de "Escritores" que están vinculados a Documentos. Entonces, quiero mostrar una lista de Documentos que contengan el nombre del Escritor actual. Gracias.

Stanley Umeanozie Stanley Umeanozie
31 dic 2015 17:47:29

He actualizado mi respuesta y el código. Por favor revisa.

Prasad Nevase Prasad Nevase
31 dic 2015 19:11:29

Esta fue también mi solución. Es vitalmente importante poner el meta_query en un array DENTRO de otro array para que funcione. ¡Gracias!

Jos Jos
19 jun 2019 10:37:37

Gracias, me salvaste

Amino Amino
7 ene 2020 14:06:33
1

Si alguien tiene problemas para mostrar más de 5 resultados, aquí hay un pequeño ajuste.

$documentos = get_posts(array(
                     'post_type' => 'document',
                     'posts_per_page' => -1, //agrega esta línea
25 oct 2020 09:24:15
Comentarios

Ten en cuenta que esto puede colapsar tu servidor porque obtendrá todos los posts de ese tipo.

fuxia fuxia
25 oct 2020 11:05:39