WP REST API: filtrare per categoria 1 E categoria 2
Ho armeggiato con la REST API e sono bloccato su questo punto: Come posso filtrare i post che sono sia in cat1 che in cat2?
Al momento, ?categories[]=45&categories[]=50
restituisce i post nella categoria ID 45 OPPURE 50 - come posso ottenere i post che sono sia in 45 CHE in 50?
Grazie in anticipo.
@Jesse vedi: WP-API/WP-API#2990
Da WP 4.7, il parametro filter
è stato rimosso da WP-API.
Devi utilizzare questo plugin: https://github.com/WP-API/rest-filter

Un plugin alternativo https://github.com/bueltge/wp-rest-api-filter-items che ha test per un solido mantenimento incluso.

@bueltge, Interessante. Attualmente utilizzo il plugin rest-api-filter-fields: https://github.com/svrooij/rest-api-filter-fields, che sembra fare più o meno la stessa cosa.

Sembra non esserci un modo per fare ciò nella versione attuale dell'API. Senza utilizzare un plugin, può essere ottenuto con un endpoint personalizzato o utilizzando la funzione di filtro della query REST per il tipo di post specifico.
Ecco una funzione di filtro approssimativa che aggiunge un parametro chiamato cat_relation
:
add_filter( 'rest_post_query', function( $args, $request ) {
if($request['cat_relation'] == 'AND') {
$args['category__and'] = $request['categories'];
}
return $args;
}, 10, 2);
Quindi un esempio di URL di richiesta sarebbe:
http://example.com/wp-json/wp/v2/posts?categories=17,8&cat_relation=AND

Installa il plugin dei filtri menzionato da Austin (https://github.com/WP-API/rest-filter) e prova ?filter[categories]=cat_one_slug%2Bcat_two_slug
.
Ho scoperto che %2B
è l'equivalente in codice del simbolo +
.
Normalmente useremmo +
per l'operatore AND ma purtroppo viene convertito in uno spazio, quindi usa %2B
invece.

Filtrare i post basandosi su termini multipli di tassonomie personalizzate usando condizioni logiche "AND", "OR".
Ecco cosa devi fare nelle versioni più recenti di WordPress (v5 e superiori)
Supponiamo che tu abbia due tassonomie personalizzate: settore e servizi.
Ottenere tutti i post che sono taggati con l'ID di tassonomia 51 "O" 52 appartenenti al termine di tassonomia "settore" "OPPURE" Ottenere tutti i post che sono taggati con l'ID di tassonomia 57 "E" 58 appartenenti al termine di tassonomia "servizi"
https://mywordpressbackend.com/wp-json/wp/v2/posts?sector=51+52&offering=57,58&tax_relation=OR
Ottenere tutti i post che sono taggati con l'ID di tassonomia 51 "O" 52 appartenenti al termine di tassonomia "settore" "E" Ottenere tutti i post che sono taggati con l'ID di tassonomia 57 "E" 58 appartenenti al termine di tassonomia "servizi"
https://mywordpressbackend.com/wp-json/wp/v2/posts?sector=51+52&offering=57,58&tax_relation=AND

Ok, quindi mostrerà il numero delle categorie per ogni post quando recuperi i post.
Poi puoi semplicemente filtrare per il numero della categoria in questo modo:
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.
Di default l'API di WP restituisce solo 10 post. Assicurati di specificare che dovrai recuperare più di 10 post se è il caso. Il massimo è 100 post.
const wpdata = await fetch(`http://example.com/wp-json/wp/v2/posts/?per_page=100`);
