1. ホーム
  2. php

[解決済み] ワードプレスプラグインのエンドポイントへのRESTルートを登録する場所

2022-02-16 09:41:05

質問

登録機能はどこに行かなければならないのか?( register_rest_route() )

  • theme/child functions.phpになければならないのでしょうか?
  • それとも、プラグインベースphpファイル内でもよいのでしょうか?(例: \wp-content-plugins-example.php)

これを明確にしたドキュメントはありますか?

での公式ドキュメントには記載がありません。 https://developer.wordpress.org/rest-api/extending-the-rest-api/routes-and-endpoints/

同様に、エンドポイント関数はどこに格納する必要があるのでしょうか。登録関数は名前を付けるだけで、パスは指定しません。

例えば、こんな風にできるかな。

  • 登録関数呼び出し( register_rest_route ) は、メインプラグインファイル (例: \wp-contentpluginsexample.php) に記述します。
  • エンドポイント関数は他のプラグインファイル(例: \wp-contentpluginsexamplesub-path-stuffsexample-controller.php) にあります。

もしそうなら、どのように?

以下のリンクはこれを試みているようですが、これらの属性は指定されていません (例: \wp-contentpluginsexample.php)

解決するには?

register_rest_route は "rest_api_init" アクションフックの中にあり、ルート用のコールバックは同じファイルか外部ファイルで定義できます (そして、それをメインファイルの中で要求すれば、ルート/s にそれらを追加できます). 以下はその例です。

例えば、プラグイン "api-test" があり、それが次の場所に配置されているとします。\そして、メインのプラグインファイルとしてapi-test.phpを追加します(この例のために、機能的でないものにします)。api-test.phpの中には、次のようなものがあります。

/**
 * @wordpress-plugin
 * Plugin Name: WP Rest api testing..
 */

/**
 * at_rest_testing_endpoint
 * @return WP_REST_Response
 */
function at_rest_testing_endpoint()
{
    return new WP_REST_Response('Howdy!!');
}

/**
 * at_rest_init
 */
function at_rest_init()
{
    // route url: domain.com/wp-json/$namespace/$route
    $namespace = 'api-test/v1';
    $route     = 'testing';

    register_rest_route($namespace, $route, array(
        'methods'   => WP_REST_Server::READABLE,
        'callback'  => 'at_rest_testing_endpoint'
    ));
}

add_action('rest_api_init', 'at_rest_init');

これは、すべてが同じファイル内にある、本当にシンプルな例です。