Exclude post ID from wp_query

时间:2012-09-14 作者:Dean Elliott

如何从WP\\U查询中排除一篇特定文章?(例如,显示除ID为278的帖子之外的所有帖子)

我在参数中尝试了post\\uu not\\u,但它只是删除了所有post。。

任何帮助都会很好。

这是我当前的查询

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

4 个回复
最合适的回答,由SO网友:Ben HartLenn 整理而成

我想这很重,但为了回答您最初的问题,我在第一个循环中收集了一个数组中的所有帖子id,并使用\'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收集到一个数组中。

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

SO网友:Ziki

您要查找的参数是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;

WP_Query post__not_in documentation

SO网友:kaiser

您必须定义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;
?>

SO网友:Fatih Mert Doğancan

替代代码;

排除类别帖子

<?php
add_action(\'pre_get_posts\', \'exclude_category_posts\');
function exclude_category_posts( $query ) {
    if($query->is_main_query() && $query->is_home()) {
        $query->set(\'cat\', array( -22, -27 ));
    }
}
从主页中删除帖子
<?php
add_action(\'pre_get_posts\', \'wpsites_remove_posts_from_home_page\');
function wpsites_remove_posts_from_home_page( $query ) {
    if($query->is_main_query() && $query->is_home()) {
        $query->set(\'category__not_in\', array(-1, -11));
    }
}

结束