Usar wp_die()
es la mejor de esas opciones.
Como otros han señalado, hay muchas razones para preferir una función específica de WordPress sobre la simple die
o exit
:
- Permite que otros complementos se enganchen en las acciones llamadas por
wp_die()
.
- Permite utilizar un controlador especial para salir en función del contexto (el comportamiento de
wp_die()
se adapta según si la solicitud es una solicitud de Ajax o no).
- Permite probar su código.
El último es más importante, por eso agregué esa nota al Codex . Si desea crear pruebas de unidad / integración para su código, no podrá probar una función que llame exit
o die
directamente. Terminará el script, como se supone que debe hacerlo. La forma en que las propias pruebas de WordPress están configuradas para evitar esto (para las devoluciones de llamada de Ajax para las que tiene pruebas), es engancharse a las acciones activadas por wp_die()
y lanzar una excepción. Esto permite capturar la excepción dentro de la prueba y analizar la salida de la devolución de llamada (si la hay).
El único momento que usaría die
o exit
es si desea omitir cualquier manejo especial wp_die()
y matar la ejecución de inmediato. Hay algunos lugares donde WordPress hace esto (y otros lugares donde podría usar die
directamente solo porque el manejo wp_die()
no es importante, o nadie ha intentado crear pruebas para un fragmento de código todavía, por lo que se pasó por alto). Recuerde que esto también hace que su código sea más difícil de probar, por lo que generalmente solo se usaría en código que no está en un cuerpo de función de todos modos (como lo hace WordPress admin-ajax.php
). Entonces, si el manejo desde wp_die()
específicamente no se desea, o si está eliminando el script en cierto punto como precaución (comoadmin-ajax.php
si espera que, por lo general, una devolución de llamada de Ajax ya haya salido correctamente), entonces puede considerar usarlo die
directamente.
En términos de wp_die()
vs wp_die( 0 )
, lo que debe usar depende de lo que esté manejando la respuesta de esa solicitud de Ajax en el front-end. Si está esperando un cuerpo de respuesta particular, entonces necesita pasar ese mensaje (o entero, en este caso) a wp_die()
. Si todo lo que está escuchando es que la respuesta sea exitosa ( 200
código de respuesta o lo que sea), entonces no hay necesidad de pasarle nada wp_die()
. Sin embargo, me gustaría señalar que terminar con wp_die( 0 )
haría la respuesta indistinguible de la admin-ajax.php
respuesta predeterminada . Por lo tanto, terminar con 0
no le dice si su devolución de llamada se conectó correctamente y realmente se ejecutó. Un mensaje diferente sería mejor.
Como se señaló en otras respuestas, a menudo encontrará wp_send_json()
et al. ser útil si está enviando una respuesta JSON, lo que generalmente es una buena idea. Esto también es superior a solo llamar wp_die()
con un código, porque puede pasar mucha más información de vuelta en un objeto JSON, si es necesario. Usando wp_send_json_success()
y wp_send_json_error()
también enviará el mensaje de éxito / error en un formato estándar que cualquier función auxiliar JS Ajax proporcionada por WordPress podrá entender (me gusta wp.ajax
).
TL; DR: Probablemente siempre debería usar wp_die()
, ya sea en una devolución de llamada Ajax o no. Aún mejor, envíe información de regreso con wp_send_json()
y amigos.
die
lugar dewp_die()
.die()
y otraswp_die()
.die()
, en algunos casos es solo código heredado, odie()
se está utilizando para eliminar el script como último recurso cuando sucedió algo realmente inesperado ywp_die()
no se llamó. En otros casos, nadie ha creado pruebas para un fragmento de código, y el manejo especial dewp_die()
no es específicamente necesario, por lo que se ha pasado por alto.Desde el codex AJAX en Plugins
fuente
wp_send_json_*
funciones que todos usan ywp_send_json
que aún llamawp_die
wp_send_json
en la respuesta?También puede usarlo
wp_send_json()
descrito en el Codex comosend a JSON response back to an AJAX request, and die().
Entonces, si tiene que devolver una matriz, solo tiene que finalizar su función con
wp_send_json($array_with_values);
. No es necesarioecho
odie
.También obtienes dos funciones de ayuda de ayuda
wp_send_json_success()
ywp_send_json_error()
que agrega una clave llamadasuccess
cual serátrue
ofalse
respectivamente.Por ejemplo:
fuente
wp_json_encode
en caso de una excepción puede devolver falso, ¿qué pasa en ese caso?wp_send_json()
es la mejor manera? ¿Por qué?wp_send_json()
hace algunas cosas por nosotros. Esta pregunta también tratawp_send_json()
.Para usar wordpress ajax / woo commerce, la sintaxis general de ajax es la siguiente:
Debe usar wp_die () al final de la función. Porque wordpress usa internamente un filtro durante la función wp_die (). Por lo tanto, cualquier complemento que funcione con ese filtro puede no funcionar si no incluimos wp_die (). También die () y otras funciones eliminan inmediatamente la ejecución de PHP sin considerar ninguna función de wordpress que debe considerarse al finalizar la ejecución.
Si está utilizando wp_send_json () dentro de usted, funciona de esta manera
No es necesario usar wp_die () al final si incluye wp_send_json () dentro de la función de devolución de llamada . porque wordpress usa la función wp_die () de forma segura dentro de la función wp_send_json ().
fuente
Esto es solo además de lo que otros dijeron. La razón para preferir
wp_die
es que el núcleo puede desencadenar acciones allí y los complementos pueden completar correctamente cosas como el seguimiento, la supervisión o el almacenamiento en caché.En general, siempre debe preferir una llamada a la API principal si está disponible, ya que probablemente agrega algún valor (almacenamiento en caché, integración de complementos o lo que sea) que no obtiene de la llamada directa de PHP.
fuente
No aceptaré esta respuesta, esto no sería justo. Solo quería crear un esquema y posibles sugerencias sobre los elementos que considero importantes:
La definición principal de wp-die ()
wp_send_json
wp_doing_ajax
Por lo general, lo que obtenemos de la llamada ajax es algún tipo de respuesta. La respuesta puede estar codificada en json o no puede estar codificada en json.
En caso de que necesitemos
json
salidawp_send_json
o dos satélites son una gran idea.Sin embargo, podemos regresar
x-www-form-urlencoded
omultipart/form-data
otext/xml
o cualquier otro tipo de codificación. En ese caso no usamoswp_send_json
.Podemos devolver todo el html y en ese caso tiene sentido usar el
wp_die()
primer y el segundo parámetro, de lo contrario, estos parámetros deberían estar vacíos.Pero, ¿cuál es un beneficio de llamar?
wp_die()
sin parámetros?Finalmente, si revisas el gran núcleo de WP puedes encontrar
Se utilizan ambos formatos.
die()
ywp_die()
. ¿Puedes explicar porque?Finalmente esto es lo que
admin-ajax.php
vuelvedie( '0' );
¿Por qué no
wp_die(...)
?fuente
Uso
wp_die()
. Es mejor usar las funciones de WordPress tanto como puedas.fuente
Si lo usa
echo
, lo obligará a usardie()
odie(0)
owp_die()
.Si no lo usa
echo
, JavaScript puede manejar eso.A continuación, se debe utilizar una mejor manera de devolver datos:
wp_send_json()
.Para enviar datos en su devolución de llamada (en
json
formato), puede usar lo siguiente:wp_send_json()
wp_send_json_success()
wp_send_json_error()
Todos morirán por ti. No es necesario salir o morir después.
ACTUALIZAR
Y si no necesita
json
como formato de salida, debe usar:wp_die($response)
Le devolverá su respuesta antes de que muera. Según el códice:
Lea el artículo completo del Codex aquí .
fuente
echo
?echo
.wp_send_json_*
usosecho
y salidas para ti. Aquí hay confusión entre el cliente y el servidor.json
como formato de salida?