LoginSignup
8
12

More than 5 years have passed since last update.

WP REST API V2 で独自のエンドポイントを追加する

Posted at

WordPressでもREST APIがプラグインで提供され、かつ、独自エンドポイントも作れるようになっていました。実装方法や説明は、色んな方がまとめてくれているので、そちらを見た方が早いです。(他力本願)
ただし、参考先のソースだと一部動かなかった部分などあったので、そこだけ補足しておきます。

参考URL

まずは公式
http://v2.wp-api.org/

WP REST API V2にてカスタムエンドポイントを追加するまとめ
http://kayakuguri.github.io/blog/2016/07/12/wp-rest-api-custom-endpoint/

WP REST API のドキュメントの認証ページの翻訳
http://nskw-style.com/2016/wordpress/wp-api/auth.html

WP REST APIを利用したNodeJSのWebアプリを死ぬ思いで作る
http://takahashifumiki.com/web/programing/3683/

注意事項

ここからが本題。

API側

ステータスとかは、WP_REST_Responseクラスを使うと返せるようです。ただし、参考ソースは公式ドキュメントを見るようにしましょう。

公式ドキュメント
http://v2.wp-api.org/extending/adding/

my_api_sample.php
// return a response or error based on some conditional
if ( 1 == 1 ) {
    return new WP_REST_Response( $data, 200 );
}else{
    return new WP_Error( 'code', __( 'message', 'text-domain' ) );
}

JS側

オレオレエンドポイントへのアクセス方法については、公式ドキュメントには何も言及が無いように見えます。(私が見落としているだけかもなので、知っていたら教えてください)

有志の方の説明を見ると、WP_API_Settings を使うようサンプルソースが多いのですが、動かないのでおかしいと思ってソースを確認したら、wpApiSettingsに名称が変わっていました。そこだけ注意しましょう。

my_script_sample.js
$.ajax({
    url       : wpApiSettings.root + 'wp/v2/users/me',
    method    : 'GET',
    beforeSend: function (xhr) {
        xhr.setRequestHeader('X-WP-Nonce', wpApiSettings.nonce);
    }
}).done(function (response) {
    console.log(response);
});

おまけ

http://v2.wp-api.org/extending/javascript-client/
公式ドキュメントにそのまんま書いてありますが、JSからAPIアクセスするには、wp-apiスクリプトをEnqueueしてあげる必要があります。

functions.php
// (1)直接enqueueする
wp_enqueue_script( 'wp-api' );

と直接やるか、または

functions.php
// (2)アクセス処理をしているJSファイルのenqueue時に依存関係にwp-apiを指定
wp_enqueue_script( 'my_script', 'path/to/my/script', array( 'wp-api' ) );

このように、依存指定のところ(arrayで指定している箇所)にwp-apiを指定すれば、(1)を記述する必要はないです。

8
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
12