GuzzleHttp\Exception\ClientException : Client error: `POST https://beta.1ni.co/wp-json/wp/v2/posts` resulted in a `400 Bad Request` response:
{"code":"rest_invalid_param","message":"\u7121\u52b9\u306a\u30d1\u30e9\u30e1\u30fc\u30bf\u30fc: date","data":{"status":4 (truncated...)
どうやら「date」の形式が間違ってると言われているみたい。
WordPressのREST APIの仕様を確認すると、
date
string, datetime (ISO8601)
The date the object was published, in the site’s timezone.
と書いてあるのでそれに沿って書き出そうと思って、
$date = Carbon::tomorrow();
$date->hour = 21;
$date->dormat(DateIme::ISO8601)
といった感じにしてたんだけど……これが間違い。
詳しくはこちらに書いてあるけれど、
PHPのDateTime::ISO8601はISO8601ではない – Qiita
DateTime::ISO8601 で出力される文字列はISO8601に準拠してない。
ISO8601に準拠するためには次のどちらかでないといけないのに、
- 20190711T210000+0900
- 2019-07-11T21:00:00+09:00
DateTime::ISO8601で出力される文字列はこうなってる。
- 2019-07-11T21:00:00+0900
後ろの「+0900」の部分にコロンが足りない。
おいマジかよふざけんな。なんでこんなことになってんの?
DateTime::ATOMかDateTime::W3Cを使いましょう(使うなら)
ドキュメントを見る限り、「DateTime::ATOM」か「DateTime::W3C」なら期待通りの文字列を出力してくれます。まああとで見てなんでW3C?とかなる可能性もあるので、自分で形式を指定して出力した方が良いかもしれませんけどね。
PHP: DateTime – Manual
今まで全然気付いてなかったわー。嵌められた。