Ich habe einen benutzerdefinierten Beitragstyp, auf den ich über jQuery zugreifen möchte - vorzugsweise mit JSON.
Also das Wichtigste zuerst. Das Erstellen einer Funktion, die / echos json zurückgibt, ist einfach genug, aber wie würde ich über jquery darauf zugreifen.
Wie Mike in dieser Frage schreibt , platziert er sie - soweit ich das verstehe - in der WordPress-Wurzel. was würde es mit dem PHP-Dateinamen zugänglich machen - aber ist dies empfehlenswert? Ich würde es lieber in einen Plugin-Ordner legen.
Ich habe versucht, den WordPress-Codex zu lesen, aber die Art und Weise, wie Ajax-Aufrufe behandelt werden, verwirrt mich nur, da Sie jeden Ajax-Aufruf an admin-ajax.php senden, obwohl es sich nicht um eine Admin-Seite handelt.
Kann jemand bitte die Probleme klären, die ich habe?
/Sturm
bearbeiten
Das Problem, das ich hatte, war zu verstehen, wie Ajax-Anrufe in WordPress getätigt werden sollten und wo Sie Ihren PHP- und JS-Code platzieren müssen, um die Anrufe zu erledigen / zu bearbeiten.
Bei der anderen Frage, auf die ich verlinkt habe, haben Sie eine Funktion erstellt, mit der die Datei im WP-Stammverzeichnis abgelegt wird - das möchte ich nicht. Aber ich habe jetzt gelernt, wie man die wp_ajax_ (nopriv _) [Aktion] benutzt und kann effektiv auf den von mir erstellten json zugreifen. Das verbleibende Problem ist, wo ich den JS platzieren sollte, um den Anruf zu tätigen. Ich möchte es in die js-Datei des Plugins einfügen, aber da dies auf einer Seite dargestellt werden soll, nicht auf der Admin-Site, ist Ajaxurl nicht definiert, daher muss ich mit PHP nachhaken.
echo admin_url('admin-ajax.php');
So wird die Frage, wie ich dieses PHP mit dem Javascript kombinieren und wie ich es dann in die Warteschlange stellen soll, da es keine Datei oder ein Skript ist.
Antworten:
Ajax Handler
Es ist in der Tat ein bisschen verwirrend, dass sich der Ajax-Handler im
wp-admin/
Verzeichnis befindet, aber ja, Sie können und sollten ihn auch für Nicht-Administrator-Anforderungen verwenden. Sie registrieren dann einen Handler für denwp_ajax_nopriv_[action]
Hook anstelle des normalenwp_ajax_[action]
. In diesem Fall müssen Sie nur den ersten Zeilen vonadmin-ajax.php
folgen , da eine Anforderung eines nicht angemeldeten Benutzers die Seite bereits um Zeile 50 herum verlässt.Registrieren Sie also eine Funktion für den Hook
wp_ajax_nopriv_get_custom_post_data
, und sie wird aufgerufen, wenn Sieadmin-ajax.php
mit demaction
Parametersatz auf nachfragenget_custom_post_data
. Rufen Siedie()
am Ende Ihres Handlers unbedingt selbst an, da sonst die Standardeinstellung zurückgegebendie(-1)
wird. Registrieren Sie auch die angemeldete Versionwp_ajax_get_custom_post_data
(für dieselbe Handlerfunktion kein Problem), da Sie dennopriv
Haken nicht treffen, wenn Sie an Ihrer Site angemeldet sind .Serverseitige Konfiguration zu Javascript
Der Trick, serverseitige Konfigurationsdaten (wie die
admin-ajax.php
URL) zu senden , istwp_localize_script()
. Sie übergeben ihm ein Array von Schlüsseln und Werten, die oben auf der Seite angezeigt werden. Dies wurde wahrscheinlich ursprünglich nur für lokalisierbare Zeichenfolgen erstellt, aber Sie können es auch zum Übergeben von Konfigurationsdaten verwenden.storm_json_config
ist der Handle-Name (falls Sie ihn später aus der Warteschlange entfernen möchten),storm_config
der Name des Javascript-Objekts, das Ihre Daten enthält. So kann Ihre statische Javascript-Datei eine Zeile wie enthaltenjQuery.post(storm_config.ajaxurl, ...)
.Siehe auch die Antwort von bueltge auf eine ähnliche Frage .
Statisches Javascript aus dem Plugin-Verzeichnis
Um eine statische Javascript-Datei aus Ihrem eigenen Plugin-Verzeichnis zu laden, verwenden Sie
wp_enqueue_script()
. Das würde ungefähr so aussehen:Wo
storm_json
ist wieder ein Handle-Name, dann geben Sie den Link zu der Datei, dann die Abhängigkeiten (können seinnull
) und dann eine Versionsnummer, die nach der Aufforderung hinzugefügt wird, Browser-Caches bei Updates zu schlagen.quelle
wp_localize_script()
der Sie Konfigurationsdaten von der Serverseite an den Browser senden können. (Kleiner Tipp: Wenn Sie@
einen Benutzernamen hinzufügen , erhält diese Person eine Benachrichtigung über Ihre Antwort. Stellen Sie also@Mike: I updated the title
sicher, dass sie Ihren Kommentar sieht.)