Come filtrare per categoria nella REST API, escludendo i post presenti anche in altre categorie?

2 set 2016, 02:29:37
Visualizzazioni: 15.3K
Voti: 4

Sto utilizzando la REST API per caricare diversi post da un altro sito, ogni post deve appartenere a una categoria diversa. Tuttavia ho una categoria "Eventi in evidenza" che include post mostrati anche in altre categorie, quindi ho un post ripetuto in due categorie diverse.

La mia query per la categoria in evidenza è questa:

http://localhost/wp-json/wp/v2/events/?categories=23&per_page=1

E voglio escludere i post di quella categoria (già mostrati come in evidenza) dagli altri elenchi. Ho già provato queste query:

http://localhost/wp-json/wp/v2/events/?categories=42&per_page=1&filter[category__not_in]=23

// ma leggendo la documentazione category__not_in si aspetta un array invece di un valore singolo:
// https://developer.wordpress.org/reference/classes/wp_query/#category-parameters
// Ho provato questo, passando l'ID della categoria esclusa come primo elemento dell'array:

http://localhost/wp-json/wp/v2/events/?categories=42&per_page=1&filter[category__not_in][]=23

Ho già letto altre risposte, non relative ai parametri della REST API ma agli argomenti passati direttamente a WP_Query con lo stesso problema: includere post in una categoria ma escludere quelli che appartengono anche ad altri termini. Entrambe sembrano funzionare interrogando prima tutti i post che appartengono alla categoria esclusa e poi passando quell'array di ID al parametro exclude, come query HTTP sarebbe qualcosa del genere:

http://localhost/wp-json/wp/v2/events/?categories=42&per_page=1&exclude[]=1&exclude[]=2&exclude[]=3

Tuttavia, questo è dispendioso, richiedendo due query al database anche nello stesso backend, ma è ancora peggio poiché sarebbero due round trip al backend dalla pagina HTML.

Esiste un modo migliore per farlo? WP_Query non supporta due diversi argomenti di categoria nella stessa query? Quando filtro per categorie e tag, non c'è conflitto.

1
Commenti

Hai mai trovato una soluzione che potresti condividere?

The Unknown Dev The Unknown Dev
19 ott 2016 16:27:19
Tutte le risposte alla domanda 1
0

Secondo http://v2.wp-api.org/reference/posts/ hai a disposizione il parametro categories_exclude da passare all'API.

Questo dovrebbe funzionare: http://localhost/wp-json/wp/v2/events/?categories=23&categories_exclude=42&per_page=1

...per ottenere i post dalla categoria 23, ma escludendo quelli che hanno anche la categoria 42 assegnata.

31 mar 2017 23:43:02