L'utilisation wp_die()
est la meilleure de ces options.
Comme d'autres l'ont noté, il existe de nombreuses raisons de préférer une fonction spécifique à WordPress plutôt que la simple die
ou exit
:
- Il permet à d'autres plugins de se connecter aux actions appelées par
wp_die()
.
- Il permet d'utiliser un gestionnaire spécial de sortie en fonction du contexte (le comportement de
wp_die()
est personnalisé selon que la demande est une demande Ajax ou non).
- Il permet de tester votre code.
La dernière est plus importante, c'est pourquoi j'ai ajouté cette note au Codex . Si vous souhaitez créer des tests unitaires / d'intégration pour votre code, vous ne pourrez pas tester une fonction qui appelle exit
ou die
directement. Cela mettra fin au script, comme il est censé le faire. La façon dont les tests de WordPress sont configurés pour éviter cela (pour les rappels Ajax pour lesquels il a des tests), consiste à se connecter aux actions déclenchées par wp_die()
et à lever une exception. Cela permet de détecter l'exception dans le test et d'analyser la sortie du rappel (le cas échéant).
La seule fois que vous utiliseriez die
ou exit
est si vous souhaitez contourner toute manipulation spéciale wp_die()
et tuer l'exécution immédiatement. Il y a des endroits où WordPress fait cela (et d'autres endroits où il pourrait utiliser die
directement juste parce que la manipulation de wp_die()
n'est pas importante, ou que personne n'a encore tenté de créer des tests pour un morceau de code, donc cela a été ignoré). N'oubliez pas que cela rend également votre code plus difficile à tester, donc il ne serait généralement utilisé que dans du code qui n'est pas dans un corps de fonction de toute façon (comme WordPress le fait admin-ajax.php
). Donc, si la manipulation de wp_die()
n'est spécifiquement pas souhaitée, ou si vous tuez le script à un certain point par précaution (commeadmin-ajax.php
, en s'attendant à ce qu'un rappel Ajax se soit déjà correctement terminé), alors vous pourriez envisager d'utiliser die
directement.
En termes de wp_die()
vs wp_die( 0 )
, que vous devez utiliser dépend de ce qui gère la réponse de cette demande Ajax sur le front-end. S'il attend un corps de réponse particulier, vous devez transmettre ce message (ou entier, dans ce cas) à wp_die()
. Si tout ce qu'il écoute est la réponse réussie ( 200
code de réponse ou autre), il n'est pas nécessaire de transmettre quoi que ce soit à wp_die()
. Je noterais, cependant, que la fin de wp_die( 0 )
rendrait la réponse impossible à distinguer de la admin-ajax.php
réponse par défaut . Donc, terminer par 0
ne vous dit pas si votre rappel a été correctement connecté et s'est réellement exécuté. Un message différent serait mieux.
Comme indiqué dans d'autres réponses, vous trouverez souvent wp_send_json()
et al. être utile si vous renvoyez une réponse JSON, ce qui est généralement une bonne idée. Ceci est également supérieur à un simple appel wp_die()
avec un code, car vous pouvez transmettre beaucoup plus d'informations dans un objet JSON, si nécessaire. L'utilisation wp_send_json_success()
et wp_send_json_error()
enverra également le message de réussite / d'erreur dans un format standard que toutes les fonctions d'assistance JS Ajax fournies par WordPress pourront comprendre (comme wp.ajax
).
TL; DR: Vous devriez probablement toujours utiliser wp_die()
, que ce soit dans un rappel Ajax ou non. Encore mieux, renvoyez les informations à wp_send_json()
vos amis.
die
place dewp_die()
.die()
et parfoiswp_die()
.die()
, dans certains cas, il s'agit simplement de code hérité, oudie()
est utilisé pour tuer le script en dernier recours quand quelque chose de vraiment inattendu s'est produit etwp_die()
n'a pas été appelé. Dans d'autres cas, personne n'a créé de tests pour un morceau de code, et la gestion spéciale dewp_die()
n'est pas spécifiquement nécessaire, donc elle a été négligée.Du codex AJAX dans les plugins
la source
wp_send_json_*
fonctions utilisent touteswp_send_json
ce qui appelle toujourswp_die
wp_send_json
dans la réponse?Vous pouvez également utiliser
wp_send_json()
décrit dans le Codex commesend a JSON response back to an AJAX request, and die().
Donc, si vous devez retourner un tableau, vous n'avez qu'à terminer votre fonction avec
wp_send_json($array_with_values);
. Pas besoinecho
oudie
.Vous obtenez également deux fonctions d'aide d'aide
wp_send_json_success()
etwp_send_json_error()
qui ajoute une clé nomméesuccess
qui seratrue
oufalse
respectivement.Par exemple:
la source
wp_json_encode
en cas d'exception peut retourner faux, que faire dans ce cas?wp_send_json()
c'est la meilleure façon? Pourquoi?wp_send_json()
fait des choses pour nous. Cette question traite égalementwp_send_json()
.Pour utiliser wordpress ajax / woo commerce ajax, la syntaxe générale est la suivante:
Vous devez utiliser wp_die () à la fin de la fonction.Parce que wordpress utilise en interne un filtre pendant la fonction wp_die (). Ainsi, tout plugin qui fonctionne avec ce filtre peut ne pas fonctionner si nous n'incluons pas wp_die (). De plus, die () et d'autres fonctions tuent immédiatement l'exécution PHP sans considérer aucune fonction wordpress qui devrait être prise en compte lors de la fin de l'exécution.
Si vous utilisez wp_send_json () à l'intérieur, vous fonctionne comme ceci
Il n'est pas nécessaire d'utiliser wp_die () à la fin si vous incluez wp_send_json () dans la fonction de rappel . parce que wordpress lui-même utilise la fonction wp_die () en toute sécurité à l'intérieur de la fonction wp_send_json ().
la source
C'est juste en plus de ce que d'autres ont dit. La raison de préférer
wp_die
est que le noyau peut y déclencher des actions et que les plug-ins peuvent compléter correctement des choses comme le traçage, la surveillance ou la mise en cache.En général, vous devriez toujours préférer un appel d'API de base à celui qui est disponible car il ajoute très probablement une certaine valeur (mise en cache, intégration de plug-in ou autre) que vous n'obtenez pas de l'appel PHP direct.
la source
Je n'accepterai pas cette réponse, ce ne serait pas juste. Je voulais juste créer un plan et des conseils possibles sur les éléments que je trouve importants:
La définition principale de wp-die ()
wp_send_json
wp_doing_ajax
Généralement, ce que nous obtenons de l'appel ajax est une sorte de réponse. La réponse peut être codée en json ou ne pas être codée en json.
Au cas où nous
json
aurions besoin d'une interruptionwp_send_json
ou deux satellites sont une excellente idée.Cependant, nous pouvons retourner
x-www-form-urlencoded
oumultipart/form-data
outext/xml
ou tout autre type d'encodage. Dans ce cas, nous n'utilisons paswp_send_json
.Nous pouvons renvoyer l'intégralité du code HTML et dans ce cas, il est judicieux d'utiliser les
wp_die()
premier et deuxième paramètres, sinon ces paramètres doivent être vides.Mais quel est l'avantage d'appeler
wp_die()
sans paramètres?Enfin, si vous vérifiez le grand noyau WP que vous pouvez trouver
Les deux formats sont utilisés
die()
etwp_die()
. Pouvez-vous expliquer pourquoi?Enfin voici ce qui
admin-ajax.php
revientdie( '0' );
Pourquoi pas
wp_die(...)
?la source
Utilisez
wp_die()
. Il est préférable d'utiliser autant que possible les fonctions WordPress.la source
Si vous utilisez
echo
, cela vous obligera à utiliserdie()
oudie(0)
ouwp_die()
.Si vous n'utilisez pas
echo
, JavaScript peut gérer cela.Ensuite , vous devez utiliser une meilleure façon de renvoyer des données:
wp_send_json()
.Pour envoyer des données dans votre rappel (au
json
format), vous pouvez utiliser les éléments suivants:wp_send_json()
wp_send_json_success()
wp_send_json_error()
Ils mourront tous pour vous. Pas besoin de sortir ou de mourir après.
MISE À JOUR
Et si vous n'avez pas besoin
json
de format de sortie, vous devez utiliser:wp_die($response)
Il retournera votre réponse avant sa mort. Selon le codex:
Veuillez lire l'article complet du codex ici .
la source
echo
?echo
.wp_send_json_*
utiliseecho
et sort pour vous. Il y a confusion ici entre le client et le serveur.json
de format de sortie?