Exclui o ID do post de wp_query

22

Como posso excluir uma postagem específica de uma consulta WP_Query? (Por exemplo, mostre todas as postagens além de uma postagem com o ID 278)

Eu tentei o argumento post__not_in mas apenas remove todas as postagens ..

Qualquer ajuda seria ótima.

Aqui está minha consulta atual

<?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();
?>

Obrigado

    
por Dean Elliott 14.09.2012 / 15:08
fonte

3 respostas

11

Suponho que isso seja pesado, mas para responder à sua pergunta original, coletei todos os IDs de mensagens em um array no primeiro loop e excluí esses posts do segundo loop usando 'post__not_in' que espera uma matriz de ids de postagem

<?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;
?>

O primeiro loop exibe todas as postagens em uma categoria e coleta os IDs dos posts em uma matriz.

O segundo loop exibe todas as postagens, excluindo as postagens do primeiro loop.

    
por Ben HartLenn 14.09.2012 / 20:20
fonte
35

O parâmetro que você está procurando é post__not_in (o kaiser tem um erro de digitação em sua resposta). Então o código poderia ser assim:

<?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;

Documentação WP_Query post__not_in

    
por Ziki 10.05.2013 / 11:01
fonte
8

Você precisa definir o post__not_in arg como array. Mesmo para um valor único. E, por favor, não substitua variáveis centrais globais por coisas temporárias.

<?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;
?>
    
por kaiser 14.09.2012 / 15:55
fonte