Korzystanie wp_die()
jest najlepszą z tych opcji.
Jak zauważyli inni, istnieje wiele powodów, aby preferować funkcję specyficzną dla WordPressa zamiast zwykłego die
lub exit
:
- Pozwala innym wtyczkom zaczepić się o akcje wywoływane przez
wp_die()
.
- Pozwala to na użycie specjalnego modułu obsługi wyjścia w oparciu o kontekst (zachowanie
wp_die()
jest dostosowane do tego, czy żądanie jest żądaniem Ajax, czy nie).
- Umożliwia przetestowanie kodu.
Ta ostatnia jest ważniejsza, dlatego dodałem tę notatkę do Kodeksu . Jeśli chcesz utworzyć testy jednostkowe / integracyjne dla swojego kodu, nie będziesz mógł przetestować funkcji, która wywołuje exit
lub die
bezpośrednio. Zakończy skrypt, tak jak powinien. Sposób, w jaki własne testy WordPressa są skonfigurowane, aby tego uniknąć (w przypadku wywołań zwrotnych Ajax, dla których ma testy), polega na dołączeniu do akcji wyzwalanych przez wp_die()
i wygenerowaniu wyjątku. Umożliwia to wychwycenie wyjątku w ramach testu i przeanalizowanie wyniku wywołania zwrotnego (jeśli istnieje).
Jedyny czas, który możesz wykorzystać die
lub exit
jest, jeśli chcesz ominąć jakąkolwiek specjalną obsługę wp_die()
i natychmiast zabić wykonanie. Istnieje kilka miejsc, w których WordPress to robi (i inne, w których może korzystać die
bezpośrednio, tylko dlatego, że obsługa z wp_die()
nie jest ważna lub nikt nie próbował jeszcze utworzyć testu dla fragmentu kodu, więc został pominięty). Pamiętaj, że to również utrudnia testowanie twojego kodu, więc na ogół byłby używany tylko w kodzie, który i tak nie znajduje się w treści funkcji (tak jak robi to WordPress admin-ajax.php
). Więc jeśli obsługa z nie wp_die()
jest specjalnie pożądana lub zabijasz skrypt w pewnym momencie jako środek ostrożności (npadmin-ajax.php
tak, oczekując, że zwykle wywołanie zwrotne Ajax już poprawnie zakończyło pracę), możesz rozważyć użycie die
bezpośrednio.
W odniesieniu do wp_die()
vs wp_die( 0 )
, którego powinieneś użyć, zależy od tego, co obsługuje odpowiedź tego żądania Ajax na interfejsie. Jeśli oczekuje określonej treści odpowiedzi, musisz przekazać tę wiadomość (lub w tym przypadku liczbę całkowitą) do wp_die()
. Jeśli wszystko, czego oczekuje, to odpowiedź się powiedzie ( 200
kod odpowiedzi lub cokolwiek innego), to nie trzeba przekazywać niczego wp_die()
. Chciałbym jednak zauważyć, że zakończenie wp_die( 0 )
oznaczałoby, że odpowiedź byłaby nierozróżnialna od admin-ajax.php
odpowiedzi domyślnej . Więc zakończenie 0
nie mówi ci, czy Twoje połączenie zwrotne zostało poprawnie podłączone i uruchomione. Inna wiadomość byłaby lepsza.
Jak wskazano w innych odpowiedziach, często znajdziesz wp_send_json()
et al. aby być pomocnym, jeśli wysyłasz odpowiedź JSON z powrotem, co jest ogólnie dobrym pomysłem. Jest to również lepsze niż zwykłe wywoływanie wp_die()
za pomocą kodu, ponieważ w razie potrzeby można przekazać znacznie więcej informacji w obiekcie JSON. Użycie wp_send_json_success()
i wp_send_json_error()
spowoduje również odesłanie komunikatu o powodzeniu / błędzie w standardowym formacie, który będzie mógł zrozumieć (lub polubić wp.ajax
) wszystkie funkcje pomocnicze JS Ajax dostarczone przez WordPress .
TL; DR: Prawdopodobnie zawsze powinieneś używać wp_die()
, czy to w wywołaniu zwrotnym Ajax, czy nie. Co więcej, odeślij informacje z wp_send_json()
przyjaciółmi i znajomymi.
die
zamiastwp_die()
.die()
a czasamiwp_die()
.die()
, w niektórych przypadkach jest to po prostu starszy kod lubdie()
jest używany do zabicia skryptu w ostateczności, gdy stało się coś naprawdę nieoczekiwanego iwp_die()
nie zostało wywołane. W innych przypadkach nikt nie stworzył testów dla fragmentu kodu, a specjalna obsługa zwp_die()
nie jest specjalnie potrzebna, więc zostało to pominięte.Z kodeksu AJAX we wtyczkach
źródło
wp_send_json_*
funkcje, zwp_send_json
których korzystają wszystkie, które nadal wywołująwp_die
wp_send_json
do odpowiedzi?Możesz także użyć
wp_send_json()
opisanego w Kodeksie jakosend a JSON response back to an AJAX request, and die().
Tak więc, jeśli musisz zwrócić tablicę, kończysz tylko swoją funkcję
wp_send_json($array_with_values);
. Nie ma potrzebyecho
anidie
.Można również uzyskać pomoc pomocnik dwie funkcje
wp_send_json_success()
iwp_send_json_error()
które dodaje klucz o nazwiesuccess
, która będzietrue
lubfalse
odpowiednio.Na przykład:
źródło
wp_json_encode
co w przypadku wyjątku może zwrócić wartość false, co w takim przypadku?wp_send_json()
to najlepszy sposób? Dlaczego?wp_send_json()
robi dla nas kilka rzeczy . To pytanie dotyczy równieżwp_send_json()
.W przypadku użycia wordpress ajax / woo commerce ajax ogólna składnia jest następująca:
Powinieneś użyć wp_die () na końcu funkcji, ponieważ wordpress wewnętrznie używa filtra podczas funkcji wp_die (), więc każda wtyczka, która działa z tym filtrem, może nie działać, jeśli nie uwzględnimy wp_die (). Również die () i inne funkcje natychmiast zabijają wykonanie PHP, nie biorąc pod uwagę żadnej funkcji wordpress, którą należy wziąć pod uwagę podczas kończenia wykonywania.
Jeśli używasz wp_send_json () w środku, działaj w ten sposób
Nie jest konieczne użycie wp_die () na końcu, jeśli włączysz wp_send_json () do funkcji zwrotnej . ponieważ samo wordpress bezpiecznie używa funkcji wp_die () wewnątrz funkcji wp_send_json ().
źródło
To tylko dodatek do tego, co powiedzieli inni. Powodem tego
wp_die
jest to, że rdzeń może tam wywoływać działania, a wtyczki mogą poprawnie wykonywać takie czynności, jak śledzenie, monitorowanie lub buforowanie.Zasadniczo zawsze powinieneś preferować wywołanie interfejsu API, jeśli jest ono dostępne, ponieważ najprawdopodobniej dodaje ono pewnej wartości (buforowanie, integracja wtyczek itp.), Której nie otrzymujesz z bezpośredniego wywołania PHP.
źródło
Nie zaakceptuję tej odpowiedzi, byłoby to niesprawiedliwe. Chciałem tylko stworzyć zarys i możliwe wskazówki na temat elementów, które uważam za ważne:
Główna definicja wp-die ()
wp_send_json
wp_doing_ajax
Zazwyczaj to, co otrzymujemy z wywołania ajax, jest pewnego rodzaju odpowiedzią. Odpowiedź może być zakodowana w formacie json lub może nie być zakodowana w formacie json.
Na wypadek, gdybyśmy potrzebowali
json
outuptwp_send_json
lub dwóch satelitów, to świetny pomysł.Jednak możemy powrócić
x-www-form-urlencoded
lubmultipart/form-data
lubtext/xml
lub dowolny inny typ kodowania. W takim przypadku nie korzystamywp_send_json
.Możemy zwrócić cały HTML i w takim przypadku warto użyć
wp_die()
pierwszego i drugiego parametru, w przeciwnym razie parametry te powinny być puste.Ale jaka jest korzyść z dzwonienia
wp_die()
bez parametrów?Wreszcie, jeśli sprawdzisz świetny rdzeń WP, możesz go znaleźć
Oba formaty są używane
die()
iwp_die()
. Czy możesz mi wytłumaczyć dlaczego?Wreszcie oto, co
admin-ajax.php
powracadie( '0' );
Dlaczego nie
wp_die(...)
?źródło
Zastosowanie
wp_die()
. Lepiej jest korzystać z funkcji WordPress jak najwięcej.źródło
Jeśli użyjesz
echo
, zmusi cię do użyciadie()
lubdie(0)
lubwp_die()
.Jeśli nie używasz
echo
, JavaScript może to obsłużyć.Następnie należy użyć lepszego sposobu powrotu dane:
wp_send_json()
.Aby wysłać dane w oddzwanianiu (w
json
formacie), możesz użyć następujących czynności:wp_send_json()
wp_send_json_success()
wp_send_json_error()
Wszyscy umrą za ciebie. Nie musisz potem wychodzić ani umrzeć.
AKTUALIZACJA
A jeśli nie potrzebujesz
json
jako formatu wyjściowego, powinieneś użyć:wp_die($response)
Zwróci twoją odpowiedź, zanim umrze. Zgodnie z kodeksem:
Przeczytaj pełny kodeks tutaj .
źródło
echo
?echo
.wp_send_json_*
używaecho
i wychodzi dla ciebie. Pomiędzy klientem a serwerem panuje zamieszanie.json
jako formatu wyjściowego?