質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
REST

REST(Representational State Transfer)はwebアプリケーションの構築スタイルの一種です。HTTP GET/POSTによってリクエストを送信し、レスポンスはXMLで返されます。SOAPのようなRPCの構築と比べるとサーバからクライアントを分離することが出来る為、人気です。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

Q&A

解決済

1回答

2529閲覧

WP REST API v2で投稿編集日で期間を設定して投稿を取得したい

go-kawano

総合スコア15

REST

REST(Representational State Transfer)はwebアプリケーションの構築スタイルの一種です。HTTP GET/POSTによってリクエストを送信し、レスポンスはXMLで返されます。SOAPのようなRPCの構築と比べるとサーバからクライアントを分離することが出来る為、人気です。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

0グッド

0クリップ

投稿2018/04/26 04:39

編集2018/04/26 06:13

お世話になります。

現在ワードプレスの「WP REST API v2」プラグインを使用して情報を取得したいと考えております。

取得したい情報は、タイトル通りで投稿編集日で期間を設定して投稿を取得したいと考えております。

こちらのAPIリファレンスを参考に以下の方法を試みました。

curl curl http://example.co.jp/wp-json/wp/v2/posts?after=2018-04-03T00:00:00"&"before=2018-04-04T00:00:00 | jq .

上記の方法では、投稿の公開日の指定であるため、投稿の編集日の指定はできません。

WP REST APIで投稿の編集日で期間を指定して取得する方法についてご教示頂けたらと思います。

よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

filter 引数を使うと WP_Query と同様に date_query での詳細な期間指定が可能です。

下記のようなデータをクエリ文字列にして渡せば良いのではないかと思います。

json

1{ 2 "filter": { 3 "date_query": [ 4 { 5 "column": "post_modified", 6 "after": "2018-04-03", 7 "before": "2018-04-04", 8 "inclusive": true 9 } 10 ] 11 } 12}

これを PHP の http_build_query() 関数でクエリ文字列にすると、

filter%5Bdate_query%5D%5B0%5D%5Bcolumn%5D=post_modified&filter%5Bdate_query%5D%5B0%5D%5Bafter%5D=2018-04-03&filter%5Bdate_query%5D%5B0%5D%5Bbefore%5D=2018-04-04&filter%5Bdate_query%5D%5B0%5D%5Binclusive%5D=1

となるので、実際のコマンドは下記のようになります。

sh

1curl http://example.co.jp/wp-json/wp/v2/posts?filter%5Bdate_query%5D%5B0%5D%5Bcolumn%5D=post_modified&filter%5Bdate_query%5D%5B0%5D%5Bafter%5D=2018-04-03&filter%5Bdate_query%5D%5B0%5D%5Bbefore%5D=2018-04-04&filter%5Bdate_query%5D%5B0%5D%5Binclusive%5D=1 | jq .

あと「WP REST API v2」プラグインは WordPress 本体に取り込まれてるのでインストール不要ですが、
filter 引数を扱う機能が削除されてしまったので別途に下記プラグインが必要になります。

JavaScript で axios などのライブラリをお使いの場合は、
PHP の http_build_query() 関数とはクエリ文字列の形式が変わってしまい、正常に動作しないので、
代わりに下記の Gist に載せてあるプラグインを使ってみてください。

投稿2018/04/26 14:08

yhg

総合スコア2161

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

go-kawano

2018/05/08 09:26 編集

お世話になります。 実際のコマンドを実行してみましたが、以下のようなエラーが発生している状況です。 'filter%5Bdate_query%5D%5B0%5D%5Bafter%5D'is not recognized as an internal or external command, operable program or batch file. 'filter%5Bdate_query%5D%5B0%5D%5Bbefore%5D' is not recognized as an internal or external command, operable program or batch file. 'filter%5Bdate_query%5D%5B0%5D%5Binclusive%5D' is not recognized as an internal or external command, operable program or batch file. rest-filterのプラグインはインストール済みです。 エラーについてご教示頂けないでしょうか。よろしくお願い致します。
yhg

2018/05/08 13:10

コマンドの際に URL をクオーテーションで囲ってみたらどうでしょうか?
go-kawano

2018/05/09 02:31 編集

お世話になります。クオーテーションで囲むと実行できました。 しかし、取得した投稿データは修正日でフィルタされておらず、最新の投稿から10件取得している結果が返ってきています。 filterパラメータは機能しておらず、curl http://example.co.jp/wp-json/wp/v2/posts と同じレスポンスが返ってきている状況です。 パラメータの値を変えて試しても、同じレスポンスが返ってきて手詰まり状態です。。 何かお気づきの点がありましたら、ご教示頂けないでしょうか。よろしくお願い致します。
yhg

2018/05/09 04:35 編集

フィルタープラグインの方に問題があるみたいで、そのままの状態だと一部のクエリ(public query variable <https://wpdocs.osdn.jp/WordPress_Query_Vars>)しか受け付けない仕様になってるみたいです。 plugin.php 内の 42行目を $vars = apply_filters( 'query_vars', array_merge( $wp->public_query_vars, $wp->private_query_vars, array('date_query') ) ); このように書き換えると意図したとおりに動くかと思います。
yhg

2018/05/09 04:53

↑に補足で、post_status は下書きなど、公開されてないものまで抜かれる可能性があるので除外したほうが無難です。 $wp->private_query_vars, ↓ array_values(array_diff($wp->private_query_vars, array('post_status']))), それか、Private Query Vars の中に使う変数がないようなら消してしまったほうが安心できます。
go-kawano

2018/05/11 06:35 編集

返信遅くなりました。すみません。 yhgさんのおかげで無事に意図したレスポンスを取得することが出来ました。本当にありがとうございます。 補足ですが array_values(array_diff($wp->private_query_vars, array('post_status']))), ↑post_statusの"]"はいらないですよね?
yhg

2018/05/11 10:57

すいません、最初 array() じゃなくて [] で書いていて、直した時に残ちゃってたみたいです。いらないですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問