概要
rest_api_init アクションは、WordPress における REST API が初期化される際に実行されるフックです。このアクションは、カスタムエンドポイントを登録したり、API リクエストの処理を変更したりするために使用されます。主な用途としては以下のような機能が考えられます:
- カスタム REST API エンドポイントの作成
- データのバリデーションや認証の追加
- レスポンスのカスタマイズ
- 他のプラグインやテーマとの統合
- API 用のカスタムパラメータの作成
- API リクエストに対するフィルタリングやマッピングの実装
構文
add_action( 'rest_api_init', 'your_function_name' );
パラメータ
your_function_name:このフックに関連付けたい関数名。
戻り値
このアクション自体は戻り値を返しませんが、関連付けられた関数が必要に応じてデータを返すことができます。
使用可能なプラグイン WooCommerce のバージョン
WooCommerce バージョン 2.6 以上で使用可能です。
使用可能な WordPress のバージョン
WordPress バージョン 4.4 以上で使用可能です。
この関数のアクションでの使用可能性
| アクション | 使用例 |
|---|---|
| mu_plugin_loaded | 〇 |
| registered_post_type | 〇 |
| plugins_loaded | 〇 |
| wp_roles_init | |
| setup_theme | |
| after_setup_theme | |
| set_current_user | |
| init | 〇 |
| register_sidebar | |
| wp_loaded | 〇 |
| send_headers | |
| parse_query | |
| pre_get_posts | |
| wp | 〇 |
| template_redirect | |
| get_header | |
| wp_head |
サンプルコード
サンプルコード 1: カスタムエンドポイントの作成
add_action( 'rest_api_init', function () {
register_rest_route( 'myplugin/v1', '/endpoint/', array(
'methods' => 'GET',
'callback' => 'my_custom_function',
));
});
function my_custom_function( WP_REST_Request $request ) {
return new WP_REST_Response( 'Hello World', 200 );
}
このサンプルコードは、myplugin/v1/endpoint/ というカスタム REST API エンドポイントを作成します。このエンドポイントに GET リクエストを送ると、Hello World というレスポンスが返されます。
サンプルコード 2: 認証の追加
add_action( 'rest_api_init', function () {
register_rest_route( 'myplugin/v1', '/secure-endpoint/', array(
'methods' => 'GET',
'callback' => 'my_secure_function',
'permission_callback' => '__return_true',
));
});
function my_secure_function( WP_REST_Request $request ) {
return new WP_REST_Response( 'Secure Data', 200 );
}
このサンプルコードでは、認証なしでアクセス可能な REST API エンドポイントを作成します。呼び出すことで Secure Data というデータを取得できますが、permission_callbackを使って別の認証メカニズムを実装することも可能です。
サンプルコード 3: 複数メソッドに対応するエンドポイント
add_action( 'rest_api_init', function () {
register_rest_route( 'myplugin/v1', '/mixed-endpoint/', array(
'methods' => array( 'GET', 'POST' ),
'callback' => 'my_mixed_function',
));
});
function my_mixed_function( WP_REST_Request $request ) {
if ( $request->get_method() === 'POST' ) {
return new WP_REST_Response( 'Data Posted', 200 );
}
return new WP_REST_Response( 'Data Retrieved', 200 );
}
このサンプルコードでは、GET および POST メソッド両方に対応したエンドポイントを作成します。GET リクエストには Data Retrieved が、POST リクエストには Data Posted がレスポンスされます。
サンプルコード 4: カスタムパラメータの追加
add_action( 'rest_api_init', function () {
register_rest_route( 'myplugin/v1', '/param-endpoint/(?P<id>d+)', array(
'methods' => 'GET',
'callback' => 'my_param_function',
));
});
function my_param_function( $data ) {
return new WP_REST_Response( 'Received ID: ' . $data['id'], 200 );
}
このサンプルコードでは、URL パラメータを持つエンドポイントを作成しています。id パラメータを取得し、その値を含むレスポンスを返します。
サンプルコード 5: ステータスコードをカスタマイズする
add_action( 'rest_api_init', function () {
register_rest_route( 'myplugin/v1', '/status-endpoint/', array(
'methods' => 'GET',
'callback' => 'my_status_function',
));
});
function my_status_function() {
return new WP_REST_Response( 'Resource Not Found', 404 );
}
このサンプルコードでは、リソースが見つからない場合に 404 ステータスコードを返します。このようにして、REST API から適切なエラーレスポンスを提供できます。