Cum să filtrezi după categorie în REST API, excluzând postările din alte termeni de categorie
Folosesc REST API pentru a încărca mai multe postări de pe un alt site, fiecare postare trebuie să aparțină unei categorii diferite. Totuși, am o categorie "Evenimente recomandate" care include postări afișate și în alte categorii, așa că am o postare repetată în două categorii diferite.
Interogarea mea pentru categoria recomandată arată astfel:
http://localhost/wp-json/wp/v2/events/?categories=23&per_page=1
Și vreau să exclud postările din acea categorie (deja afișate ca recomandate), să nu apară și în celelalte zone, am încercat deja aceste interogări:
http://localhost/wp-json/wp/v2/events/?categories=42&per_page=1&filter[category__not_in]=23
// dar citind category__not_in așteaptă un array în loc de un scalar:
// https://developer.wordpress.org/reference/classes/wp_query/#category-parameters
// Am încercat asta, trecând id-ul categoriei excluse ca prim element al array-ului:
http://localhost/wp-json/wp/v2/events/?categories=42&per_page=1&filter[category__not_in][]=23
Am citit deja alte răspunsuri, nu legate de parametrii REST API, dar argumente transmise direct la WP_Query cu aceeași problemă: include postări într-o categorie, dar exclude-le pe cele care aparțin și altui termen. Ambele par să funcționeze interogând mai întâi toate postările care aparțin categoriei excluse, apoi trecând acel array de Id-uri la parametrul exclude
, ca interogare HTTP ar arăta cam așa:
http://localhost/wp-json/wp/v2/events/?categories=42&per_page=1&exclude[]=1&exclude[]=2&exclude[]=3
Totuși, aceasta este costisitoare, necesitând două interogări la baza de date chiar și în același backend, dar este și mai rău deoarece ar fi necesare două călatorii dus-întors la backend din pagina HTML.
Există o metodă mai bună de a face asta? WP_Query nu suportă două argumente diferite de categorie în aceeași interogare? Când filtrez după categorii și etichete, nu există conflict.
Conform http://v2.wp-api.org/reference/posts/, ai la dispoziție parametrul categories_exclude pentru a-l transmite către API.
Această cerere ar trebui să funcționeze:
http://localhost/wp-json/wp/v2/events/?categories=23&categories_exclude=42&per_page=1
...pentru a obține articolele din categoria 23, dar excluzând cele care au și categoria 42 atribuită.
