Usar wp_die()
é a melhor dessas opções.
Como outros observaram, há muitas razões para preferir uma função específica do WordPress em vez da planície die
ou exit
:
- Ele permite que outros plugins se conectem às ações chamadas por
wp_die()
.
- Ele permite que um manipulador especial de saída seja usado com base no contexto (o comportamento de
wp_die()
é adaptado com base no fato de a solicitação ser uma solicitação Ajax ou não).
- Torna possível testar seu código.
O último é mais importante, e foi por isso que adicionei essa nota ao Codex . Se você deseja criar testes de unidade / integração para o seu código, não poderá testar uma função que chame exit
ou die
diretamente. Ele encerrará o script, como deveria. A maneira como os próprios testes do WordPress são configurados para evitar isso (para os retornos de chamada do Ajax para os quais ele tem testes), é conectar-se às ações acionadas por wp_die()
e lançar uma exceção. Isso permite que a exceção seja capturada no teste e a saída do retorno de chamada (se houver) seja analisada.
A única vez que você usaria die
ou exit
será se deseja ignorar qualquer tratamento especial wp_die()
e interromper a execução imediatamente. Em alguns lugares, o WordPress faz isso (e em outros locais em que ele pode ser usado die
diretamente, apenas porque o manuseio wp_die()
não é importante ou porque ninguém tentou criar testes para um pedaço de código ainda, por isso foi ignorado). Lembre-se de que isso também torna seu código mais difícil de testar, por isso geralmente seria usado apenas em códigos que não estão no corpo de uma função (como o WordPress faz admin-ajax.php
). Portanto, se o tratamento de wp_die()
não for especificamente desejado, ou você estiver matando o script em um determinado momento como uma precaução (comoadmin-ajax.php
, esperando que normalmente um retorno de chamada do Ajax já tenha saído corretamente), considere usar die
diretamente.
Em termos de wp_die()
vs wp_die( 0 )
, o que você deve usar depende do que está lidando com a resposta dessa solicitação do Ajax no front-end. Se estiver esperando um corpo de resposta específico, será necessário passar essa mensagem (ou número inteiro, neste caso) para wp_die()
. Se tudo o que está ouvindo é que a resposta está sendo bem-sucedida ( 200
código de resposta ou o que for), não há necessidade de passar nada wp_die()
. Eu observaria, porém, que terminar com wp_die( 0 )
tornaria a resposta indistinguível da admin-ajax.php
resposta padrão . Portanto, terminar com 0
não informa se o retorno de chamada foi conectado corretamente e realmente executado. Uma mensagem diferente seria melhor.
Como apontado em outras respostas, você encontrará frequentemente wp_send_json()
et al. para ser útil se você estiver enviando uma resposta JSON de volta, o que geralmente é uma boa ideia. Isso também é superior a apenas chamar wp_die()
com um código, porque você pode passar muito mais informações de volta em um objeto JSON, se necessário. Usar wp_send_json_success()
e wp_send_json_error()
também enviará a mensagem de sucesso / erro de volta em um formato padrão que qualquer função auxiliar do JS Ajax fornecida pelo WordPress poderá entender (como wp.ajax
).
TL; DR: você provavelmente sempre deve usar wp_die()
, seja em um retorno de chamada do Ajax ou não. Melhor ainda, envie informações de volta com seus wp_send_json()
amigos.
die
vez dewp_die()
.die()
e outraswp_die()
.die()
, em alguns casos, é apenas um código legado oudie()
está sendo usado para matar o script como último recurso quando algo realmente inesperado aconteceu ewp_die()
não foi chamado. Em outros casos, ninguém criou testes para um pedaço de código, e o tratamento especial dewp_die()
não é especificamente necessário, por isso foi ignorado.Do codex AJAX em Plugins
fonte
wp_send_json_*
funções que todos usamwp_send_json
que ainda chamamwp_die
wp_send_json
na resposta?Você também pode usar
wp_send_json()
descrito no Codex comosend a JSON response back to an AJAX request, and die().
Portanto, se você tiver que retornar uma matriz, terá apenas sua função finalizada
wp_send_json($array_with_values);
. Não há necessidadeecho
oudie
.Você também recebe duas funções auxiliares de ajuda
wp_send_json_success()
ewp_send_json_error()
que adiciona uma chave denominadasuccess
qual serátrue
oufalse
respectivamente.Por exemplo:
fonte
wp_json_encode
no caso de uma exceção pode retornar false, o que nesse caso?wp_send_json()
é o melhor caminho? Por quê?wp_send_json()
faz algumas coisas para nós. Esta questão também lida comwp_send_json()
.Para usar o wordpress ajax / woo commerce, a sintaxe geral do ajax é a seguinte:
Você deve usar wp_die () no final da função, porque o wordpress usa internamente um filtro durante a função wp_die (). Portanto, qualquer plug-in que esteja trabalhando com esse filtro poderá não funcionar se não incluirmos o wp_die (). Também die () e outras funções matam imediatamente a execução do PHP sem considerar nenhuma função wordpress que deva ser considerada ao finalizar a execução.
Se você estiver usando wp_send_json () dentro de você, funcionará assim
Não é necessário usar wp_die () no final se você incluir wp_send_json () dentro da função de retorno de chamada . porque o próprio wordpress usa a função wp_die () com segurança dentro da função wp_send_json ().
fonte
Isso é apenas um acréscimo ao que os outros disseram. O motivo para preferir
wp_die
é que o núcleo pode acionar ações lá e os plug-ins podem concluir corretamente coisas como rastreamento, monitoramento ou armazenamento em cache.Em geral, você sempre deve preferir uma chamada principal da API, se disponível, pois provavelmente adicionará algum valor (cache, integração de plugins ou qualquer outro) que você não obtém da chamada direta do PHP.
fonte
Não vou aceitar esta resposta, isso não seria justo. Eu só queria criar um esboço e possíveis dicas sobre os itens que considero importantes:
A principal definição de wp-die ()
wp_send_json
wp_doing_ajax
Normalmente, o que recebemos da chamada ajax é algum tipo de resposta. A resposta pode ser codificada em json ou não pode ser codificada em json.
Caso necessitemos de
json
interrupçãowp_send_json
ou dois satélites são uma ótima idéia.No entanto, podemos voltar
x-www-form-urlencoded
oumultipart/form-data
outext/xml
ou qualquer outro tipo de codificação. Nesse caso, não usamoswp_send_json
.Podemos retornar o html inteiro e, nesse caso, faz sentido usar o
wp_die()
primeiro e o segundo parâmetro, caso contrário, esses parâmetros devem estar vazios.Mas qual é o benefício de chamar
wp_die()
sem parâmetros?Por fim, se você verificar o excelente núcleo do WP, poderá encontrar
Ambos os formatos são usados
die()
ewp_die()
. Você pode explicar o porquê?Finalmente, aqui está o que
admin-ajax.php
retornadie( '0' );
Por que não
wp_die(...)
?fonte
Use
wp_die()
. É melhor usar as funções do WordPress o máximo possível.fonte
Se você usar
echo
, forçará você a usardie()
oudie(0)
ouwp_die()
.Se você não usar
echo
, o JavaScript poderá lidar com isso.Então você deve usar um caminho melhor para retornar dados:
wp_send_json()
.Para enviar dados em seu retorno de chamada (em
json
formato), você pode usar os seguintes itens:wp_send_json()
wp_send_json_success()
wp_send_json_error()
Todos eles vão morrer por você. Não há necessidade de sair ou morrer depois.
ATUALIZAR
E se você não precisa
json
como formato de saída, deve usar:wp_die($response)
Ele retornará sua resposta antes que morra. Conforme o codex:
Leia o artigo completo do codex aqui .
fonte
echo
?echo
.wp_send_json_*
usaecho
e sai para você. Aqui há confusão entre o cliente e o servidor.json
como formato de saída?