Puis-je utiliser l'API REST sur un format de permalien ordinaire?


9

Récemment, toutes mes demandes REST-API se sont soudainement retournées pour renvoyer une erreur 404, chaque demande (quel que soit le point de terminaison personnalisé ou intégré).

Ensuite, j'ai pensé que c'était à cause de la structure du permalien. /wp-json/n'est pas accessible sous un simple permalien, car il n'y a tout simplement pas de règle de redirection disponible pour le moment.

Est-il possible d'utiliser les points de terminaison REST dans cette situation? À la fois personnalisé et intégré.

Réponses:


16

Oui, vous pouvez. Ajoutez simplement le rest_routeparamètre de requête.

Donc

https://wordpress.org/wp-json/

deviendrait

https://wordpress.org/?rest_route=/

Ou https://wordpress.org/wp-json/wp/v2/deviendrait https://wordpress.org/?rest_route=/wp/v2pour vous donner un exemple plus complet.

Vous vous demandez donc comment décider lequel utiliser? Ne vous inquiétez plus, il y a une fonction pour cela:get_rest_url()

Une autre option est le fait que par défaut, il y a un <link>en-tête qui vous donne la racine de l'API.

<link rel='https://api.w.org/' href='https://wordpress.org/wp-json/' />

Donc, si vous avez besoin de comprendre cela du côté client, JS utilise simplement quelque chose comme

document.querySelectorAll('link[rel="https://api.w.org/"]')[0].getAttribute('href');

Donc, fondamentalement, vous ne devriez pas prendre la wp-jsonpartie comme donnée (et la coder en dur) mais toujours la construire dynamiquement en utilisant get_rest_url()ou l'approche JS mentionnée ci-dessus.


Donc, si je veux l'utiliser en clair, ce serait quelque chose comme ça https://wordpress.org/?rest_route=SOMEPATH&value1=X&value2=Y? Cela signifie que je dois avoir un conditionnel pour détecter la structure de permalien et modifier la route REST en fonction de cela?
Jack Johansson

Eh bien, ce n'est peut-être pas un conditionnel, mais vous devez le créer dynamiquement. Voir les modifications ci-dessus.
kraftner

comment utiliseriez-vous cette route avec jsonp? J'ai essayé /?rest_route=/?_jsonp=callBackfnmais j'ai obtenu le statut 404.
redshift

@redshift Habituellement, veuillez ouvrir une question distincte pour des choses comme celles-ci. Dans votre cas, vous devriez lire les délimiteurs de chaîne de requête en.wikipedia.org/wiki/Query_string#Structure Vous auriez besoin de l'écrire comme ceci/?rest_route=/&_jsonp=callBackfn
kraftner

1

Vous pouvez ajouter une réécriture sur votre serveur Web.

Par exemple pour nginx

location ~ ^/wp-json/ {
    rewrite ^/wp-json/(.*?)$ /?rest_route=/$1 last;
}

0

Le rest_routeparamètre de requête est le Uglystyle (le choix de mots de Wordpress n'est pas le mien) de Permalink. Vous pouvez changer le style de permilink Post namecomme illustré dans la capture d'écran ci-dessous et l' wp-jsonitinéraire devrait être accessible dans l'URL. Il est possible que d'autres de ces styles permilink fonctionnent, mais cela a Post namefonctionné pour moi et je n'ai pas exploré au-delà

Image illustrant les clics sur les boutons requis pour modifier les paramètres

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.