WP REST API: filtrare după categoria 1 ȘI categoria 2
M-am jucat cu REST API și m-am blocat aici: Cum pot filtra postările care sunt în ambele categorii cat1 și cat2?
Momentan, ?categories[]=45&categories[]=50
returnează postările din categoria cu ID-ul 45 SAU 50 - cum pot obține postările care sunt în ambele categorii 45 ȘI 50?
Mulțumesc anticipat.
@Jesse vezi: WP-API/WP-API#2990
Începând cu WP 4.7, parametrul filter
a fost eliminat din WP-API.
Trebuie să folosești acest plugin: https://github.com/WP-API/rest-filter

Un alt plugin https://github.com/bueltge/wp-rest-api-filter-items care are teste pentru o includere solidă de întreținere.

@bueltge, Interesant. În prezent folosesc plugin-ul rest-api-filter-fields: https://github.com/svrooij/rest-api-filter-fields, care pare să facă cam același lucru.

Se pare că nu există o modalitate de a face acest lucru în versiunea curentă a API-ului. Fără a utiliza un plugin, se poate realiza cu un endpoint personalizat sau prin utilizarea funcției de filtrare a interogării REST pentru tipul specific de articol.
Iată o funcție de filtrare aproximativă care adaugă un parametru numit cat_relation
:
add_filter( 'rest_post_query', function( $args, $request ) {
if($request['cat_relation'] == 'AND') {
$args['category__and'] = $request['categories'];
}
return $args;
}, 10, 2);
Deci, un exemplu de URL de solicitare ar fi:
http://example.com/wp-json/wp/v2/posts?categories=17,8&cat_relation=AND

Instalează plugin-ul de filtrare menționat de Austin (https://github.com/WP-API/rest-filter) și încearcă ?filter[categories]=cat_one_slug%2Bcat_two_slug
.
Am aflat că %2B
este echivalentul codului pentru simbolul +
.
În mod normal am folosi +
pentru operatorul AND dar, din păcate, acesta este convertit într-un spațiu, așa că folosește %2B
în schimb.

Filtrarea postărilor bazată pe mai mulți termeni de taxonomie personalizată folosind condiții logice "ȘI", "SAU".
Iată ce trebuie să faceți în versiunile mai noi ale WordPress (v5 și mai sus)
Să presupunem că aveți două taxonomii personalizate: sector și oferte.
Obținerea tuturor postărilor care sunt etichetate cu ID-ul de taxonomie 51 "SAU" 52 aparținând termenului de taxonomie "sector" "SAU" Obținerea tuturor postărilor care sunt etichetate cu ID-ul de taxonomie 57 "ȘI" 58 aparținând termenului de taxonomie "oferte"
https://mywordpressbackend.com/wp-json/wp/v2/posts?sector=51+52&offering=57,58&tax_relation=OR
Obținerea tuturor postărilor care sunt etichetate cu ID-ul de taxonomie 51 "SAU" 52 aparținând termenului de taxonomie "sector" "ȘI" Obținerea tuturor postărilor care sunt etichetate cu ID-ul de taxonomie 57 "ȘI" 58 aparținând termenului de taxonomie "oferte"
https://mywordpressbackend.com/wp-json/wp/v2/posts?sector=51+52&offering=57,58&tax_relation=AND

Bine, deci va afișa numărul categoriilor pentru fiecare articol când preiei postările.
Apoi poți filtra pur și simplu după numărul categoriei astfel:
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.
În mod implicit, API-ul WP returnează doar 10 postări. Asigură-te că menționezi că va trebui să preiei mai mult de 10 postări dacă este cazul. Maximul este de 100 de postări.
const wpdata = await fetch(`http://example.com/wp-json/wp/v2/posts/?per_page=100`);
