サポート » プラグイン » WP REST API v2で複数タクソノミーによる絞込み

    • 使用しているプラグインとテーマの情報:
    • テーマ: Twenty Sixteen
    • プラグイン: WP REST API v2, Custom Post Type UI, Custom Field Templete
    • PHP、MySQL のバージョン:
    • PHP: 5.2.4
    • MySQL: 5.0.16
    • サーバー環境:テスト環境
    • ブラウザとそのバージョン: Vivaldi v1.4.589.38

    初めて投稿させて頂きます。
    テスト環境(上記環境)にインストールしたWPからWP REST API v2を使って投稿記事の抽出をしているのですが、カテゴリやカスタムタクソノミーによるANDの絞込み方法が分かりません。

    上記のドキュメントを見ながら試してはいるのですが、まだ正解にたどりつけていません。
    例として、仮にドメインを example.com とした場合

    
    http://example.com/wp-json/wp/v2/posts?categories=[2,4]
    

    という形でアクセスしたところ、カテゴリID=4に属す記事を取得しました。この場合の意図としては、「カテゴリID2と4の両方に属す記事のみを取得」したいと考えているのですが、ANDの絞り込みができていないようです。
    実際は投稿タイプpostにCustom Post Type UIで追加したカスタムタクソノミー(ヒエラルキー:オン)によるAND絞り込みも行いたいと考えています。カスタムタクソノミーによる抽出もできたのですが、やはり複数のタクソノミーによる絞り込みが上手く行かず、現在はカテゴリで試している状態です。
    ドキュメントのスキーマではcategoriesの型はarrayと記されているので、上記のような形だとは思うのですが…。どうすれば意図した結果を取得できるのでしょうか。
    ご教示のほど、よろしくお願いします。

    • このトピックは3年、 11ヶ月前にアルム=バンドが編集しました。理由: エスケープされたタグの削除
5件の返信を表示中 - 1 - 5件目 (全5件中)
  • WP REST API v2とか初耳ですが、
    wordpressってクエリ文字列からの複数カテゴリーの絞り込みの問い合わせって出来ましたのでしょうか。
    WordPress REST API で、カスタム投稿タイプなどの情報を取得する
    http://nskw-style.com/2016/wordpress/wp-api/get.html
    とか見た感じ、投稿等のカテゴリーの取得のために(複数あることもありそうなので)arrayになっているんじゃないでしょうか。

    oisit様
    返信ありがとうございます。

    wordpressってクエリ文字列からの複数カテゴリーの絞り込みの問い合わせって出来ましたのでしょうか。

    はい。search.phpでWP_Queryへの渡すパラメータを生成するようにカスタマイズすれば可能ですね。WPのテーマでは検索周りをカスタマイズしたことは何度もあるので、そこに関してはある程度把握しているつもりです。
    しかし、今回の場合は単純に条件となるパラメータを投げる部分(searchform.phpでGETパラメータをsbumitするまで)しか操作することができないようなものだと認識しています。
    その方法としてドキュメントに書かれているように、
    (1)categoriesを配列の形で渡す
    (質問文での「?categories=[2,4]」の部分)を行っても、質問文で申し上げた通りカテゴリID=4に該当する記事しか抽出されない(カテゴリID=2に属しているかどうかは不問)という、意図しない結果になっているためフォーラムに質問した次第です。
    一方、別の方法として
    (2)WP REST APIでWP_Queryと同じようなことができるパラメータとしてはfilterがあります。
    しかし、WP_Queryで条件となるパラメータを生成する際は配列の入れ子になるのに対して、GETパラメータではWP_Queryの場合とは異なり、入れ子の中のキー文字列を指定するはできないのではないか…ということで逡巡している状態です。
    以上のように、categoriesあるいはタクソノミー名のパラメータを使うとすると、(1)のように意図しない結果となってしまいますし、filterパラメータを使うとすると、(2)で述べたように、どのような条件を作れば良いのか分からない、という状態です。
    以上、宜しくお願いします。

    カスタム投稿の場合は下のになるんですかね。
    Query multiple post types at once in V2
    Query Multiple Post Types Using WP REST API V2 (WordPress)
    英語も得意じゃないのでよくわかりませんが。

    モデレーター Okamoto Hidetaka

    (@hideokamoto)

    WP APIも基本的にはWP_Queryに準拠する検索の仕方をしていますので、それを元にクエリを考えればよいかと思います。
    特にfilterクエリというものを使うことで、filter[s]=WordPressのような検索が可能です。

    カテゴリのAND検索はWP_Queryの場合、
    $query = new WP_Query( array( 'category__and' => array( 2, 6 ) ) );の様になります。
    https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/WP_Query#.E3.82.AB.E3.83.86.E3.82.B4.E3.83.AA.E3.83.BC.E3.81.AE.E3.83.91.E3.83.A9.E3.83.A1.E3.83.BC.E3.82.BF

    ただ、filter['category__and']クエリは現在WP API側が対応していない様子です。。。
    そのため「自前でWP APIのエンドポイントを拡張する」「WP APIにプルリク / issueを出して対応してもらう」「JS側での対応を検討する」のいずれかでの対応になるかと思います。

    oisit様
    申し訳ないですが、カスタム投稿ではなくカスタムタクソノミーでの話です…。

    Okamoto Hidetaka様
    返信ありがとうございます。
    そして、こちらからのお返事が遅れてしまって申し訳ないです。

    REST APIもWP_Queryに準じれば良いのですね、分かりました。

    現時点ではfilter['category__and']が対応していないとのことでしたので、
    今回は取り急ぎ、最後の「JS側での対応」で実装を試みようと思います。
    方針としては、
     categoriesで1つのカテゴリの絞込みを行った後、戻り値のjsonから画面を生成する直前で
     残りのカテゴリが存在するかどうかを判定してふるいに掛ける
    というやり方でやってみたいと思います。

    現時点では戻り値の取得を行ってから処理を挟む、ということで方針が立ちましたので、解決済みとさせて頂きます。
    ありがとうございました。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック「WP REST API v2で複数タクソノミーによる絞込み」には新たに返信することはできません。