web-dev-qa-db-ja.com

rest_api_initイベントは発生しません

Wp 4.7.4でカスタムプラグインを実行しようとしています。以下は私の簡単なプラグインです

add_action( 'rest_api_init', 'register_routes');


function register_routes() {
   register_rest_route( 'taxonomy-manager/v1', '/taxonomies/(P<taxonomy_type>[a-zA-Z]+)', array(
   'methods' => 'GET',
   'callback' => 'get_or_insert'
  ) );
} 

function get_or_insert( WP_REST_Request $request ) {

   $parameters = $request->get_params();

   return $parameters;

}

wp-jsonエンドポイントプラグインルートがありません。プラグインが正常にアクティブ化されました。私は何かを見逃しましたか?上記のプラグイン(またはrest_api_init event)他の人のために機能しますか?ありがとう。

16
Anton Putau

以下のチェックリストを参照してください、
1。パーマリンクをかなりのパーマリンクに変更して確認してください。
2。 .htacessファイルを確認します(パーマリンク構造を保存すると書き込み可能になり、wpで再書き込み可能になります)。
3。 Authを確認します。
4。以下のカスタムエンドポイントの作成方法を確認します。

add_action( 'rest_api_init', function () {
  register_rest_route( 'myplugin/v1', '/author/(?P<id>\d+)', array(
    'methods' => 'GET',
    'callback' => 'my_awesome_func',
  ) );
} );

REF: https://developer.wordpress.org/rest-api/extending-the-rest-api/adding-custom-endpoints/

私は解決策を得ました、あなたはあなたのURLでwp-jsonを使う必要があります... https://yourdomain.com/wp-json/namespace/and-so-on/ のように

その後、動作します。 URLにwp-jsonがありませんでした。

2
Shakeel Ahmed

私の場合、コールバックは実際にはプライベートメソッドでした。すべてを機能させるには、それをパブリックメソッドに変更する必要がありました。

class Example {
    function __construct() {
        add_action( 'rest_api_init', [ $this, 'example_method' ] );
    }

    public function example_method() {
        /* This will not work if the method is private! */
        /* ... */
    }
}
new Example();

あるインストールでは、メソッドがプライベートであるためにスタックトレースでエラーが発生しましたが、別のインストールでは、プライベートメソッドが呼び出されず、エラーが生成されませんでした。なぜ1つのマシンが一方の方向に反応し、もう一方の方向に反応しないのか、両方ともWP_DEBUGおよびWP_DEBUG_LOGをtrueに設定します。

0
Flimm

最新のビルドを使用すると、rest_api_initアクションが実行されているのがわかりません。 plugin.php内の次のコードは常に空で返され、rest_api_initアクションの起動を許可しないように見えます。

if ( empty( $GLOBALS['wp']->query_vars['rest_route'] ) ) {
    return;
}
0