Je commence un peu avec l'API REST. Si je ne suis pas complètement trompé, le init
hook d'action est également exécuté lorsqu'il s'agit d'une demande d'API REST. Maintenant, je veux exécuter du code uniquement, lorsqu'il ne s'agit pas d'une demande d'API REST.
Je cherchais donc une commande comme is_rest()
pour faire quelque chose comme
<?php
if( ! is_rest() ) echo 'no-rest-request';
?>
Mais je n'ai pas pu trouver quelque chose comme ça. Y en a-t-il is_rest()
là-bas?
init
. Notez également que les parties de l'API peuvent être utilisées en interne sur des requêtes qui ne sont pas des requêtes REST, vous risquez donc de casser quelque chose si vous comptez sur cette détection.Réponses:
C'est un bon point par @Milo, la
REST_REQUEST
constante est définie commetrue
, à l'intérieurrest_api_loaded()
si$GLOBALS['wp']->query_vars['rest_route']
est non vide.Il est accroché dans
parse_request
via:mais
parse_request
tire plus tard queinit
- Voir par exemple le Codex ici .Il y avait une suggestion (par Daniel Bachhuber) dans le ticket # 34373 concernant
WP_Query::is_rest()
, mais elle a été reportée / annulée.la source
Je suis juste tombé sur le même problème et j'ai écrit une fonction simple
is_rest
qui vous permet de vérifier si la demande actuelle est une demande d'API WP REST.Les références:
la source
Pour résoudre ce problème, j'ai écrit une fonction personnalisée simple basée sur l'hypothèse que si l'URI demandée tombe sous l'URL Rest API du site WordPress, il s'ensuit qu'il s'agit d'une requête API Rest.
Qu'il s'agisse d'un point de terminaison valide ou authentifié, ce n'est pas à cette fonction de le déterminer. La question est la suivante: l'URL est-elle une URL potentielle de l'API Rest?
Si votre
$_SERVER['REQUEST_URI']
n'est pas correctement renseigné, cette fonction reviendrafalse
quand même.Il n'y a pas de codage en dur de l'URL, donc si pour une raison quelconque vous changez la base de votre URL API, cela s'adaptera.
la source
Peut-être pas bien, mais je me suis retrouvé avec
N'hésitez pas à me faire savoir si ce n'est pas bien. Essayer de créer un plugin utile pour éventuellement partager: https://gitlab.com/ripp.io/wordpress/plugin-starter
la source
Deux options ici vraiment,
REST_REQUEST
est défini.rest_api_init
vous là où vous vouliez vous connecterinit
.la source
Voici ce que j'ai trouvé:
parse_request
Cependant, je n'ai pas eu beaucoup de temps pour faire en sorte que CLI détecte les demandes REST avant que l' action ne se déclenche. Je suis ouvert aux suggestions!Je n'ai pas encore écrit de tests sur cette fonctionnalité, je mettrai à jour cette réponse une fois que je le ferai.
-- Éditer
Je viens de découvrir comment WooCommerce gère cela. WooCommerce ne semble pas prendre en compte les permaliens simples:
la source