I'm trying to do the above-mentioned; and came across this and this. Is it still the case that you have to query by term ID using the REST API, and there's no built-in way to query posts via the WP REST API using taxonomy slugs?
1 Answer
For the moment, I've created this workaround here thanks to this post here. It's basically the same, just a little more general.
Assuming a custom post type with the your_custom_post_type slug, and three custom taxonomies with these names here:
first_custom_taxonomy_namesecond_custom_taxonomy_namethird_custom_taxonomy_name
The code below enables to query via their slug value if you query not via their $taxonomy_name in the REST API, but via {$taxonomy_name}_slug.
More precisely:
- Using the taxonomy name in the REST endpoint, you'd have to use the ID:
http://example.org/wp-json/wp/v2/your_custom_post_type?first_custom_taxonomy_name=12
- Using the taxonomy name +
_slugsuffix, you can query in f(slug):
http://example.org/wp-json/wp/v2/your_custom_post_type?first_custom_taxonomy_name_slug=slug-value
/** * Querying via taxonomy slug is by default not possible in WP, we have to create a * filter to do so * * @param array $args array of arguments to be used in WP_Query * @param WP_REST_Request $request The REST API Request * * @return array $args array of arguments to be used in WP_Query, updated by this function */ add_filter( "rest_your_custom_post_type_query", function ( array $args, WP_REST_Request $request ): array { // Get parameters of the query $params = $request->get_params(); // Enable this feature for all of the custom taxonomies $custom_taxonomies = [ 'first_custom_taxonomy_name', 'second_custom_taxonomy_name', 'third_custom_taxonomy_name' ]; foreach ( $custom_taxonomies as $custom_taxonomy ) { if ( isset( $params["{$custom_taxonomy}_slug"] ) ) { $args['tax_query'][] = [ 'taxonomy' => $custom_taxonomy, 'field' => 'slug', 'terms' => explode( ",", $params["{$custom_taxonomy}_slug"] ) ]; } } return $args; }, 10, 2 ); You can easily extend this with additional taxonomies, just by adding the respective taxonomy name into $custom_taxonomies.