¿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_init
se 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.
*/