web-dev-qa-db-ja.com

カテゴリ別にフィルタリングする方法 REST APIは、他のカテゴリの用語でも記事を除く?

私はREST AP​​Iを使用して他のサイトから複数の投稿をロードしています。各投稿は異なるカテゴリに属している必要があります。ただし、他のカテゴリにも表示されている投稿を含む「おすすめのイベント」カテゴリが1つあります。そのため、2つの異なるカテゴリで投稿が繰り返されています。

注目のカテゴリに対する私のクエリは次のようになります。

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

そして、そのカテゴリの投稿(すでに紹介されている)を除外したいのですが、他の分野には表示されないようにして、これらのクエリを試してみました。

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

REST AP​​Iパラメータに関連しない他の回答をすでに読んでいますが、同じ問題でWP_Queryに直接渡される引数: 1つのカテゴリに投稿を含めるが、他の用語に属するものも除外 。 HTTPクエリは次のようになるので、両方とも 最初に除外カテゴリに属する​​すべての投稿をクエリしてから、そのIDの配列をexcludeパラメータに渡す _で動作するようです。

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

ただし、これはコストがかかり、同じバックエンドでも2つのデータベースクエリを発行することになりますが、HTMLページからバックエンドへの往復が2回行われるため、さらに悪化します。

これを行うより良い方法はありますか? WP_Queryは同じクエリで2つの異なるカテゴリ引数をサポートしませんか? categories および タグでフィルタリングしても、競合は発生しません。

3
Jesús Franco

http://v2.wp-api.org/reference/posts/ によると、APIに渡すためのパラメータとしてcategories_excludeが利用可能です。

これはうまくいくはずです:http://localhost/wp-json/wp/v2/events/?categories=23&categories_exclude=42&per_page=1

...カテゴリ23から投稿を取得しますが、カテゴリ42も割り当てられている投稿は除外します。

4
TCattd