Kann ich die REST-API im einfachen Permalink-Format verwenden?

9

Vor kurzem haben alle meine REST-API-Anforderungen plötzlich einen 404-Fehler zurückgegeben: Jede Anforderung (unabhängig vom benutzerdefinierten Endpunkt oder integriert).

Dann dachte ich, es liegt an der Struktur von Permalink. /wp-json/ist unter einfachem Permalink nicht zugänglich, da momentan einfach keine Umleitungsregel verfügbar ist.

Ist es in dieser Situation möglich, die REST-Endpunkte zu verwenden? Sowohl kundenspezifisch als auch eingebaut.

Jack Johansson
quelle

Antworten:

16

Ja, du kannst. Fügen Sie einfach den rest_routeAbfrageparameter hinzu.

Damit

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

würde werden

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

Oder https://wordpress.org/wp-json/wp/v2/würde https://wordpress.org/?rest_route=/wp/v2Ihnen ein vollständigeres Beispiel geben.

Sie fragen sich also, wie Sie entscheiden sollen, welches Sie verwenden möchten? Keine Sorge mehr, dafür gibt es eine Funktion:get_rest_url()

Eine weitere Option ist die Tatsache, dass sich <link>im Header standardmäßig ein API-Stammverzeichnis befindet.

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

Für den Fall, dass Sie dies von der Client-Seite aus herausfinden müssen, verwenden Sie einfach etwas in der Art von

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

Grundsätzlich sollten Sie das wp-jsonTeil nicht wie angegeben nehmen (und fest codieren), sondern es immer dynamisch erstellen, entweder mit get_rest_url()oder mit dem oben genannten JS-Ansatz.

Kraftner
quelle
Also, wenn ich es in der Ebene verwenden möchte, wäre es so etwas wie https://wordpress.org/?rest_route=SOMEPATH&value1=X&value2=Y? Dies bedeutet, dass ich eine Bedingung haben muss, um die Permalink-Struktur zu erkennen und die REST-Route basierend darauf zu ändern.
Jack Johansson
Nun, vielleicht keine Bedingung, aber Sie müssen es dynamisch erstellen. Siehe Änderungen oben.
Kraftner
Wie würden Sie diese Route mit jsonp verwenden? Ich habe versucht, /?rest_route=/?_jsonp=callBackfnaber einen 404-Status zu bekommen.
Rotverschiebung
@redshift Normalerweise öffnen Sie bitte eine separate Frage für solche Dinge. In Ihrem Fall sollten Sie oben auf Query - String - Trennzeichen lesen en.wikipedia.org/wiki/Query_string#Structure Sie es schreiben bräuchten wie dieser/?rest_route=/&_jsonp=callBackfn
Kräftner
1

Sie können eine Umschreibung auf Ihrem Webserver hinzufügen.

ZB für Nginx

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

Der rest_routeAbfrageparameter ist der UglyStil von Permalink (Wordpresss Wortwahl nicht meiner). Sie können den Permilink-Stil Post nameso ändern, wie in der Abbildung unten dargestellt, und die wp-jsonRoute sollte in der URL nicht mehr zugänglich sein. Es ist möglich, dass andere dieser Permilink-Stile funktionieren, aber Post namesie haben für mich funktioniert und ich habe sie nicht weiter untersucht

Das Bild zeigt die Tastenklicks, die zum Ändern der Einstellungen erforderlich sind

Max Carroll
quelle