Compruebe si la solicitud es una solicitud de API REST de WP.

2 minutos de lectura

¿Cuál es la mejor manera de verificar si una solicitud es una solicitud de API?

Tenga en cuenta que la solicitud puede ser una solicitud de API personalizada, lo que significa que puede ser de la siguiente manera:

mysite.com/wp-json/my_namespace/my_version/my_action

Obviamente, puedo verificar si la API enruta wp-json, pero debería haber una función integrada para verificar eso.

Lo necesito para hacer algunos ganchos como

add_action('init', 'do_something_only_if_api_request');

function do_something_only_if_api_request()
{
   if ( ! wp_api_request() ) {
     return;
   }
   // do stuff
}

Puedes comprobar defined('REST_REQUEST'). Esta constante se define como true en rest_api_loaded() (y no definido de otra manera).

Hubo un discusión de los desarrolladores de WP Rest API sobre la introducción de una nueva función como is_rest_request(). Al final se fueron por esta constante.

  • Tenga en cuenta que REST_REQUEST sólo se define durante la acción “wp” (ver codex.wordpress.org/Plugin_API/Action_Reference), que es mucho más tarde que la acción “init”.

    – el camello espacial

    19 de julio de 2021 a las 19:16

A partir de diciembre de 2016, la documentación de la API REST es bastante deficiente con respecto a todo lo que no parece un punto final.

Sin embargo, existen algunas funciones y puede encontrar la documentación directamente en el archivo, ya que están muy bien documentadas, consulte: wordpress/wp-includes/rest-api.php

Si desea agregar una acción solo en una llamada API REST, entonces probablemente desee vincular la acción: rest_api_initse vería como:

add_action('rest_api_init', 'do_something_only_if_api_request');

function do_something_only_if_api_request($wp_rest_server)
{

   // do stuff

}

Puede encontrar los detalles en el comentario de PHPdoc:

    /**
     * Fires when preparing to serve an API request.
     *
     * Endpoint objects should be created and register their hooks on this action rather
     * than another action to ensure they're only loaded when needed.
     *
     * @since 4.4.0
     *
     * @param WP_REST_Server $wp_rest_server Server object.
     */

¿Ha sido útil esta solución?