WordPress JSON REST APIでカスタムフィールドのフィルタを設定する

こんにちは。エンジニアの庄子です。

前回に引き続き、WP JSON REST APIを色々調査してます。

今回は、記事に設定したカスタムフィールドでフィルタをかけて、データを取得する方法を調べてみました。

 

目的

  • 記事に設定したカスタムフィールドを条件に、WP JSON REST APIで記事を取得する

 

環境

  • MAMP
  • WordPress 4.1.1

 

まずは普通にやってみた

データは前回作成したニュース記事を使用したいと思います。

ニュース1とニュース4の記事に対して、カスタムフィールド「UPDATED」を追加し、値に”1″を設定しました。

このフラグが1のものは、”更新"アイコン表示、みたいなものを想定してます。

このフラグが1のものは、”更新”アイコン表示、的な利用を想定してます。

 

その上で、以下のクエリをAPIに投げてみます。

meta_keyはカスタムフィールドのキー名、meta_valueはそのキーの条件値です。

UPDATEで検索してみた結果です。フィルタがかかっていないようです...。

UPDATEで検索してみた結果です。フィルタがかかっていないようです…。

どうやらフィルタがかかっていないようです。

未認証でカスタムフィールドを取得するためにプラグインを導入したのと同様に、フィルタにカスタムフィールドを使う場合も何かしらプラグインが必要になる様です。

 

カスタムフィールドでフィルタ可能なプラグインを作る

今回は既存のプラグイン導入ではなく、プラグインを自作してみます。

プラグイン作成の方法はこことかに詳しく書かれていましたので、そちらをご覧下さい。

以下のようなPHPコードを書いてみました。

meta_keyとmeta_valueという変数を配列に追加する関数:my_filter_meta_valueを定義し、json_query_varsというフィルターフックに追加しています。

このフィルタを「Rest API Custom Field」という名前にして保存し、WordPressのプラグイン一覧から有効化しました。

いつか世界に羽ばたくプラグインを作ってみたいです。

いつか世界に羽ばたくプラグインを作ってみたいです。

 

テストしてみる

先ほどと同じクエリをAPIに投げてみます。

結果は…

UPDATED=1のニュース記事だけ取得出来ています!

UPDATED=1のニュース記事だけ取得出来ています!

わかりづらいですが、ちゃんとニュース1とニュース4の記事データだけを取得出来ているようです。

 

さらに嬉しいことが!

WP JSON REST APIではpostsで記事を取得するときのソート指定を

  • ソート項目:filter[orderby]
  • 昇順降順指定:filter[order]

のように、フィルタで指定するようなのです。

カスタムフィールドをフィルタで絞れるようになったということは、もしやカスタムフィールドでソートも出来るようになったのではと思い、試してみました。

各ニュース記事に”SORT”というカスタムフィールドを追加して、それぞれソート順の数値を登録しました。

各ニュース記事にSORTキーを追加。投稿日時順がバラバラになるように設定。

各ニュース記事にSORTキーを追加。投稿日時順がバラバラになるように設定。

 

ということで、まずASCから試してみます。

レスポンスが大きすぎるので、最初の1件だけ...。ちゃんと並んでました。

レスポンスデータが大きすぎるので、画像は最初の1件だけ…。ちゃんと並んでました。

ちゃんとSORTの昇順でソートされていました。

次にDESC。

同じく全体を表示できませんが、並んでます!

同じく全体を表示できませんが、並んでます!

こちらもちゃんとSORTの降順でソートされてそうです。

 

カスタムフィールドのフィルタとソートが出来れば、WordPressの記事で様々なデータを扱うことが出来そうです。

今回は以上です!



❏❏ TOPIC ❏❏ ------------------------------------------------------------

カスタム自由!フリーECサイトパッケージ
チャットボット導入サービス
WEBシステム開発・スマホアプリ開発はSRIAへ