WordPress.org

Ready to get started?Download WordPress

Forums

[resolved] How to exclude posts that only belong to one category? (10 posts)

  1. tismey
    Member
    Posted 9 years ago #

    Here's the setup. I have a 'current distractions' category which appears in my sidebar, but doesn't appear on my main page (using
    if !( in_category('17') )
    ). What I'd like to be able to do is have these entries appear on the front page if they also belong to another category - ie exclude them if are ONLY a current distraction and not also of interest for another reason.

    I'm sure someone's going to tell me this is dead easy and I've missed something somewhere but I've searched and search...no dice.

  2. ColdForged
    Member
    Posted 9 years ago #

    Remove the in_category stuff and use this in your root index.php:

    <?php
    /* Short and sweet */
    define('WP_USE_THEMES', true);
    if( !isset($cat) ) {
    $cat = '-17';
    }
    require('./wp-blog-header.php');
    ?>

  3. tismey
    Member
    Posted 9 years ago #

    Hi there, thanks for the fast response. That's excellent and does exactly what it says on the tin.

    In the spirit of understanding rather than cutting and pasting, what is that actually doing?

  4. ifelse
    Member
    Posted 9 years ago #

    $cat is an internal variable WP uses to specify the categories to include in the posts collection. However, when a - is prefixed, WP parses this and excludes the category instead.

    Note that there are a couple of proviso's to this method:

    1. only one category can be excluded this way
    2. posts must belong to only this category. Posts that belong to multiple categories (even if one of them are excluded) are still picked up. This is due to a flaw in the sql code (which itself was due to a workaround for MySQL limitations).
    3. This is, to my knowledge, undocumented. I only found this out by examining the source code.
  5. tismey
    Member
    Posted 9 years ago #

    So the only way to do what I wanted to do is with an undocumented feature which is itself the result of a flaw in the SQL? Figures. I do like to make things difficult for myself!

    Thanks for your help!

  6. tismey
    Member
    Posted 9 years ago #

    Would this break the ability to browse categories? Now when I click on a category it just give me my front page again. Removing these lines lets me browse by category quite happily.

  7. tismey
    Member
    Posted 9 years ago #

    OK, I figured this - using $cat in the root index.php broke category browsing (clicking on a category title just took you back to the homepage rather than to that category).

    After some poking around in the codex I discovered query_posts which appears to have been documented fairly recently. Using
    <?php
    if (is_home()) {
    query_posts("cat=-17");
    }
    ?>

    has the desired effect, without breaking anything.

  8. bran8464
    Member
    Posted 9 years ago #

    I would like this too. Where do I find query_posts or do I have to create that file, and in which directory would it go if that is the case?

  9. tismey
    Member
    Posted 9 years ago #

    query_posts is a built-in template tag. The codex entry is at
    http://codex.wordpress.org/Template_Tags/query_posts
    I just pasted the above lines into my index.php page, just before the loop.

    This method has 2 disadvantages, I have discovered. You can only exclude one category this way and the posts you exclude using query_posts (or indeed using the first method here, $cat) will still be included in your RSS feed. Another way of doing the same thing without these caveats is to use the RumCategory plugin
    http://rummanddan.dk/plugins/rumcategory/
    which will let you exclude categories from either the front page or the RSS Feed 'on-the-fly' using checkboxes on the Edit Category page.

  10. Pentadact
    Member
    Posted 9 years ago #

    Nice work Timsey - you've made me realise I need to do this too, and I'll use your code rather than the plugin for the sake of reducing bloat.

Topic Closed

This topic has been closed to new replies.

About this Topic

Tags