なんでこんなこと書いてるか
WordPress、初心者なのでやりたいことやろうとすると既存の仕組み使ってどうやってやればいいのか調べるコストがなかなかに高くてよくわからないので、調べてみるとREST API返してくれるようなのでそれ使えばWordPressは記事登録/保管庫として使用し、ViewはExpressとか使えば好きにできるんじゃないかということで実験としてチャレンジしてる次第です。
まじめにこれやろうとするとBasicなりOAuthなりのAuth通す必要があって、今回はちょい試すくらいなのですべて端折ります。
WordPress REST API v2
v1とv2がありますが、正直v1だとendpointの追加がめんどそうだったのでv2にしました。
ちゃんとやる場合はここみてください。すばらいしい記事です。
v1でやるひとはここみてください。
今回はv2でやっていきます。
tax_query使えない問題
WP REST APIではtax_queryでごちゃっと取ってくるのができないっぽい問題があるのを解決していきます。
ソリューション
SearchWPを買う
カスタムフィールドとかを検索できるようにするサイト内検索の有償のプラグインがあり、これをREST APIで使うようにするプラグインを導入することで解決できるぽいです。
https://calderawp.com/doc/searchwp-api-queries/
お金で解決するなら間違いなくこれでしょう。
こんな感じでできるっぽいです。
/wp-json/swp-api/tax_query[taxonomy]=category&tax_query[terms]=api&tax_query[field]=slug
自力でendpointを追加してtax_queryの結果を返す
やってみると意外と簡単でした。
まず、ここみてください。
以上です。
functions.phpにぶち込んでください。
3行でまとめますと
- register_rest_routeでendpoint登録
- そこのcallbackにデータ取得する関数を追加
- 思う存分tax_query使って結果を返す
以上です。
これではなんなので短いサンプルを書きまして、これにて終了させていただきます。
add_action( 'rest_api_init', 'dt_register_api_hooks' ); function dt_register_api_hooks() { register_rest_route( 'wp/v2/test', '/umaa/(?P<id>\d+)', array( 'methods' => 'GET', 'callback' => 'get_title', ) ); } function get_title( $data ) { $posts = get_posts( array( 'author' => $data['id'], ) ); if ( empty( $posts ) ) { return null; } return $posts[0]->post_title; }