Excluderea unui ID de articol din wp_query

14 sept. 2012, 16:08:54
Vizualizări: 197K
Voturi: 46

Cum pot exclude un anumit articol dintr-o interogare WP_Query? (De exemplu, să arăt toate articolele în afară de articolul cu ID-ul 278)

Am încercat argumentul post__not_in dar acesta elimină toate articolele..

Orice ajutor ar fi binevenit.

Iată interogarea mea actuală

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

Mulțumesc

0
Toate răspunsurile la întrebare 4
4
92

Parametrul pe care îl căutați este post__not_in (kaiser are o greșeală de tipar în răspunsul său). Deci codul ar putea arăta astfel:

<?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ția WP_Query post__not_in

10 mai 2013 12:01:08
Comentarii

Știi, există [edit]-uri pentru corectarea greșelilor de tipar :)

kaiser kaiser
12 oct. 2014 16:25:23

@Ziki virgula din array nu este o greșeală de tipar, este o sintaxă PHP validă, dacă la asta te referi.

Leo Leo
21 iun. 2017 21:17:14

@leonziyo - nu, inițial avea acolo "posts__not_in" în loc de "post__not_in", vezi istoricul răspunsului său. Virgula este ok

Jan Zikmund Jan Zikmund
23 iun. 2017 00:15:40

@Ziki Nu sunt sigur dacă aș aprecia o comă :D

kaiser kaiser
5 oct. 2020 01:38:49
0
20

Trebuie să definești argumentul post__not_in ca un array. Chiar și pentru o singură valoare. Și te rog să nu suprascrii variabilele globale din nucleu cu lucruri temporare.

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

    // faci ceva

} // endwhile;
} // endif;
?>
14 sept. 2012 16:55:50
2
18

Presupun că acest lucru a fost dificil, dar pentru a răspunde la întrebarea ta inițială, am colectat toate ID-urile postărilor într-un array în prima buclă și am exclus acele postări din a doua buclă folosind 'post__not_in' care așteaptă un array de ID-uri de postări

<?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; // adaugă ID-ul postării în array
        echo '<div class="item">';
        echo "<h2>" . get_the_title() . "</h2>";
        echo "</div>";
    endwhile;
endif;
/****************************************************************************/
// array de ID-uri de postări colectate în prima buclă, poate fi acum folosit ca valoare pentru parametrul 'post__not_in' în a doua buclă
$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;
?>

Prima buclă afișează toate postările dintr-o categorie și colectează ID-urile postărilor într-un array.

A doua buclă afișează toate postările, excluzând postările din prima buclă.

14 sept. 2012 21:20:26
Comentarii

Pe de altă parte, există o modalitate de a adăuga wp-pagenavi la a doua interogare?

Dean Elliott Dean Elliott
16 sept. 2012 01:21:19

În cazul în revizuiți răspunsul dvs. în viitor: Vă rugăm să corectați formatarea/indentarea codului. Mulțumesc.

kaiser kaiser
12 oct. 2014 16:27:18
0

Coduri alternative;

Excludează postările dintr-o categorie

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

Elimină postările de pe pagina principală

<?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));
    }
}
22 mar. 2019 13:05:21