2

My archive file contains..

<?php if (have_posts()) : while (have_posts()) : the_post(); ?> 
<a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a> 

But i want to exclude few posts with their ids, how can i do that ?

Important! But those excluded posts should display in the Google search as normal, i don't want to loss them in the search engines. Just i want to hide in my site only.

Thank you friends.

1
  • 1
    You need to use filter pre_get_posts. Check this link Commented Oct 31, 2014 at 3:17

1 Answer 1

6

You can exclude posts from archive pages with thee help of pre_get_posts action. Usually pre_get_posts is used to modify main query, so it's best solution for your problem.

function my_custom_get_posts( $query ) {
    if ( is_admin() || ! $query->is_main_query() )
        return;

    if ( $query->is_archive() ) {
        $query->set( 'post__not_in', array( 7, 11, 21 ) );
    }
}
add_action( 'pre_get_posts', 'my_custom_get_posts', 1 );

Please notice 7, 11, 21 in above code, these are the post IDs we are excluding from archive pages. You can specify as many comma separated post IDs as you want.

Yes, it will not prevent Google to index them.

5
  • Thank you Robert, can you help how to use this function, i mean where can i put this function ? in functions.php or directly in archive.php and can i remove first 'if' condition, seems its not necessary.
    – Siva
    Commented Oct 31, 2014 at 3:33
  • In functions.php. NO, do not remove if-else conditions otherwise these posts will not display anywhere on blog. These conditions are making sure that posts do not display in archive pages only.
    – Robert hue
    Commented Oct 31, 2014 at 3:47
  • Thanks a lot yar, its working great. I mean do we need to use this... if ( is_admin() || ! $query->is_main_query() ) return; ? please don't mind, i am fresh to wordpress that's why i am asking.
    – Siva
    Commented Oct 31, 2014 at 3:58
  • With that we are skipping the check for admin wordpress query and main wordpress query. So our function should not interfere with them. But it should not affect these, so you can test it by removing.
    – Robert hue
    Commented Oct 31, 2014 at 4:02
  • @Robert hue Link to the source of the code please. Commented Nov 1, 2014 at 18:17

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.