Excluir ID de publicación de wp_query

22

¿Cómo puedo excluir una publicación específica de una consulta WP_Query? (Por ejemplo, mostrar todas las publicaciones aparte de una publicación con el ID 278)

He probado el argumento post__not_in pero solo elimina todas las publicaciones ...

Cualquier ayuda sería genial.

Aquí está mi consulta actual

<?php
    $temp = $wp_query;
    $wp_query= null;
    $wp_query = new WP_Query(array(
        'post_type' => 'case-study',
        'paged' => $paged,
    ));
    while ($wp_query->have_posts()) : $wp_query->the_post();
?>

Gracias

    
pregunta Dean Elliott 14.09.2012 - 15:08

3 respuestas

11

Supongo que esto fue pesado, pero para responder a su pregunta original, he recopilado todos los ID de los mensajes en una matriz en el primer ciclo, y excluí esos mensajes del segundo ciclo usando 'post__not_in' que espera una serie de ID de publicación

<?php
$args1 = array('category_name' => 'test-cat-1', 'order' => 'ASC');
$q1 = new WP_query($args);
if($q1->have_posts()) :
$firstPosts = array();
    while($q1->have_posts()) : $q1->the_post();
        $firstPosts[] = $post->ID; // add post id to array
        echo '<div class="item">';
        echo "<h2>" . get_the_title() . "</h2>";
        echo "</div>";
    endwhile;
endif;
/****************************************************************************/
// array of post id's collected in first loop, can now be used as value for the 'post__not_in' parameter in second loops query $args
$args2 = array('post__not_in' => $firstPosts, 'order' => 'ASC' );
$q2 = new WP_query($args2);
if($q2->have_posts()) :
    while($q2->have_posts()) : $q2->the_post();
        echo '<div class="item">';
        echo "<h2>" . get_the_title() . "</h2>";
        echo "</div>";
    endwhile;
endif;
?>

El primer bucle muestra todas las publicaciones en una categoría y recopila los ID de publicación en una matriz.

El segundo bucle muestra todas las publicaciones, excluyendo las publicaciones del primer bucle.

    
respondido por el Ben HartLenn 14.09.2012 - 20:20
35

El parámetro que está buscando es post__not_in (kaiser tiene un error tipográfico en su respuesta). Entonces el código podría ser como:

<?php
$my_query = new WP_Query(array(
    'post__not_in' => array(278),
    'post_type' => 'case-study',
    'paged' => $paged,
));
while ($my_query->have_posts()) : $my_query->the_post(); endwhile;

WP_Query post__not_in documentación

    
respondido por el Ziki 10.05.2013 - 11:01
8

Tienes que definir el post__not_in arg como una matriz. Incluso para un solo valor. Y, por favor, no sobrescriba las variables centrales globales con cosas temporales.

<?php
$query = new WP_Query( array(
    'post_type'    => 'case-study',
    'paged'        => $paged,
    'post__not_in' => array( 1, ),
) );
if ( $query->have_posts() ) {
while ( $query->have_posts() ) {
    $query->the_post();

    // do stuff

} // endwhile;
} // endif;
?>
    
respondido por el kaiser 14.09.2012 - 15:55

Lea otras preguntas en las etiquetas