Ist die Wordpress-REST-API in einer Vanilla Wordpress 4.7-Installation installiert und aktiviert?

29

Ich habe gerade Wordpress 4.7 installiert. Eine der Erwähnungen in der Ankündigung ist, dass es eine REST-API bietet.

Mein Verständnis ist:

  • Das Wordpress REST API-Plugin wird nicht mehr benötigt, da es vermutlich bereits mit dem Core in Wordpress 4.7 zusammengeführt wurde.
  • Die Wordpress-REST-API ist standardmäßig aktiviert

Ich stelle jedoch fest, dass in einer Vanilla Wordpress 4.7-Installation keiner der Endpunkte zu funktionieren scheint (zum Beispiel http://examples.com/wp-json/wp/v2/posts).

Wie kann ich feststellen, ob die neue REST-API wirklich aktiviert ist? Kann die REST-API mit der Benutzeroberfläche von Vanilla Wordpress aktiviert oder deaktiviert werden, oder sollte ich ein Plugin eines Drittanbieters installieren, um dies zu tun?

Pep
quelle
1
Befindet sich ein Discovery-Tag in der Seitenquelle? <link rel='https://api.w.org/' href='https://example.com/wp-json/' />Scheint nur auf meinen Websites zu arbeiten.
Rarst
@Rarst, wenn ich grep -r "<link rel='https://api.w.org/'" .im htmlVerzeichnis bin , gibt es einen Treffer in der Datei ./wp-includes/rest-api.phpmit diesem Text zurück:echo "<link rel='https://api.w.org/' href='" . esc_url( $api_root ) . "' />\n";
Pep
Nicht in Ihrem Source - Code, in dem HTML - Quellcode einer Seite von Ihrer Website in Browser.
Rarst
1
@Rarst, ja, ich verstehe<link href="http://example.com/wp-json/" rel="https://api.w.org/">
Pep
Was bringt Ihnen das Öffnen des Links im Browser? Mit WP_DEBUG aktiviert?
Rarst

Antworten:

21

4.7 hat es standardmäßig aktiviert. Die einfache Möglichkeit zu überprüfen, ob es funktioniert, besteht darin, die URL example.com/wp-json zu besuchen. Dort sollten Sie eine Liste der registrierten Endpunkte erhalten

Es gibt keine offizielle Option, um es zu deaktivieren, da (zumindest wurde darüber geredet, ob es in der Version verfügbar ist) einige Kernfunktionen davon abhängen.

Die naheliegendsten Dinge, auf die Sie achten sollten, wenn es nicht funktioniert, sind Ihre htaccess-Regeln. Haben Sie ein wp-json-Verzeichnis?

Mark Kaplun
quelle
Ich habe kein wp-json-Verzeichnis unter /var/www/htmloder seinen Unterverzeichnissen. Ich habe anscheinend keine .htaccessDatei (außer /var/www/html/wp-content/plugins/akismet/.htaccesssollte ich eine haben?
Pep
@Pep, welchen Webserver benutzt du? Hast du hübsche Permalinks?
Mark Kaplun
Apache. Ich habe genau die Schritte in diesen Tutorials befolgt, um Wordpress 4.7 unter AWS zu installieren: docs.aws.amazon.com/AWSEC2/latest/UserGuide/install-LAMP.html und docs.aws.amazon.com/AWSEC2/latest/UserGuide/…
Pep
Nicht vertraut mit AWS, aber wenn Sie Vanilla WordPress installiert haben, sollten Sie einen .htaccess im Stammverzeichnis Ihrer Installation haben. Wenn Sie nicht versuchen, zu Einstellung> Permalinks zu wechseln, vergewissern Sie sich, dass Sie sich nicht in der normalen Einstellung befinden, speichern Sie und überprüfen Sie, ob ein HTAccess generiert wurde
Mark Kaplun,
6
Ich habe endlich das Problem gefunden. Da ich nicht wusste, dass Permalink erforderlich ist, damit die REST-API funktioniert, habe ich bei der Ersteinrichtung den AllowOverride Allim <Directory "/var/www/html">Abschnitt von festgelegten Schritt übersprungen /etc/httpd/conf/httpd.conf. Deshalb hat es meine Änderungen an ignoriert .htaccess. Mit einem anderen Permalink als PLain funktionieren die REST-API-Endpunkte jetzt.
Pep
11

Ich hatte 4,7 auch gedacht, dass die REST-API deaktiviert war, aber ich wurde durch die URL ausgetrickst. Um die richtige URL zu finden, suchen Sie eine Zeile, die ungefähr so ​​aussieht:

link rel = ' https://api.w.org/' href = ' http://mysite?rest_route=/' />. Also, mit http: // mysite? Rest_route = / als Präfix mein Problem gelöst. Um beispielsweise die Posts wiederherzustellen, muss Folgendes eingegeben werden : http: // mysite? Rest_route = / wp / json

Ich konnte in der Dokumentation nicht finden, dass der Abfrageparameter benötigt wurde. War ich der einzige?

Edward
quelle
Arbeitete für mich mit WordPress 4.8.x Nicht sicher, warum dies nirgendwo dokumentiert ist.
Anirudha
2
Nicht der einzige. Ich habe diese Antwort erst nach 10 Minuten in deinem Kommentar gefunden. Erforderlich zu tun:www.example.com?rest_route=/wp/v2/posts
Eugene K
3
Ich denke, das passiert, wenn hübsche Permalinks nicht aktiviert sind. From the docs ... "Bei Websites ohne hübsche Permalinks wird die Route stattdessen als rest_route-Parameter zur URL hinzugefügt. Im obigen Beispiel wäre die vollständige URL dann example.com/?rest_route=/wp/v2/posts / 123 "
Giles Butler
1

Ich sehe, dass Sie das Problem behoben haben, aber meine Lösung hier belassen, da sie auch für mich funktioniert hat. Ich hatte das gleiche Problem beim Update von Beta15 auf die Core-API in WP 4.7. Es stellte sich heraus, dass ich einige Plugins hatte, die eine veraltete Funktion register_api_field verwendeten, die ich gemäß diesem Hinweis im Changelog in register_rest_field änderte:

BREAKING CHANGE: Benenne register_api_field () in register_rest_field () um.

Führt eine register_api_field () -Funktion für die Rückwärtskompatibilität ein, die _doing_it_wrong () aufruft. Register_api_field () wird jedoch niemals für WordPress-Core festgeschrieben, daher sollten Sie Ihre Funktionsaufrufe aktualisieren.

Teambeschuss
quelle
1

Wenn die REST-API nicht sofort oder nach einer Neuinstallation und nach dem Eingeben funktioniert

mydomain/wp-json/wp/v2/posts 

dann müsstest du einfach deine "permalinks" als post_name ausfindig machen:

WP Dashboard-> Einstellungen-> Permalinks

Wenn Sie keine Permalinks aktivieren möchten, können Sie einfach Folgendes eingeben:

mydomain?rest_route=/wp/v2/posts

Mann, ich wünschte, WordPress würde sein Rest-Handbuch aktualisieren, um benutzerfreundlicher zu sein. Ich mag die alte Version von docs :)

samjco
quelle