This is very unusual case, and the only solution I can think of here is to get an array of category ids to include into category__in
in order to skip posts that are only assigned to category 1
In order to achieve this, we must
-
use
get_terms()
to get all the categories. We will use theexclude
parameter to exclude category1
from that list. We will also set thefields
parameter toids
in order to get an array of category ids -
pass the array from the result from
get_terms()
tocategory__in
Example
$cat_ids = get_terms( 'category', array( 'fields' => 'ids', 'exclude' => 1 ) );
and then use it as follow
'category__in' => $cat_ids,
Just a note, you would need to check if you actually have categories returned by get_terms()
and that no error is returned before you run your query. You don’t want to pass an empty array or error to category__in
EDIT
I have scrapped the get_categories
idea and went with get_terms()
as get_terms
is used by get_categories
and we can also set get_terms()
to only return the category ids, and that is exactly all that is needed.
The original post is updated to reflect the changes