みんなのちからになりたい

コピペでブログラムつくっていきたい

WordPress REST API v2にendpointを追加する

なんでこんなこと書いてるか

WordPress、初心者なのでやりたいことやろうとすると既存の仕組み使ってどうやってやればいいのか調べるコストがなかなかに高くてよくわからないので、調べてみるとREST API返してくれるようなのでそれ使えばWordPressは記事登録/保管庫として使用し、ViewはExpressとか使えば好きにできるんじゃないかということで実験としてチャレンジしてる次第です。

まじめにこれやろうとするとBasicなりOAuthなりのAuth通す必要があって、今回はちょい試すくらいなのですべて端折ります。

WordPress REST API v2

v1とv2がありますが、正直v1だとendpointの追加がめんどそうだったのでv2にしました。

ちゃんとやる場合はここみてください。すばらいしい記事です。

takahashifumiki.com

v1でやるひとはここみてください。

wp-api.org

今回はv2でやっていきます。

tax_query使えない問題

WP REST APIではtax_queryでごちゃっと取ってくるのができないっぽい問題があるのを解決していきます。

ソリューション

SearchWPを買う

カスタムフィールドとかを検索できるようにするサイト内検索の有償のプラグインがあり、これをREST APIで使うようにするプラグインを導入することで解決できるぽいです。

searchwp.com

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の結果を返す

やってみると意外と簡単でした。

まず、ここみてください。

v2.wp-api.org

以上です。

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;
}