Mohamed Hamad
Mohamed Hamad

Reputation: 93

How to exclude a post by id from the category.php query in wordpress

I have a template where there is a main latest featured post (tagged as featured), and then 8 more below it. On the homepage, i was able to query for the latest featured post, and then pass its id to a function in the pre_get_posts wordpress filter. it works great there

    function mh_exclude_featured_query( $query ) {  
    if(is_home()){
        if ( $query->is_home() ) {
            $feat = get_featured_post();
            $query->query_vars['post__not_in'] = array($feat->ID);
        }
    }
}
add_action( 'pre_get_posts', 'mh_exclude_featured_query' );

but i'm also trying to do the same thing in the category.php, where i would show the latest post tagged as featured from that category. and then the remaining posts below with the featured post excluded.

Unfortnately, when i try the same method as above by using the pre_get_posts filter, i get stuck in an infinite loop and run out of memory.

if($query->is_category() && $query->is_main_query()){
    $cur_cat_id = get_cat_id( single_cat_title("",false) );
    $feat = get_featured_post($cur_cat_id);
    $query->query_vars['post__not_in'] = array($feat->ID);  
}

not sure what i'm doing differently that leads to a memory exhaustion. the category.php and index.php are near identical in their structure.

Upvotes: 2

Views: 2780

Answers (2)

user2385712
user2385712

Reputation: 49

Add This Code

   <?php if(!is_category('category_id')){
    echo 'Your Code Here';
    }?>

Upvotes: 1

jdp
jdp

Reputation: 3516

use the pre_get_posts filter:

<?php

function excludePostId($query) {
  $postIds = array(
    24, 10
  );

  if (is_category() && is_main_query()) {
    set_query_var('post__not_in', $postIds);
  }
}
add_action('pre_get_posts', 'excludePostId');

is_category() will accept a category slug or ID. You can limit which categories the post will be excluded from.

Upvotes: 3

Related Questions