私はREST APIを使用して他のサイトから複数の投稿をロードしています。各投稿は異なるカテゴリに属している必要があります。ただし、他のカテゴリにも表示されている投稿を含む「おすすめのイベント」カテゴリが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 APIパラメータに関連しない他の回答をすでに読んでいますが、同じ問題で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 および タグでフィルタリングしても、競合は発生しません。
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も割り当てられている投稿は除外します。