Estoy empezando un poco con la API REST. Si no estoy completamente engañado, el init
enlace de acción también se ejecuta cuando se trata de una solicitud REST API. Ahora, quiero ejecutar solo un código, cuando no es una solicitud REST API.
Entonces estaba buscando un comando como is_rest()
para hacer algo como
<?php
if( ! is_rest() ) echo 'no-rest-request';
?>
Pero no pude encontrar algo como esto. ¿Hay un is_rest()
por ahí?
init
. También tenga en cuenta que las partes de la API pueden usarse internamente en solicitudes que no son solicitudes REST, por lo que se arriesga a romper algo si confía en esa detección.Respuestas:
Es un buen punto de @Milo, la
REST_REQUEST
constante se define comotrue
, dentro derest_api_loaded()
si$GLOBALS['wp']->query_vars['rest_route']
no está vacía.Está conectado a
parse_request
través de:pero se
parse_request
dispara más tarde queinit
: vea, por ejemplo, el Codex aquí .Hubo una sugerencia (por Daniel Bachhuber) en el boleto # 34373 con respecto
WP_Query::is_rest()
, pero fue pospuesta / cancelada.fuente
Simplemente tropecé con el mismo problema y escribí una función simple
is_rest
que le permite verificar si la solicitud actual es una solicitud WP REST API.Referencias
fuente
Para resolver este problema, escribí una función personalizada simple basada en el supuesto de que si el URI que se solicita cae dentro de la URL de la API Rest del sitio de WordPress, entonces se deduce que es una solicitud de la API Rest.
Si se trata de un punto final válido o autenticado, no es para que esta función lo determine. La pregunta es esta: ¿es la URL una posible URL de Rest API?
Si
$_SERVER['REQUEST_URI']
no está correctamente poblado, esta función seguirá regresandofalse
, independientemente.No hay una codificación rígida de la URL, por lo que si por alguna razón cambia su base de URL de API, esto se adaptará.
fuente
Tal vez no está bien, pero terminé con
No dudes en avisarme si esto no está bien. Intentando hacer un útil complemento de inicio para finalmente compartir: https://gitlab.com/ripp.io/wordpress/plugin-starter
fuente
Dos opciones aquí realmente,
REST_REQUEST
está definido.rest_api_init
donde querías engancharteinit
.fuente
Esto es lo que se me ocurrió:
Sin
parse_request
embargo, no he tenido mucho tiempo para hacer que CLI detecte las solicitudes REST antes de que la acción se active. Estoy abierto a sugerencias!Todavía tengo que escribir algunas pruebas sobre esta característica, actualizaré esta respuesta una vez que lo haga.
- Editar
Acabo de descubrir cómo WooCommerce maneja esto. WooCommerce no parece tener en cuenta los enlaces permanentes simples:
fuente