Menggunakan wp_die()
adalah yang terbaik dari opsi-opsi itu.
Seperti yang telah dicatat orang lain, ada banyak alasan untuk lebih memilih fungsi khusus WordPress daripada yang biasa die
atau exit
:
- Itu memungkinkan plugin lain untuk menghubungkan ke tindakan yang dipanggil oleh
wp_die()
.
- Ini memungkinkan penangan khusus untuk keluar untuk digunakan berdasarkan konteks (perilaku
wp_die()
disesuaikan berdasarkan apakah permintaan tersebut permintaan Ajax atau tidak).
- Memungkinkan untuk menguji kode Anda.
Yang terakhir lebih penting, itulah sebabnya saya menambahkan catatan itu ke Codex . Jika Anda ingin membuat tes unit / integrasi untuk kode Anda, Anda tidak akan dapat menguji fungsi yang memanggil exit
atau die
langsung. Ini akan menghentikan skrip, seperti yang seharusnya. Cara tes WordPress sendiri diatur untuk menghindari ini (untuk panggilan balik Ajax yang telah diuji untuk), adalah untuk menghubungkan ke tindakan yang dipicu oleh wp_die()
dan melemparkan pengecualian. Ini memungkinkan pengecualian untuk ditangkap dalam pengujian, dan output dari panggilan balik (jika ada) dianalisis.
Satu-satunya waktu yang akan Anda gunakan die
atau exit
adalah jika Anda ingin mem-bypass penanganan khusus dari wp_die()
dan segera membunuh eksekusi. Ada beberapa tempat di mana WordPress melakukan ini (dan tempat-tempat lain di mana ia dapat digunakan die
secara langsung hanya karena penanganan dari wp_die()
tidak penting, atau belum ada yang mencoba membuat tes untuk sepotong kode, jadi itu diabaikan). Ingatlah bahwa ini juga membuat kode Anda lebih sulit untuk tes, sehingga akan umumnya hanya digunakan dalam kode yang tidak dalam fungsi tubuh tetap (seperti WordPress tidak dalam admin-ajax.php
). Jadi jika penanganan dari wp_die()
secara khusus tidak diinginkan, atau Anda membunuh skrip pada titik tertentu sebagai tindakan pencegahan (sepertiadmin-ajax.php
tidak, mengharapkan bahwa biasanya panggilan balik Ajax sudah keluar dengan benar), maka Anda dapat mempertimbangkan untuk menggunakan die
secara langsung.
Dalam hal wp_die()
vs wp_die( 0 )
, yang harus Anda gunakan tergantung pada apa yang menangani respons permintaan Ajax di ujung depan. Jika mengharapkan badan respons tertentu, maka Anda harus meneruskan pesan itu (atau bilangan bulat, dalam hal ini) ke wp_die()
. Jika semua yang didengarkan adalah respons yang berhasil ( 200
kode respons atau apa pun), maka tidak perlu meneruskan apa pun wp_die()
. Saya akan mencatat, bahwa dengan mengakhiri wp_die( 0 )
akan membuat respon tidak bisa dibedakan dari admin-ajax.php
respon default . Jadi diakhiri dengan 0
tidak memberi tahu Anda apakah panggilan balik Anda telah tersambung dengan benar dan benar-benar berjalan. Pesan yang berbeda akan lebih baik.
Seperti yang ditunjukkan dalam jawaban lain, Anda akan sering menemukan wp_send_json()
et al. untuk membantu jika Anda mengirim respons JSON kembali, yang umumnya merupakan ide bagus. Ini juga lebih unggul daripada hanya menelepon wp_die()
dengan kode, karena Anda dapat meneruskan lebih banyak informasi kembali ke objek JSON, jika diperlukan. Menggunakan wp_send_json_success()
dan wp_send_json_error()
juga akan mengirim pesan keberhasilan / kesalahan kembali dalam format standar yang dapat dimengerti oleh fungsi pembantu Ajax JS yang disediakan oleh WordPress wp.ajax
.
TL; DR: Anda mungkin harus selalu menggunakan wp_die()
, apakah dalam panggilan balik Ajax atau tidak. Lebih baik lagi, kirim informasi kembali bersama wp_send_json()
teman.
die
alih-alihwp_die()
.die()
dan kadang-kadangwp_die()
.die()
, dalam beberapa kasus itu hanya kode warisan, ataudie()
digunakan untuk membunuh skrip sebagai upaya terakhir ketika sesuatu yang sangat tidak terduga terjadi danwp_die()
tidak dipanggil. Dalam kasus lain, tidak ada yang membuat tes untuk sepotong kode, dan penanganan khusus dariwp_die()
tidak diperlukan secara khusus, sehingga diabaikan.Dari kodeks AJAX di Plugin
sumber
wp_send_json_*
fungsi yang digunakanwp_send_json
masih memanggilwp_die
wp_send_json
ke jawabannya?Anda juga dapat menggunakan yang
wp_send_json()
dijelaskan dalam Codex sebagaisend a JSON response back to an AJAX request, and die().
Jadi, jika Anda harus mengembalikan array, Anda hanya perlu mengakhiri fungsi Anda
wp_send_json($array_with_values);
. Tidak perluecho
ataudie
.Anda juga mendapatkan dua fungsi bantuan pembantu
wp_send_json_success()
danwp_send_json_error()
yang menambahkan kunci bernamasuccess
yang akantrue
ataufalse
masing - masing.Sebagai contoh:
sumber
wp_json_encode
dalam kasus pengecualian dapat mengembalikan false, apa dalam kasus itu?wp_send_json()
ini cara terbaik? Mengapa?wp_send_json()
melakukan beberapa hal untuk kita. Pertanyaan ini juga berkaitan denganwp_send_json()
.Untuk menggunakan wordpress ajax / woo commerce ajax sintaks umum adalah sebagai berikut:
Anda harus menggunakan wp_die () di akhir fungsi. Karena wordpress secara internal menggunakan filter selama fungsi wp_die (). Jadi setiap plugin yang berfungsi menggunakan filter itu mungkin tidak berfungsi jika kita tidak memasukkan wp_die (). Juga mati () dan fungsi-fungsi lain segera membunuh eksekusi PHP tanpa mempertimbangkan fungsi wordpress yang harus dipertimbangkan saat mengakhiri eksekusi.
Jika Anda menggunakan wp_send_json () di dalam Anda berfungsi seperti ini
Tidak perlu menggunakan wp_die () di akhir jika Anda menyertakan wp_send_json () di dalam fungsi callback . karena wordpress sendiri menggunakan fungsi wp_die () dengan aman di dalam fungsi wp_send_json ().
sumber
Ini hanya sebagai tambahan dari apa yang dikatakan orang lain. Alasan untuk memilih
wp_die
adalah bahwa inti dapat memicu tindakan di sana dan plugin dapat dengan benar menyelesaikan hal-hal seperti pelacakan, pemantauan, atau caching.Secara umum Anda harus selalu lebih suka panggilan API inti jika ada yang tersedia karena kemungkinan besar menambah nilai (caching, integrasi plugin atau apa pun) yang tidak Anda dapatkan dari panggilan PHP langsung.
sumber
Saya tidak akan menerima jawaban ini, ini tidak adil. Saya hanya ingin membuat garis besar dan petunjuk yang mungkin tentang item yang saya temukan penting:
Definisi utama dari wp-die ()
wp_send_json
wp_doing_ajax
Biasanya apa yang kita dapatkan dari panggilan ajax adalah semacam respons. Respons dapat dikodekan dalam json atau mungkin tidak dikodekan dalam json.
Jika kita perlu
json
keluarwp_send_json
atau dua satelit adalah ide bagus.Namun, kami dapat mengembalikan
x-www-form-urlencoded
ataumultipart/form-data
atautext/xml
atau jenis penyandian lainnya. Dalam hal ini kami tidak menggunakanwp_send_json
.Kami dapat mengembalikan seluruh html dan dalam hal ini masuk akal untuk menggunakan
wp_die()
parameter pertama dan kedua, kalau tidak parameter ini harus kosong.Tetapi apa manfaat menelepon
wp_die()
tanpa parameter?Akhirnya, jika Anda memeriksa inti WP yang hebat Anda mungkin menemukan
Kedua format tersebut digunakan
die()
danwp_die()
. Bisakah Anda jelaskan mengapa?Akhirnya inilah yang
admin-ajax.php
kembalidie( '0' );
Mengapa tidak
wp_die(...)
?sumber
Gunakan
wp_die()
. Lebih baik menggunakan fungsi WordPress sebanyak yang Anda bisa.sumber
Jika Anda menggunakan
echo
, itu akan memaksa Anda untuk menggunakandie()
ataudie(0)
atauwp_die()
.Jika Anda tidak menggunakan
echo
, JavaScript dapat mengatasinya.Maka anda harus menggunakan cara yang lebih baik untuk mengembalikan data:
wp_send_json()
.Untuk mengirim data dalam panggilan balik Anda (dalam
json
format), Anda dapat menggunakan yang berikut:wp_send_json()
wp_send_json_success()
wp_send_json_error()
Semuanya akan mati untukmu. Tidak perlu keluar atau mati sesudahnya.
MEMPERBARUI
Dan jika Anda tidak perlu
json
sebagai format output, Anda harus menggunakan:wp_die($response)
Itu akan mengembalikan respons Anda sebelum mati. Sesuai kodeks:
Baca artikel kodeks lengkap di sini .
sumber
echo
?echo
.wp_send_json_*
menggunakanecho
dan keluar untuk Anda. Ada kebingungan di sini antara klien dan server.json
sebagai format output?