web-dev-qa-db-fra.com

Crochet API Reste quand un message est demandé

Je sais que je peux utiliser le noeud final /wp-json/wp/v2/posts/{id} pour récupérer un message.

Je construis une implémentation de WordPress qui repose entièrement sur l'API JSON et ses points de terminaison. Il s'agit d'une implémentation de SPAAngular, ce qui signifie que mes points d'ancrage doivent se déclencher lorsqu'une requête est effectuée via l'API.

En tant que tel, si je veux enregistrer des vues pour une publication, je voulais utiliser 'posts_selection' . Ma première question est: est-ce que cela se déclenche si la sélection est faite via /wp-json/wp/v2/posts/{id}

Ma deuxième question est la suivante: existe-t-il un autre point d'ancrage ou quelque chose qui se déclenchera également lors d'une requête d'API pour un message mais qui transmettra le {id} du message à ma fonction?

Parce que quand je fais ça:

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

 add_action( 'posts_selection', 'check_assembled_query' );

$query n'a pas l'information que je veux. Je voudrais le flux de travail suivant:

  1. Demander un message en utilisant /wp-json/wp/v2/posts/{id} de AngularJS.
  2. Demandez au serveur de reconnaître cette demande et d’itérer un champ méta des vues de la publication à l’aide de update_post_meta() qui nécessite une publication id.
  3. Renvoie l'article demandé à ma fonction JavaScript avec toutes les informations de l'article, y compris le nombre de vues méta-info susmentionné.

EDIT: Je suppose que post_selection ne se déclenche pas pour l'API REST parce que lorsque je le fais:

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

 add_action( 'posts_selection', 'check_assembled_query' );

Je reçois le dump uniquement sur les requêtes régulières plutôt que sur les requêtes de l'API JSON.

3
Summer Developer

Ma réponse initiale était totalement fausse, elle a donc été supprimée dans son intégralité.

Ni les hooks posts_selection ni wp ne sont activés lors de la demande d'API REST.

Le hook dont vous avez besoin est rest_pre_echo_response. Ce hook passe trois paramètres:

  1. Les données de réponse à envoyer au client
  2. L'instance du serveur.
  3. La demande utilisée pour générer la réponse.

Puisque vous avez besoin de l'ID de publication, vous pouvez faire quelque chose comme:

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