从wp_query中排除帖子ID


28

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

谢谢

Answers:


13

我想这很沉重,但是为了回答您的原始问题,我在第一个循环中将所有帖子ID收集在一个数组中,并使用“ post__not_in”从第二个循环中排除了那些帖子,这些帖子期望一个帖子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收集到数组中。

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


另一方面,有没有一种方法可以将wp-pagenavi添加到第二个查询中?
迪恩·埃利奥特

1
万一您重新审视自己的答案:请修正您的代码标记/意图。谢谢。
kaiser 2014年

50

您要查找的参数是post__not_in(kaiser的答案有错字)。所以代码可能像这样:

<?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文档


2
您知道,有用于纠正错别字的编辑:)
kaiser 2014年

@Ziki数组中的逗号不是错字,它是有效的PHP语法,如果那是您的意思。
leonziyo

1
@leonziyo-不,他原来那里是“ posts__not_in”而不是“ post__not_in”,请参阅他的回答的历史记录。昏迷很好
Ziki

9

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

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

0

备用代码;

排除类别帖子

<?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));
    }
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.