Gibt es eine JavaScript-API? Wie kann ich auf öffentliche und private Daten in JS zugreifen?

Laut diesem Beitrag gibt es keine integrierte JavaScript-API für WordPress. Entwickler, die auf AJAX aufbauen wollen, scheinen daher alle mit einer eigenen Lösung zu kommen, die mir nicht richtig erscheint.

Was ich wirklich vermisse, abgesehen von Posts oder irgendwelchen Daten mit einer integrierten API, ist eine kleine Menge von JavaScript-functionen, die mit der Backend- und Front-End-Schnittstelle umgehen. Ist nun etwas in Bezug auf dieses Problem geplant?

Zum Beispiel würde ich das gerne wissen

  • Das linke Hauptmenü ist ausgeblendet.
  • welcher Benutzer angemeldet ist
  • Welche Gruppe er ist,
  • sogar Kundendaten wie Browser

und so weiter.

Solutions Collecting From Web of "Gibt es eine JavaScript-API? Wie kann ich auf öffentliche und private Daten in JS zugreifen?"

TL; DR

Es gibt keine JavaScript-API im WordPress-core und niemand ist geplant, aber eigentlich ist es nicht nötig.

Backend

Nehmen wir als erstes an, dass bezüglich des Backends einige nützliche Informationen von bereits vorhandenen globalen JavaScript-Variablen abgerufen werden können (WordPress liebt alle globalen Varianten).

Z.B

  • ajaxurl für die admin-ajax.php URL, die in Ajax-Aufrufen verwendet werden soll
  • pagenow für aktuelle Admin-Seite Slug, zB ‘Dashboard’
  • adminpage für die aktuelle Admin-Seitendatei, zB ‘index-php’ (Punkte werden durch hiphens ersetzt)
  • typenow in der edit.php , ” post.php oder ” post-new.php aktuellen post-new.php
  • userSettings kann verwendet werden, um Informationen zum aktuell angemeldeten Benutzer zu erhalten

Diese Informationen geben Ihnen einen “Kontext” des Anwendungsstatus, während Sie sich im Backend befinden.

Für andere Dinge, die in der Frage erwähnt werden, benötigen Sie keine “API”, weil super-einfache jQuery-functionen den Trick machen können. Um zB zu wissen, ob das Admin-Menü geschlossen ist, können Sie im Body nach der “gefalteten” class suchen:

 if ( $(body).hasClass('folded') ) { alert( 'Admin left menu is closed!' ); } else { alert( 'Admin left menu is open!' ); } 

Dokumentation fehlt

Für Dinge wie die vorherigen Snippets ist es nicht wert, functionen zu erstellen. WP hat bereits zu viele functionen in PHP. Ich hoffe wirklich, dass zusätzliche functionen wie diese nicht zum core hinzugefügt werden.

Was JavaScript in WordPress wirklich braucht, ist mehr Dokumentation für bestehende Features: keines der Dinge, die ich oben geschrieben habe, ist in offiziellen Dokumenten wie dem Codex oder in Quelldateien dokumentiert.

Vorderes Ende?

Bis hier habe ich nur über das Backend gesprochen.

Dies liegt daran, dass so ziemlich alles, was am Frontend passiert, mit dem aktuell verwendeten Thema zusammenhängt. Stellen wir uns vor, es gibt eine von WordPress bereitgestellte JavaScript-Datei, die functionen enthält, um Informationen über den aktuellen Anwendungszustand zu erhalten. Wenn ein Theme diese JS-Datei nicht in die Warteschlange einreiht, sind diese functionen nicht verfügbar und ein Theme zu erzwingen, ein solches Skript in die Warteschlange zu stellen, wäre absolut falsch.

Keine Notwendigkeit einer (anderen) API

In WordPress können jedoch alle Informationen, die Sie über PHP erhalten, problemlos auch in JavaScript und ohne AJAX-Anfrage verwendet werden. Die function, die dies ermöglicht, ist wp_localize_script() .

Nehmen wir an, Sie möchten die aktuellen Benutzer- und Benutzerdaten wie ihre Benutzerrolle in Ihrem JavaScript abrufen und Sie möchten auch die in der aktuellen Seite verwendeten Abfragevariablen kennen. Sie können Folgendes tun:

 $data = array( 'user' => wp_get_current_user(), 'query_vars' => $GLOBALS['wp']->query_vars ); wp_localize_script( 'myscript', 'MyScriptData', $data ); 

In diesem MyScriptData.user ist die MyScriptData.user Variable ein JavaScript-Objekt mit allen Benutzerinformationen für alle MyScriptData.user .

Dies gilt für Backend- und Frontend-Skripte (mit anderen Worten: für beide “Seiten”). Es ist keine zusätzliche JavaScript-API erforderlich, nur um diese Informationen abzurufen. PHP ist ausreichend, wenn Sie die richtigen Methoden verwenden, um Informationen von PHP an JS weiterzugeben.

Backbone.js

Backbone.js , ist ein JavaScript-Framework, das ein (so genanntes) MVC- Entwicklungsmuster mit JavaScript ermöglicht. Es wurde im core mit WP 3.5 aufgenommen – hauptsächlich um die Mediengalerie zu verwalten.

Diese Bibliothek ist keine WordPress-JavaScript-API, da sie sicherlich eine leistungsfähigere JavaScript-Entwicklung ermöglicht, aber dieser Bibliothek wurden keine einzelnen WordPress-spezifischen functionen hinzugefügt, und dies ist die einzige aktuelle coreverwendung von Backbone.js. Die Medienbibliothek ist mehr oder weniger undokumentiert und hat keine öffentliche API. Und AFAIK ist nicht geplant, diese Lücke zu füllen. (Mehr als glücklich, diese Aussage zu ändern / zu entfernen – wenn jemand mir das Gegenteil beweisen kann).

WP-API

Wie von Rarst und Brian Fegter aufgezeigt , wird die WP-API Teil des cores sein (wahrscheinlich beginnend mit WP 4.1).

Aber ich muss sagen, dass es keine JavaScript-API ist. Es ermöglicht nur das Verbinden einer HTTP-Anfrage mit einem Anwendungsendpunkt, der von der WP-API gesteuert wird. Und die API holt Daten von der database und gibt sie dort als JSON formatiert zurück. Beispiel aus der Dokumentation:

Möchten Sie die Posts Ihrer Website erhalten? Senden Sie einfach eine GET Anfrage an /wp-json/posts . Benutzer mit ID 4 aktualisieren? Senden Sie eine POST Anfrage an /wp-json/users/4 . Erhalten Sie alle Beiträge mit dem Suchbegriff “awesome”? GET /wp-json/posts?filter[s]=awesome .

Da HTTP-Anfragen und zugehörige JSON-Antworten mit jeder Sprache behandelt werden können , die HTTP-Anfragen und das JSON-Datenformat (darunter PHP, Ruby, Python, ASP usw.) unterstützt, ist es das Hauptziel der WP-API , WordPress-Daten abzurufen und zu setzen aus Nicht-WP-Anwendungen. Das bedeutet von innen jede Anwendung , nicht nur WordPress.

Da JavaScript eine Sprache ist, die sowohl HTTP-Anfragen als auch JSON-Format verarbeiten kann, können Sie die WP-API auch in WordPress-JavaScript verwenden. Jemand arbeitet auch an einem WP-js-Client für diese API, aber

  • Mit wp_enqueue_script() + den Ajax API + WordPress PHP-functionen ist es möglich, alle benötigten Informationen ohne zusätzliche API abzurufen. Und da alle drei “Zutaten” WP-Standards sind, ist deren Verwendung keine “eigene Lösung”. Es verwendet nur Standardlösungen, um benutzerdefinierte (und allgemeine) Aufgaben zu erledigen, worum es bei dieser Plugins-Entwicklung geht.

  • Es ist sogar möglich, JavaScript zu verwenden, um die WP-API zu verwenden. Nur weil die WP-API JSON zurückgibt, wird sie nicht zu einer JavaScript-API. Es ist keine JavaScript-function beteiligt (eine HTTP-Anfrage wird gesendet und eine JSON-Reposnse wird zurückgegeben. Ziemlich genau das Gleiche wie bei der Verwendung der AJAX-API). Andernfalls sollte jeder Dienst, der JSON zurückgibt, als WordPress JS API betrachtet werden. Die WP-API sollte als eine externe Service-API betrachtet werden , die JSON zurückgibt, und es kann der Fall sein, dass die Site, die diesen JSON-Service konsumiert, derselbe ist, der sie bereitstellt.

  • Es gibt keine einzige Sache, die mit WP API getan werden kann, die nicht auch getan werden kann, indem man die AJAX API verwendet. Aber es gibt viele Dinge, die mit der AJAX-API erledigt werden können. aber nicht mit der WP-API.

Ein Hinweis auf die WP-API + Backbone.js

Mit Backbone.js können Informationen in Anwendungen abgerufen und gespeichert werden, die REST-konforme HTTP-Anforderungen unterstützen.

Das Problem ist, dass WordPress, sowohl in “normalen” Anfragen als auch in AJAX, alles andere als RESTful ist: Es unterstützt nur standardmäßig $_GET und $_POST Anfragen, und die Verwendung des einen oder anderen mit derselben URL endet in .. Das gleiche Ergebnis.

Im Gegensatz dazu ist die WP-API RESTful, sodass Backbone-basierte Anwendungen diese für leistungsstarke JavaScript-Anwendungen nutzen können, aber ich würde von der Definition der Backbone- oder WP-API oder Backbone + WP-API als JavaScript-API für WordPress absehen über.

Es hat einiges an Entwicklung rund um die JSON-REST-API gegeben, die in die 4.1-Version integriert werden soll . Ich glaube, es wird offiziell als “WP API” bezeichnet. Sie können jetzt mit der Verwendung der Codebasis beginnen und sich mit den neuesten Entwicklungen vertraut machen, bis es zum core kommt. Ryan McCue und sein Team haben hier eine ziemlich gute Dokumentation erstellt.

Während WP in der Vergangenheit ein Back-End-Centric war, gab es seit Jahren eine Deklaration, die sich mit der Hinwendung zu einem starken JS-Einsatz befasste. Angesichts der Abwärtskompatibilität ist es fraglich, ob JS in absehbarer Zeit Parität erreichen oder PHP übernehmen wird (meiner Meinung nach), aber es gab einige Fortschritte.

Der WordPress-Admin wird jetzt mit Backbone und Underscore ausgeliefert, was ein großer Teil der letzten Medienbibliotheksiteration war. Leider sind die Einzelheiten der Implementierung kritisch undokumentiert und die Verwendung durch Dritte ist relativ unpopulär.

Das REST-API- Plugin wird als “Feature-Plugin” mit der offiziellen Absicht entwickelt, in Zukunft in den WordPress-core aufgenommen zu werden.

Um deine Aussage zu beantworten:

[…] es gibt keine eingebaute JavaScript API für WordPress. Entwickler, die auf Ajax aufbauen wollen, scheinen daher alle mit einer eigenen Lösung zu kommen, die mir nicht richtig erscheint.

Es gibt keine “eigene Lösung”. Sie können Dinge erleichtern, indem Sie ATP mit ajax_template_part() von @GM oder ähnlichen Plugins verwenden und eine Abkürzung nehmen, aber es gibt immer noch keine unübliche Möglichkeit, mit AJAX in WordPress zu arbeiten. Diese “eigenen Lösungen” / Wege (meistens) machen es falsch . AJAX-Aufrufe werden (grob) so gemacht:

  1. Registrieren Sie den AJAX-Callback bei kontextsensitiven Hooks (öffentlich oder privat / eingeloggt)
  2. Skript registrieren, einreihen und lokalisieren
  3. Verwenden Sie jQuery $.ajax() und ähnliche functionen, um auf Benutzerinteraktionen zu reagieren. Arbeiten Sie mit dem globalen (lokalisierten) JS-Objekt, um Daten an den PHP-Callback zurückzugeben.
  4. Innerhalb der PHP-Cb, validieren, filtern und bereinigen Sie Daten, überprüfen Sie auf Nonces und Referrers, tun Sie Ihre DB Zeug und geben Sie JSONifies Daten mit wp_send_json_success() und ähnlichen functionen.

Wenn ein Plugin oder ein Theme dies nicht tut, hat der Autor die Dinge nicht gelesen oder sich keine Beispiele angesehen. Es gibt ein Skelett für das, das benutzt werden sollte.

Weitere und detaillierte Informationen zum Umgang mit AJAX in WP finden Sie im Community-Buch “WordPressTheRightWay” .

Was ich wirklich vermisse, abgesehen von Posts oder irgendwelchen Daten mit einer integrierten API, ist ein kleiner Satz von Javascript-functionen, um mit der Backend- und Frontend-Schnittstelle umzugehen. […] Zum Beispiel würde ich gerne wissen, dass das linke Hauptmenü kollabiert ist, oder welcher Benutzer angemeldet ist oder welche Gruppe er ist, oder sogar Client-Daten wie Browser und so weiter.

WordPress ist einfach nicht spezifisch in was Sie mit AJAX tun müssen. Deshalb können Sie so ziemlich alles in ein lokales / globalisiertes Array stopfen und es für Ihre AJAX-Anrufe verfügbar machen. Und das passt perfekt zur functionsweise von Backbone: Man muss Dinge tun, die man gerne möchte .

Wenn Sie ein rechthaberisches JavaScript-MVC-Framework wie AngularJs verwenden möchten, sind Sie an der falschen Stelle. Es gibt andere CMS wie OctoberCMS, Drupal8, etc., die viel besser darin sind, eine Basis dafür zu bieten. WordPress würde erfordern, dass Sie einen benutzerdefinierten Satz von Endpunkten erstellen, wo Sie Datensätze für Ihre JS-Controller zurückgeben können.