How to Exclude Category Posts in WordPress – Tutorial with Code that Works

July 4th, 2009

It is astounding how much worthless advice can be found on the web. If you are not a seasoned coder, you can find yourself facing simple dilemmas which can turn into a nightmare if solutions offered on various websites don’t lead to actual solution of your problem, only cause more problems and frustration. And that’s what I found to be the case with excluding posts from one particular category (or more categories) from your WordPress powered blog’s main page. I have been contacted by several people asking me for help excluding category posts from their WordPress blog, each of which was tearing their hair out as their tried many suggested solutions you can find across the web, but they either don’t work at all, or exclude the category, but break something else (mostly bust your title tags which are the most important part of your on page SEO).

Why Exclude Categories in WordPress?

There are several reasons why you may need to exclude category posts from your WordPress blog. One of the WP blogs I have built used a “Video of the Day” feature. The blog normally focused on different subject matter, but the owner wanted to offer his readers an extra feature to keep them entertained so he introduced the Video of the Day page. He would be posting one cool video each day and had them all listed on a dedicated page, however he didn’t want these Video of the Day posts mixed up with main topic of his website. So he was looking for a code to add to the WordPress theme which would exclude all posts from Video of the Day category from his main blog page. It turned up being a pain in the neck finding out the tutorial or ready to use code that would safely and reliably exclude that category.

How to Exclude Category Posts in WordPress – Tutorial

To exclude posts from a particular category in WordPress you first need to create that category and then mark down the category ID. It is very easy to do, just follow these steps:

  • go into Posts > Categories
  • create New Category (skip this step if you are excluding a category which already exists)
  • click on Category you want to exclude
  • mark down the ID number of the category – you can see it by taking a look at the ULR of the page in your browser’s address bar. It is the number at the end of the URL, right after the equal sign. The URL should end with something like this &cat_ID=xx where xx is a number (note, it could be a single, double or triple digit number, depending on how many categories your WordPress blog has. Some blogs could get four or five digit number. Just mark down the number in full as it appears after the equal sign)
  • go into Appearance > Editor and click on the file called “Theme Functions” (functions.php) listed under the Templates on the right hand side
  • paste the code below into your functions.php theme file, right before “?>” part at the end of it, replace “xx” with your category ID you have made note of and click “Update File”.

Code to Exclude Category Posts in WordPress

Use this code to paste in your functions.php file. It should be pasted right before the ?> part which should be the part of the exiting code. Replace “xx” in the code provided with Category ID you have made note of before hand. This is absolutely essential as you must let WordPress know which category you want to exclude for it to work. If you forget about it and paste it as it is provided below with xx instead of a Category ID, your category poses will NOT be excluded! Make sure you keep the minus sign (-), only replace “xx”, nothing more.

function exclude_category($query) {
if ( $query->is_home ) {
$query->set('cat', '-xx');
}
return $query;
}
add_filter('pre_get_posts', 'exclude_category');

Excluding Multiple Categories in WordPress

Sometimes you may wish to exclude more than one category from your main blog page. To do it is again very easy, you just need the Category ID of each category you wish to exclude. Post that Category ID along with the minus sign right before it in the same space as other category IDs, but separate them with spaces. So the final code would look something like this:

$query->set('cat', '-9 -53 -98 -484');

An example of code above would exclude posts from categories with following IDs: 9, 53, 98, 484

How to Exclude Categories from Archive Pages in WordPress

Sometimes you may also want to exclude category posts from archive pages. Or you may wish to have a category excluded from both Archives and Main Blog Page. Both of these are easy. The code for it would be as follows:

To exclude category posts from Archive pages, replace second line of code with following code:

if ( $query->is_archive ) {

To exclude category posts from both Archive pages and Main Blog Page, replace second line of code with following code:

if ( $query->is_home || $query->is_archive) {

That’s it. I have written this post in a way so even a new blogger could understand it and hopefully it helps. These codes definitely work with WordPress 2.7 through 2.8 but will also work on most older versions of WordPress.

 

Also Check Out:

19 Responses to “How to Exclude Category Posts in WordPress – Tutorial with Code that Works”

Frank

Thanks… very helpful amd works like a charm

Josh

This is fantastic. I can’t even begin to tell you how long it’s taken to find the correct way of doing this.

downloadcity

Thanks for the wonderful information!

Reino

Any way to exclude posts from a query in stead of a whole category?

Nicolas TAFFOREAU

Hello !

Good tuto thx but i have a problem. If i use this code the category is exclude on home page and on galery page. I need this category on my galery page. Do you have an idea ?

Thx, Nicolas.

deanswa

Thanks! you just saved me another two weeks going thru those plug-ins. Amen to your intro!

Kim

You are a lifesaver! I looked everywhere for this solution. Found a few that claimed theirs would work, but nothing else did. Perfect! Thank you very, very much.

Aracely

This code is not working for me. Maybe I am putting it in the wrong place? Can you please be more specific when saying that it should go before the ?>

Mark Davies

this code doesn’t work, any chances of a rewrite soon??

David Yiadom

Hey there..

Nice tutorial, easy to understand and works like it should.

Thanks!

Andrew

Thanks for the information you have shared with this post. I’ve been searching for more information about wordpress in which I like to be an expert on that application.

Great thanks to you!

Nog Jenkins

It worked for me too. I know exactly what you mean about sifting through google results to pass by the wrong solutions. Thanks!

Jesse

I’ve been looking for this for months. Thanks!

Jesse

Despite including any of the following

$query->is_archive || $query->is_category

This function excludes categories from queries sitewide. How to fix this?

Friends Links Forum

Very Nice Thanks For Sharing

Bjoern

Hey!

It works perfect. Thanks for this smart code! Great!

ddddddddd

how can i pagging posts excluding last 6 posts

Andreas

Thanks a lot for sharing your code. It works fine on my site.

Cheers!
A.

Y8

The Loop is used by WordPress to display each of your posts. Using The Loop, WordPress processes each of the posts to be displayed on the current page and formats them according to how they match specified criteria within The Loop tags. Any HTML or PHP code placed in the Loop will be repeated on each post. When WordPress documentation states “This tag must be within The Loop”, such as for specific Template Tag or plugins, the tag will be repeated for each post.

For example, among the information The Loop displays by default: the Title (the_title()), Time (the_time()), and Categories (the_category()) for each post. Other information about each post can be displayed with the appropriate Template Tags or (for advanced users) by accessing the $post variable, which is set with the current post’s information while The Loop is running.

Leave a Reply