wake-up-neo.net

So filtern Sie nach Kategorien in REST API, ohne Beiträge auch in anderer Kategorie?

Ich verwende die REST API, um mehrere Posts von einer anderen Site zu laden. Jeder Post muss zu einer anderen Kategorie gehören. Ich habe jedoch eine Kategorie "Ausgewählte Ereignisse", die Beiträge enthält, die auch in einer anderen Kategorie angezeigt werden. Daher habe ich einen Beitrag, der in zwei verschiedenen Kategorien wiederholt wird.

Meine Abfrage für die vorgestellte Kategorie sieht folgendermaßen aus:

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

Und ich möchte die Posts in dieser Kategorie (die bereits als "Hervorgehoben" angezeigt werden) von der Anzeige in den anderen Bereichen ausschließen. Ich habe die folgenden Abfragen bereits ausprobiert:

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

// but reading category__not_in expects an array instead of a scalar:
// https://developer.wordpress.org/reference/classes/wp_query/#category-parameters
// I've tried this, passing the id of the excluded category as first element of the array:

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

Ich habe bereits andere Antworten gelesen, die sich nicht auf REST API-Parameter beziehen, sondern Argumente, die mit demselben Problem direkt an WP_Query übergeben wurden: Beiträge in einer Kategorie einschließen, aber auch solche, die zu einem anderen Begriff gehören, ausschließen . Beides scheint zu funktionieren zuerst alle Posts abzufragen, die zur ausgeschlossenen Kategorie gehören, und dann dieses Array von IDs an den Parameter exclude zu übergeben , da die HTTP-Abfrage ungefähr so ​​aussehen würde:

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

Dies ist jedoch teuer, da sogar im selben Backend zwei Datenbankabfragen ausgeführt werden. Dies ist jedoch noch schlimmer, da es sich um zwei Roundtrips von der HTML-Seite zum Backend handelt.

Gibt es einen besseren Weg, dies zu tun? WP_Query unterstützt nicht zwei verschiedene Kategorieargumente in derselben Abfrage? Wenn ich nach den Kategorien und filtere, liegt kein Konflikt vor.

3
Jesús Franco

Laut http://v2.wp-api.org/reference/posts/ steht categories_exclude als Parameter zur Übergabe an die API zur Verfügung.

Das sollte funktionieren: http://localhost/wp-json/wp/v2/events/?categories=23&categories_exclude=42&per_page=1

... um die Beiträge aus Kategorie 23 zu erhalten, aber diejenigen auszuschließen, denen auch 42 als Kategorie zugewiesen wurden.

4
TCattd