Laut diesem Beitrag gibt es keine integrierte JavaScript-API für Wordpress. Daher scheinen Entwickler, die auf AJAX aufbauen möchten, alle ihre eigene Lösung zu finden, die mir nicht richtig erscheint.
Was ich wirklich vermisse, abgesehen vom Abrufen von Posts oder anderen Daten mit einer integrierten API, ist ein kleiner Satz von JavaScript-Funktionen für die Back-End- und Front-End-Oberfläche. Ist in Bezug auf dieses Problem etwas geplant?
Zum Beispiel würde ich das gerne wissen
- Das linke Hauptmenü ist reduziert.
- Welcher Benutzer ist angemeldet?
- welche Gruppe er ist,
- sogar Kundendaten wie Browser
und so weiter.
ajax
javascript
wp-enqueue-script
api
wp-localize-script
Stackoverclan
quelle
quelle
Antworten:
TL; DR
Es gibt keine JavaScript-API im WordPress-Kern und niemand ist geplant, aber tatsächlich besteht keine Notwendigkeit dafür.
Backend
Nehmen wir zunächst an, dass in Bezug auf das Backend einige nützliche Informationen aus bereits vorhandenen globalen JavaScript-Variablen abgerufen werden können (WordPress liebt alle globalen Varianten).
Z.B
ajaxurl
für dieadmin-ajax.php
URL, die in Ajax-Aufrufen verwendet werden sollpagenow
für den aktuellen Admin-Seiten-Slug, z. B. 'Dashboard'adminpage
für aktuelle Admin-Seitendatei, zB 'index-php' (Punkte werden durch hiphens ersetzt)typenow
für aktuellen Post - Typen , während inedit.php
,post.php
oderpost-new.php
userSettings
kann verwendet werden, um Informationen über den aktuell angemeldeten Benutzer abzurufenDiese Informationen geben Ihnen einen "Kontext" des Anwendungsstatus, während Sie sich im Backend befinden.
Für andere in der Frage erwähnte Dinge benötigen Sie keine "API", da supereinfache jQuery-Funktionen den Trick ausführen können. Um beispielsweise zu wissen, ob das Admin-Menü geschlossen ist, können Sie nach der "gefalteten" Klasse in body suchen:
Dokumentationsmangel
Für Dinge wie die vorherigen Snippets lohnt es sich nicht, Funktionen zu erstellen. WP hat bereits zu viele Funktionen in PHP. Ich hoffe wirklich, dass zusätzliche Funktionen wie diese nicht zum Kern hinzugefügt werden.
Was JavaScript in WordPress wirklich benötigt, ist mehr Dokumentation für vorhandene Funktionen: Keines der Dinge, die ich oben geschrieben habe, ist in offiziellen Dokumenten wie dem Codex oder in Quelldateien dokumentiert.
Vorderes Ende?
Bis hierher habe ich nur über das Backend gesprochen.
Dies liegt daran, dass so ziemlich alle Dinge, die im Frontend passieren, mit dem aktuell verwendeten Thema zusammenhängen. Stellen wir uns vor, es gibt eine von WordPress bereitgestellte JavaScript-Datei, die Funktionen zum Abrufen von Informationen zum aktuellen Anwendungsstatus enthält. Wenn ein Thema diese JS-Datei nicht in die Warteschlange stellt, sind diese Funktionen nicht verfügbar, und es wäre absolut falsch , ein Thema zu zwingen, ein solches Skript in die Warteschlange zu stellen.
Keine (andere) API erforderlich
In WordPress können jedoch alle Informationen, die Sie über PHP erhalten, problemlos auch in JavaScript und ohne AJAX-Anfrage verwendet werden. Die Funktion, die dies ermöglicht, ist
wp_localize_script()
.Angenommen, Sie möchten den aktuellen Benutzer und die Benutzerdaten wie die Benutzerrolle in Ihrem JavaScript abrufen und möchten auch die auf der aktuellen Seite verwendeten Abfragevariablen kennen. Sie können Folgendes tun:
In Ihrem Skript ist die
MyScriptData.user
Variable ein JavaScript-Objekt mit allen Benutzerinformationen und allen Abfragevariablen.Dies gilt für Backend- und Frontend-Skripte (mit anderen Worten: für beide "Seiten"). Es ist keine zusätzliche JavaScript-API erforderlich , um diese Informationen abzurufen. PHP ist ausreichend, wenn Sie die richtigen Methoden verwenden, um Informationen von PHP an JS zu übergeben.
Backbone.js
Backbone.js ist ein JavaScript-Framework, das eine (Art) MVC- Entwicklungsmuster mit JavaScript ermöglicht. Es war im Kern von WP 3.5 enthalten - hauptsächlich für die Mediengalerie.
Diese Bibliothek ist keine WordPress-JavaScript-API, da sie sicherlich eine leistungsfähigere JavaScript-Entwicklung ermöglicht, aber dieser Bibliothek wurde keine einzige WordPress-spezifische Funktion hinzugefügt, und sie ist die einzige aktuelle Kernverwendung von Backbone.js. Die Medienbibliothek ist mehr oder weniger undokumentiert und hat keine öffentliche API. Und AFAIK ist es nicht geplant, diese Lücke zu schließen. (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 hervorgehoben , wird die WP-API Teil des Kerns sein (wahrscheinlich beginnend mit WP 4.1).
Aber ich muss sagen, dass es keine JavaScript-API ist. Es ist lediglich möglich, eine HTTP-Anforderung mit einem Anwendungsendpunkt zu verbinden, der von der WP-API gesteuert wird. Die API ruft Daten aus der Datenbank ab und gibt sie dort JSON-formatiert zurück. Beispiel aus den Dokumenten:
Da HTTP-Anforderungen und zugehörige JSON-Antworten mit jeder Sprache verarbeitet werden können , die HTTP-Anforderungen und das JSON-Datenformat unterstützt (darunter PHP, Ruby, Python, ASP usw.), besteht das Hauptziel der WP-API darin , das Abrufen und Festlegen von WordPress-Daten zu ermöglichen von Nicht-WP-Anwendungen. Das heißt, aus jeder Anwendung heraus , nicht nur aus WordPress.
Da JavaScript eine Sprache ist, die sowohl HTTP-Anforderungen als auch das 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()
+ die Ajax API + Wordpress PHP - Funktionen ist es möglich , alle Informationen , die Sie ohne zusätzliche API benötigen abzurufen. Und da alle drei "Inhaltsstoffe" WP-etablierte Standards sind, ist ihre Verwendung keine "eigene Lösung". Es werden lediglich Standardlösungen verwendet, um benutzerdefinierte (und allgemeine) Aufgaben zu erledigen. Darum geht es bei dieser Plugin-Entwicklung.Es ist sogar möglich, JavaScript zur Verwendung der WP-API zu verwenden. Nur weil die WP-API JSON zurückgibt, wird sie nicht zu einer JavaScript-API. Es ist keine JavaScript-Funktion beteiligt (eine HTTP-Anforderung wird gesendet und ein JSON-Reposnse wird zurückgegeben. Ähnlich wie bei Verwendung der AJAX-API). Andernfalls sollte jeder Dienst, der JSON zurückgibt, als WordPress JS-API betrachtet werden. Die WP-API sollte als externe Service-API betrachtet werden , die JSON zurückgibt. Möglicherweise ist die Site, die diesen JSON-Service verwendet, dieselbe, die ihn bereitstellt.
Mit der WP-API kann nichts erreicht werden, was nicht auch mit der AJAX-API möglich ist. Mit der AJAX-API können jedoch viele Dinge getan werden. aber nicht mit der WP-API.
Ein Hinweis zur WP-API + Backbone.js
Mit Backbone.js ist es möglich, Informationen in Anwendungen abzurufen und zu speichern, die RESTful HTTP-Anforderungen unterstützen.
Das Problem ist, dass WordPress sowohl in "regulären" als auch in AJAX-Anfragen alles andere als REST-fähig ist: Es unterstützt
$_GET
und$_POST
fordert standardmäßig nur Anfragen an, und die Verwendung der einen oder anderen mit derselben URl führt zu ... demselben Ergebnis .Im Gegenteil, die WP-API ist REST-fähig, sodass Backbone-basierte Anwendungen sie für leistungsstarke JavaScript-Anwendungen nutzen können. Ich würde mich jedoch davon fernhalten, Backbone- oder WP-API oder Backbone + WP-API als JavaScript-API für WordPress zu definieren über.
quelle
SHORTINIT
Sie mit Ajax viel schneller machen. Dasselbe mit der WP-API zu tun, wäre viel schwieriger. Btp, was für eine wirklich bissige App? Tipp: Verwenden Sie kein WordPress.Die JSON-REST-API, die in die Version 4.1 integriert werden soll, hat einige Entwicklungen erfahren . Ich glaube, es wird offiziell als "WP API" bezeichnet. Sie können mit der Code - Basis jetzt und halten mit den neuesten Entwicklungen beginnen hier , bis es zu Kern bekommt. Ryan McCue und Team haben ein paar ziemlich gute Dokumentation konkretisiert hier .
quelle
Während WP historisch gesehen Back-End-zentriert war, wurde seit Jahren erklärt, dass es zu einer starken JS-Nutzung übergehen soll. In Anbetracht der Verpflichtungen zur Abwärtskompatibilität ist es fraglich, ob JS bald Parität erreichen oder PHP übernehmen wird (meiner Meinung nach), aber es wurden einige Fortschritte erzielt.
Der WordPress-Administrator wird jetzt mit Backbone und Underscore ausgeliefert, die einen großen Teil der neuesten Iteration der Medienbibliothek ausmachten. Leider sind die Einzelheiten der Implementierung kritisch undokumentiert, und die Verwendung durch Dritte war relativ unbeliebt.
Das REST-API- Plugin wird als "Feature-Plugin" entwickelt, mit der offiziellen Absicht, in Zukunft in den WordPress-Kern aufgenommen zu werden.
quelle
Um Ihre Aussage zu beantworten:
Es gibt keine "eigene Lösung". Sie können Dinge erleichtern , indem Sie ATP mit
ajax_template_part()
von @GM oder ähnlichem Plugins und abkürzen, aber immer noch gibt es keine Nicht-Standard - Art und Weise mit AJAX in Wordpress zu gehen. Diese "eigenen Lösungen" / Wege (meistens) machen es falsch . AJAX-Aufrufe werden (ungefähr) folgendermaßen ausgeführt:$.ajax()
und ähnliche Funktionen, um auf Benutzerinteraktionen zu reagieren. Arbeiten Sie mit dem globalen (lokalisierten) JS-Objekt, um Daten an den PHP-Rückruf zurückzugeben.wp_send_json_success()
ähnlichen Funktionen zurück.Wenn ein Plugin oder Theme dies nicht so macht, hat der Autor die Dinge nicht gelesen oder sich keine Beispiele angesehen. Es gibt ein Skelett für das, was verwendet werden sollte.
Weitere und detaillierte Informationen zum Umgang mit AJAX in WP finden Sie im Community-Buch "WordPressTheRightWay" .
WordPress ist einfach nicht spezifisch, was Sie mit AJAX tun müssen. Aus diesem Grund können Sie so ziemlich alles in ein lokalisiertes / globalisiertes Array packen und für Ihre AJAX-Aufrufe verfügbar machen. Und das passt perfekt zur Funktionsweise von Backbone: Sie müssen Dinge tun, die Sie möchten , und Sie möchten sie tun.
Wenn Sie ein eigenwilliges JavaScript-MVC-Framework wie AngularJs verwenden möchten, sind Sie am falschen Ort. Es gibt andere CMS wie OctoberCMS, Drupal8 usw., die viel besser darin sind, eine Basis dafür bereitzustellen. In WordPress müssen Sie einen benutzerdefinierten Satz von Rewrite-Endpunkten erstellen, an dem Sie Datensätze für Ihre JS-Controller zurückgeben können.
quelle