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

감사

답변:


13

나는 이것이 무겁지 만 원래 질문에 대답하기 위해 첫 번째 루프에서 모든 게시물 ID를 배열로 수집하고 게시물 ID의 배열 을 예상하는 'post__not_in' 을 사용하여 두 번째 루프에서 해당 게시물을 제외했습니다.

<?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를 추가하는 방법이 있습니까?
Dean Elliott

1
답을 다시 찾은 경우 : 코드 마크 업 / 인 텐트를 수정하십시오. 감사.
kaiser

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

@Ziki 배열의 쉼표는 오타가 아니며 유효한 PHP 구문입니다.
leonziyo 2016 년

1
@leonziyo-아니오, 그는 원래 "post__not_in"대신 "posts__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));
    }
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.