I have been meddling with REST API and I am stuck with this: How can I filter posts in both cat1 and cat2?
For now, ?categories[]=45&categories[]=50
returns in category ID 45 OR 50 - how can I get posts in 45 AND 50?
Thanks in advance.
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It only takes a minute to sign up.
Sign up to join this communityI have been meddling with REST API and I am stuck with this: How can I filter posts in both cat1 and cat2?
For now, ?categories[]=45&categories[]=50
returns in category ID 45 OR 50 - how can I get posts in 45 AND 50?
Thanks in advance.
Multiple categories can be separated by comma like below
http://example.com/wp-json/wp/v2/posts?categories=20,30
hope this helps
@Jesse see: WP-API/WP-API#2990
Since WP 4.7, filter
has been removed from WP-API.
You need to use this plugin: https://github.com/WP-API/rest-filter
There doesn't seem to be a way to do this in the current version of the API. Without using a plugin, it can be achieved with a custom endpoint or by using the rest query filter function for the specific post type.
Here's a rough filter function that adds a parameter called cat_relation
:
add_filter( 'rest_post_query', function( $args, $request ) {
if($request['cat_relation'] == 'AND') {
$args['category__and'] = $request['categories'];
}
return $args;
}, 10, 2);
So an example request URL would be:
http://example.com/wp-json/wp/v2/posts?categories=17,8&cat_relation=AND
Install the filter plugin Austin mentioned (https://github.com/WP-API/rest-filter) and try ?filter[categories]=cat_one_slug%2Bcat_two_slug
.
I found out that %2B
is the code equivalent of the +
symbol.
Normally we would use +
for the AND operator but unfortunately it gets converted into a space so use %2B
instead.
Filtering posts based on multiple custom taxonomy terms based on logical "AND", "OR" condition.
Here is what you need to do in the newer versions of Wordpress (v5 and above)
Lets say you have two custom taxonomies: sector and offerings.
Getting all posts that are tagged with taxonomy ID 51 "OR" 52 beloning to the taxonmy term "sector" "OR" Getting all posts that are tagged with taxonomy ID 57 "AND" 58 beloning to the taxonomy term "offering"
https://mywordpressbackend.com/wp-json/wp/v2/posts?sector=51+52&offering=57,58&tax_relation=OR
Getting all posts that are tagged with taxonomy ID 51 "OR" 52 beloning to the taxonmy term "sector" "AND" Getting all posts that are tagged with taxonomy ID 57 "AND" 58 beloning to the taxonomy term "offering"
https://mywordpressbackend.com/wp-json/wp/v2/posts?sector=51+52&offering=57,58&tax_relation=AND
Okay so it's going to say the categories number for each post when you fetch posts.
Then you can just filter by the category number like this:
const wpdata = await fetch(`http://example.com/wp-json/wp/v2/posts`);
const jsonresp = await wpdata.json()
const particularcategoryposts = jsonresp.filter(function(item){
return item.categories == "4";
});
P.S.
By default the WP API only returns 10 posts. Make sure to clarify that you'll need to fetch more than 10 posts if that is the case. 100 Posts is the max.
const wpdata = await fetch(`http://example.com/wp-json/wp/v2/posts/?per_page=100`);
You should be able to access multiple categories by using the following:
http://YOURSITE.DEV/wp-json/wp/v2/posts?categories=45+50
Hope that helps!
Cheers
This is what I did, It works fine.
http://example.com/wp-json/wp/v2/articles/?_embed&categories=1,2,3,4&per_page=30
For those who are using Rest API v3, It works for me:
http://example.com/wp-json/wc/v3/products/?category=42,43