Wp_query থেকে পোস্ট আইডি বাদ দিন


28

আমি কীভাবে একটি WP_Query ক্যোয়ারী থেকে একটি নির্দিষ্ট পোস্টকে বাদ দিতে পারি? (উদাহরণস্বরূপ, 278 আইডি সহ একটি পোস্ট বাদে সমস্ত পোস্ট দেখান)

আমি পোস্ট__নো_ইন যুক্তি দিয়ে চেষ্টা করেছি তবে এটি কেবল সমস্ত পোস্ট মুছে ফেলেছে ..

যেকোনো সাহায্যই অসাধারণ.

এখানে আমার বর্তমান জিজ্ঞাসা

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

প্রথম লুপটি কোনও বিভাগে সমস্ত পোস্ট প্রদর্শন করে এবং পোস্ট আইডি এর অ্যারেতে সংগ্রহ করে।

দ্বিতীয় লুপটি প্রথম লুপ থেকে পোস্টগুলি বাদ দিয়ে সমস্ত পোস্ট প্রদর্শন করে।


অন্য নোটে, দ্বিতীয় কোয়েরিতে ডাব্লুপি-পেজনাভি যুক্ত করার কোনও উপায় আছে কি?
ডিন এলিয়ট

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;

ডব্লিউপি_কোয়ারি পোস্ট_নো_ইন


2
আপনি জানেন, টাইপস সংশোধন করার জন্য সম্পাদনা রয়েছে :)
কায়সার

@ জিকির অ্যারেতে কমা একটি টাইপো নয় এটি বৈধ পিএইচপি সিনট্যাক্স, যদি আপনার অর্থটি বোঝায় তবে।
লিওনজিও

1
@ লেওনজিও - না, তার মূলত সেখানে "পোস্ট__নোট_ইন" এর পরিবর্তে "পোস্ট__নোট_ইন" ছিল, তার উত্তরের ইতিহাস দেখুন। কোমা ঠিক আছে
জিকি

9

আপনাকে post__not_inআরগটিকে অ্যারে হিসাবে সংজ্ঞায়িত করতে হবে । এমনকি একটি মান জন্য। এবং দয়া করে অস্থায়ী স্টাফ সহ গ্লোবাল কোর ভেরিয়েবলগুলি ওভাররাইট করবেন না।

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