Wp_query से पोस्ट आईडी को छोड़ दें


28

मैं WP_Query क्वेरी से एक विशिष्ट पोस्ट कैसे निकाल सकता हूं? (उदाहरण के लिए, आईडी 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

मुझे लगता है कि यह भारी था, लेकिन आपके मूल प्रश्न का उत्तर देने के लिए, मैंने पहले लूप में एक सरणी में सभी पोस्ट आईडी का संग्रह एकत्र किया है, और 'पोस्ट__नोट_इन' का उपयोग करके उन पोस्ट को दूसरे लूप से बाहर रखा है, जो पोस्ट आईडी के एक सरणी की उम्मीद करते हैं

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

पहला लूप एक श्रेणी में सभी पदों को प्रदर्शित करता है, और पोस्ट आईडी को एक सरणी में इकट्ठा करता है।

पहले लूप से पोस्टों को छोड़कर दूसरा लूप सभी पोस्ट प्रदर्शित करता है।


एक और नोट पर, क्या wp-pagenavi को द्वितीय क्वेरी में जोड़ने का कोई तरीका है?
डीन इलियट

1
यदि आप कभी अपना उत्तर देते हैं, तो कृपया अपना कोड मार्कअप / इरादा ठीक करें। धन्यवाद।
कैसर

50

आप जिस पैरामीटर की तलाश कर रहे हैं, 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 प्रलेखन


2
आप जानते हैं,
टाइपिंग

सरणी में @Ziki अल्पविराम टाइपो नहीं है यह वैध PHP सिंटैक्स है, यदि आपका मतलब है।
लियोनजियो

1
@leonziyo - नहीं, वह मूल रूप से "post__not_in" के बजाय "posts__not_in" था, उसके उत्तर का इतिहास देखें। कोमा ठीक है
Ziki

9

आपको post__not_inarg को array के रूप में डिफाइन करना है। एक मूल्य के लिए भी। और कृपया अस्थायी सामग्री के साथ वैश्विक कोर चर को अधिलेखित न करें।

<?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));
    }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.