1

I am using pre_get_posts() to allow all posts to be displayed on any category archive. This is because I will provide a javascript sorting and filtering method using isotope.js. Any category page will output all posts, but any that aren't a part of that category will initially be hidden.

function show_all_cats( $query ) {
    if ( !$query->is_main_query() ){
        return;
    }
    if ( is_admin() ){
        return;
    }
    if ( $query->is_archive ) {
        $query->set('cat', ''); //here is the problem
        var_dump($query);
        return;
    }
    return;
}
add_action( 'pre_get_posts', 'show_all_cats' );

I have tried setting 'cat' to 0, null, '' and '-' . $currentcategoryid. They all either display only posts that would be displayed otherwise (all in category) or none.

I tried using query_posts() which also didn't work. I was also told:

manipulating taxonomies might require re-running meta queries processing.

1

Just unsetting the cat variable probably isn't enough. The pre_get_posts hook happens after the query variables have already been parsed. So there's probably a tax_query with the taxonomy = category and the terms = your category.

You're already dumping the $query in your code, presumably for debugging. So, look at what you're actually dumping. Do you see the tax_query? Change your code to adjust that $query to have what you want it to have.

0

Have you tried this?

unset( $query->query_vars['cat'] );
1
  • Yes, it still only shows posts in the category – Bill Jan 29 '14 at 13:39
0

You can use a filter pre_get_posts() to modify SQL query WHERE part:

add_filter( 'posts_where', function ( $where ) {
    $where = preg_replace("regex pattern", "", $where);
        return $where;
    }, 10, 2 );

It is a bit hacking solution but should work.

0

It is about 4 years later, but if anyone needs the answer, this is the solution:

if ( $query->is_archive ) {
    $q->set( 'category_name', '*your-category-slug*' );
}

Cheers

2
  • The question was about removing the category from the query, not adding it. – Milo Dec 3 '18 at 15:44
  • In that case you can try, $q->set( 'category_name', 'null' ); – karlosuccess Dec 3 '18 at 19:18

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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