问题描述

如何从 WP_Query 查询中排除一个特定的帖子? (例如,显示 ID 为 278 的帖子除外)

我已经尝试了 post__not_in 参数,但它只是删除所有的帖子..

任何帮助都会很棒。

这是我当前的查询

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

谢谢

最佳解决方法

我想这很重,但是为了回答你原来的问题,我收集了第一个循环中的所有帖子的数组,并从’post__not_in’ 中排除了第二个循环中的这些帖子,这个’post__not_in’ 需要一个 post id 的数组

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

第一个循环显示类别中的所有帖子,并将帖子 ID 收集到数组中。

第二个循环显示所有帖子,不包括第一个循环中的帖子。

次佳解决方法

您正在寻找的参数是 post__not_in(凯撒在他的答案中有打字错误) 。所以代码可能就像:

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

第三种解决方法

您必须将 post__not_in arg 定义为数组。即使是一个单一的价值。请不要用临时东西覆盖全局核心变量。

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

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。