MENU

rest_endpoints– Hook –

rest_endpoints は、 WordPressのREST APIに新しいエンドポイントを追加したり、既存のエンドポイントをカスタマイズする ために使用されます。REST APIを使うことで、外部アプリケーションやフロントエンドと連携し、データを取得・操作するための仕組みを提供します。

目次

機能の説明

  • REST APIのエンドポイントの一覧を取得 するための内部フィルターフックです。
  • REST APIのリクエストに応じて、特定のエンドポイントを 追加・削除・変更 するための処理を記述できます。
  • REST API経由でカスタムデータの取得や、新しい機能を実装したい場合に利用します。

シンプルなコード例

add_action('rest_api_init', function () {
    register_rest_route('custom/v1', '/example/', array(
        'methods' => 'GET',
        'callback' => 'my_custom_callback',
    ));
});
  • rest_api_init アクションフック 内で register_rest_route() を使い、カスタムエンドポイントを作成します。
  • GET/POST/PUT/DELETE など、HTTPリクエストメソッドに応じたコールバックを指定できます。
  • rest_ensure_response() で適切なレスポンス形式を返します。

使用例

add_action('rest_api_init', function () {
    register_rest_route('custom/v1', '/data/', array(
        'methods' => 'GET',
        'callback' => 'fetch_custom_data',
        'permission_callback' => '__return_true',
    ));
});

function fetch_custom_data() {
    $data = array(
        'name' => 'John Doe',
        'email' => 'john@example.com',
    );
    return rest_ensure_response($data);
}
  • register_rest_route() で、custom/v1/data/ というエンドポイントを登録します。
  • permission_callback__return_true を指定することで、 認証なしでアクセスを許可 しています。
  • fetch_custom_data() でJSON形式のデータを返します。

一緒に使うことが多い関連タグ

register_rest_route()

REST APIに 新しいエンドポイントを追加 します。

register_rest_route('my_namespace/v1', '/items/', array(
    'methods' => 'POST',
    'callback' => 'post_item_data',
));

rest_ensure_response()

コールバック関数からの戻り値を、 REST APIのレスポンス形式に変換 します。

function post_item_data($request) {
    $params = $request->get_json_params();
    return rest_ensure_response(array('status' => 'success', 'data' => $params));
}

追加情報を取得したい場合

get_json_params() でリクエストデータを取得する

function post_item_data($request) {
    $params = $request->get_json_params();
    return rest_ensure_response($params);
}

get_json_params() で、POSTリクエストの JSONデータ を取得します。

出力できる情報

  • name: ユーザーの名前
  • email: ユーザーのメールアドレス
  • status: 成功・失敗のステータス

想定されるトラブル

エンドポイントが表示されない

REST APIが無効化されているか、rest_api_init アクションが適切に呼び出されていない。

解決方法

  • プラグインやテーマで rest_api_init フックが適切に登録されていることを確認します。
  • パーマリンクの設定をリセットしてみてください。

認証エラーが発生する

permission_callback が適切に設定されていない。

解決方法

必要に応じて permission_callback でユーザーの権限チェックを追加します。

Q&A

どのようにカスタムエンドポイントを削除できますか?

rest_endpoints フィルターフックを使って、特定のエンドポイントを削除できます。

add_filter('rest_endpoints', function ($endpoints) {
    if (isset($endpoints['wp/v2/posts'])) {
        unset($endpoints['wp/v2/posts']);
    }
    return $endpoints;
});

REST APIを完全に無効化することは可能ですか?

はい、rest_authentication_errors フィルターでREST APIを無効化できます。

add_filter('rest_authentication_errors', function () {
    return new WP_Error('disabled', 'REST APIは無効化されています', array('status' => 403));
});

認証が必要なエンドポイントはどのように実装しますか?

permission_callback を設定し、ユーザーの権限をチェックします。

register_rest_route('my_namespace/v1', '/private/', array(
    'methods' => 'GET',
    'callback' => 'private_data',
    'permission_callback' => function () {
        return current_user_can('manage_options');
    },
));

まとめ

rest_endpoints は、WordPressのREST APIの拡張や管理に不可欠なフィルターフックです。

register_rest_route() と組み合わせて、カスタムエンドポイントを簡単に追加でき、外部アプリケーションとのデータ通信を容易にします。REST APIは、WordPressを ヘッドレスCMS として利用する際に特に重要な機能です。

カスタマイズ例

1