Verwenden wp_die()
ist die beste dieser Optionen.
Wie andere angemerkt haben, gibt es viele Gründe, eine WordPress-spezifische Funktion der einfachen vorzuziehen, die
oder exit
:
- Es erlaubt anderen Plugins, sich in die von aufgerufenen Aktionen einzuklinken
wp_die()
.
- Es ermöglicht die Verwendung eines speziellen Handlers zum Beenden basierend auf dem Kontext (dem Verhalten von
wp_die()
wird basierend darauf angepasst, ob die Anforderung eine Ajax-Anforderung ist oder nicht).
- Es macht es möglich, Ihren Code zu testen.
Der letzte ist wichtiger, weshalb ich diesen Vermerk in den Kodex aufgenommen habe . Wenn Sie Unit- / Integrationstests für Ihren Code erstellen möchten , können Sie keine aufrufende exit
oder die
direkt aufrufende Funktion testen . Das Skript wird beendet, wie es soll. Die Art und Weise, wie WordPress-eigene Tests eingerichtet werden, um dies zu vermeiden (für die Ajax-Rückrufe, für die es Tests gibt), besteht darin, sich in die von ausgelösten Aktionen einzuklinken wp_die()
und eine Ausnahme auszulösen. Dadurch kann die Ausnahme innerhalb des Tests abgefangen und die Ausgabe des Rückrufs (falls vorhanden) analysiert werden.
Das einzige Mal, das Sie verwenden die
oder verwenden würden, exit
ist, wenn Sie eine spezielle Behandlung umgehen wp_die()
und die Ausführung sofort beenden möchten . Es gibt einige Stellen, an denen WordPress dies ausführt (und andere Stellen, an denen WordPress möglicherweise die
direkt verwendet wird, nur weil die Verarbeitung von ausgeführtwp_die()
noch nicht wichtig ist oder niemand versucht hat, Tests für ein Stück Code zu erstellen, sodass dies übersehen wurde). Denken Sie daran, dass dies auch das Testen Ihres Codes erschwert. Daher wird er im Allgemeinen nur in Code verwendet, der sich ohnehin nicht in einem Funktionskörper befindet (wie dies in WordPress der Fall ist admin-ajax.php
). Also, wenn die Behandlung von wp_die()
ausdrücklich nicht gewünscht ist, oder Sie das Skript an einem bestimmten Punkt vorsichtshalber beenden (wie zadmin-ajax.php
In der Erwartung, dass Ajax-Rückrufe normalerweise bereits ordnungsgemäß beendet wurden, sollten Sie die die
direkte Verwendung in Betracht ziehen .
In Bezug auf wp_die()
vs wp_die( 0 )
, was Sie verwenden sollten, hängt davon ab, wie die Antwort auf diese Ajax-Anfrage auf dem Front-End behandelt wird. Wenn ein bestimmter Antworttext erwartet wird, müssen Sie diese Nachricht (oder in diesem Fall eine Ganzzahl) an übergeben wp_die()
. Wenn nur auf eine erfolgreiche 200
Antwort gewartet wird ( Antwortcode oder was auch immer), muss nichts weiter übergeben werden wp_die()
. Ich würde jedoch bemerken, dass ein Ende mit wp_die( 0 )
die Antwort von der Standardantwort ununterscheidbar machen würde admin-ajax.php
. 0
Wenn Sie also mit enden , sehen Sie nicht, ob Ihr Rückruf ordnungsgemäß verbunden und tatsächlich ausgeführt wurde. Eine andere Nachricht wäre besser.
Wie in anderen Antworten ausgeführt, werden Sie häufig wp_send_json()
et al. Dies ist hilfreich, wenn Sie eine JSON-Antwort zurücksenden. Dies ist im Allgemeinen eine gute Idee. Dies ist auch besser als das bloße Aufrufen wp_die()
mit einem Code, da Sie bei Bedarf viel mehr Informationen in ein JSON-Objekt zurückgeben können. Wenn Sie wp_send_json_success()
und verwenden, wp_send_json_error()
wird die Erfolgs- / Fehlermeldung auch in einem Standardformat zurückgesendet, das alle von WordPress bereitgestellten JS Ajax-Hilfsfunktionen verstehen (wie wp.ajax
).
TL; DR: Sie sollten wahrscheinlich immer verwenden wp_die()
, ob in einem Ajax-Rückruf oder nicht. Noch besser, senden Sie Informationen mit wp_send_json()
und Freunden zurück.
die
anstelle von verwendenwp_die()
.die()
und manchmal verwendet wirdwp_die()
.die()
, ist es in einigen Fällen nur Legacy-Code oderdie()
wird verwendet, um das Skript als letzten Ausweg zu beenden, wenn etwas wirklich Unerwartetes passiert ist undwp_die()
nicht aufgerufen wurde. In anderen Fällen hat niemand Tests für einen Code erstellt, und die spezielle Behandlung vonwp_die()
wird nicht speziell benötigt, sodass sie übersehen wurde.Aus dem Codex AJAX in Plugins
quelle
wp_send_json_*
Funktionen alle verwenden,wp_send_json
die immer noch anruftwp_die
wp_send_json
der Antwort einen Hinweis hinzuzufügen ?Sie können auch
wp_send_json()
im Codex als beschrieben verwendensend a JSON response back to an AJAX request, and die().
Wenn Sie also ein Array zurückgeben müssen, müssen Sie Ihre Funktion nur mit beenden
wp_send_json($array_with_values);
. Keine Notwendigkeitecho
oderdie
.Sie erhalten auch zwei Funktionen Hilfe Helfer
wp_send_json_success()
undwp_send_json_error()
welche fügt einen Schlüssel mit dem Namen ,success
der seintrue
oderfalse
sind.Beispielsweise:
quelle
wp_json_encode
Was ist in diesem Fall, wenn eine Ausnahme false zurückgibt?wp_send_json()
ist der beste Weg? Warum?wp_send_json()
macht ein paar Sachen für uns. Diese Frage beschäftigt sich auch mitwp_send_json()
.Für die Verwendung von WordPress Ajax / Woo Commerce Ajax lautet die allgemeine Syntax wie folgt:
Sie sollten wp_die () am Ende der Funktion verwenden. WordPress verwendet intern einen Filter während der Funktion wp_die (). Daher funktioniert ein Plugin, das diesen Filter verwendet, möglicherweise nicht, wenn wir nicht wp_die () einschließen. Auch die () und andere Funktionen beenden die PHP-Ausführung sofort, ohne eine WordPress-Funktion zu berücksichtigen, die beim Beenden der Ausführung berücksichtigt werden sollte.
Wenn Sie wp_send_json () verwenden, funktionieren Sie so
Es ist nicht erforderlich, wp_die () am Ende zu verwenden, wenn Sie wp_send_json () in die Rückruffunktion einschließen . weil wordpress selbst die Funktion wp_die () sicher innerhalb der Funktion wp_send_json () verwendet.
quelle
Dies ist nur eine Ergänzung zu dem, was andere gesagt haben. Der Grund dafür
wp_die
ist, dass core dort Aktionen auslösen kann und Plugins Dinge wie Tracing, Monitoring oder Caching ordnungsgemäß abschließen können.Im Allgemeinen sollten Sie einen Kern-API-Aufruf immer einem verfügbaren vorziehen, da er höchstwahrscheinlich einen Wert hinzufügt (Caching, Plug-in-Integration oder was auch immer), den Sie nicht durch den direkten PHP-Aufruf erhalten.
quelle
Ich werde diese Antwort nicht akzeptieren, das wäre nicht fair. Ich wollte nur eine Übersicht und mögliche Hinweise zu den Elementen erstellen, die ich für wichtig halte:
Die Hauptdefinition von wp-die ()
wp_send_json
wp_doing_ajax
Typischerweise ist das, was wir von einem Ajax-Anruf erhalten, eine Art Antwort. Die Antwort kann in JSON codiert sein oder kann nicht in JSON codiert sein.
Für den Fall, dass wir einen
json
Ausbruch brauchen, sindwp_send_json
zwei Satelliten eine großartige Idee.Jedoch können wir zurückkommen
x-www-form-urlencoded
odermultipart/form-data
odertext/xml
oder anderer Codierungstyp. In diesem Fall verwenden wir nichtwp_send_json
.Wir können den gesamten HTML-Code zurückgeben. In diesem Fall ist es sinnvoll, den
wp_die()
ersten und den zweiten Parameter zu verwenden. Andernfalls sollten diese Parameter leer sein.Aber was bringt es,
wp_die()
ohne Parameter aufzurufen ?Schließlich, wenn Sie den großen WP-Kern überprüfen, können Sie finden
Beide Formate werden verwendet
die()
undwp_die()
. Kannst du erklären warum?Schließlich ist hier was
admin-ajax.php
zurückkehrtdie( '0' );
Warum nicht
wp_die(...)
?quelle
Verwenden Sie
wp_die()
. Es ist besser, WordPress-Funktionen so oft wie möglich zu verwenden.quelle
Wenn Sie verwenden
echo
, werden Sie gezwungen,die()
oderdie(0)
oder zu verwendenwp_die()
.Wenn Sie dies nicht verwenden
echo
, kann JavaScript dies verarbeiten.Dann sollten Sie sich eine bessere Art und Weise verwenden , um Daten zurück:
wp_send_json()
.Um Daten in Ihrem Rückruf (im
json
Format) zu senden , können Sie Folgendes verwenden:wp_send_json()
wp_send_json_success()
wp_send_json_error()
Alle von ihnen werden für dich sterben. Keine Notwendigkeit zu verlassen oder danach zu sterben.
AKTUALISIEREN
Und wenn Sie kein
json
Ausgabeformat benötigen , sollten Sie Folgendes verwenden:wp_die($response)
Es wird Ihre Antwort zurückgeben, bevor es stirbt. Nach dem Kodex:
Bitte lesen Sie den vollständigen Codex-Artikel hier .
quelle
echo
?echo
.wp_send_json_*
verwendetecho
und beendet für Sie. Hier besteht eine Verwechslung zwischen Client und Server.json
als Ausgabeformat brauchen ?