web-dev-qa-db-ja.com

投稿要求時にRest APIフック

私はエンドポイント/wp-json/wp/v2/posts/{id}を使って投稿を取得できることを知っています。

私はJSON APIとそのエンドポイントに完全に依存するWordPressの実装を構築しています。これはAngular SPAの実装です。つまり、API経由でリクエストが行われたときにフックを起動する必要があります。

そのため、投稿のビューを記録したい場合は、 'posts_selection' を使用したいと思いました。私の最初の質問は、選択が/wp-json/wp/v2/posts/{id}によって行われた場合、これが起こるかどうかです。

私の2つ目の質問は、投稿に対するAPIクエリ中に起動する別のフックまたは何かがあるのですが、それは投稿の{id}を私の関数に渡すのでしょうか。

私がこれをすると:

function check_assembled_query( $query ) {
    var_dump( $query );
}

 add_action( 'posts_selection', 'check_assembled_query' );

$queryに必要な情報がありません。次のようなワークフローをお願いします。

  1. AngularJSの/wp-json/wp/v2/posts/{id}を使用して投稿をリクエストしてください。
  2. バックエンドにこの要求を認識させ、 update_post_meta() を使用して投稿のビューのメタフィールドを繰り返すようにします。これには投稿idが必要です。
  3. 前述のmeta-info view-countを含むすべての投稿の情報とともに、要求された投稿を私のJavaScript関数に返します。

編集: post_selectionはREST AP​​Iに対しては起動しません。

function check_assembled_query( $query ) {
    var_dump( $query );
    die();
}

 add_action( 'posts_selection', 'check_assembled_query' );

JSON APIへのリクエストではなく、通常のリクエストでのみダンプを取得します。

3

私の最初の答えはすべて間違っていたので、完全に削除されました。

posts_selectionフックもwpフックも、REST AP​​I要求中には起動されません。

あなたが必要とするフックはrest_pre_echo_responseです。このフックは3つのパラメータを渡します。

  1. クライアントに送信する応答データ
  2. サーバーインスタンス。
  3. 応答を生成するために使用された要求。

投稿IDが必要なので、次のようなことができます。

add_action( 'rest_pre_echo_response', function( $response, $object, $request ) {
  //* Get the post ID
  $post_id = $response[ 'id' ];

  //* Make sure of the post_type
  if( 'post' !== $response[ 'post' ] ) return;

  //* Do something with the post ID
}, 10, 3 );
3
Nathan Johnson