No Easy Digital Downloads 3.2.0, as after order actions foram introduzidas para substituir as after payment actions depreciadas. Este hook oferece aos desenvolvedores uma maneira de processar ações intensivas quando um pagamento é concluído, sem afetar a velocidade e o desempenho do usuário final ao finalizar a compra. Este é um guia sobre como adicionar uma ação pós-pedido.
Introdução às Ações Pós-Pedido
Se você deseja executar ações adicionais quando um pedido é marcado como ‘concluído’, você é encorajado a usar o hook edd_after_order_actions em vez do hook edd_complete_purchase. Qual é a diferença entre esses dois hooks?
edd_complete_purchase– Executa durante o processo de compra após o usuário clicar no botão ‘Finalizar Compra’ e antes da página ‘Confirmação de Compra’ ser carregada. Este hook deve ser usado para tarefas “críticas”, pois afetará o tempo percebido pelo usuário para concluir sua compra. Exemplos de uso deste hook devem ser tarefas como criar chaves de licença, gerar assinaturas ou qualquer coisa que o usuário precise ter visível na página de recibo.edd_after_order_actions– Executa aproximadamente 30 segundos após a conclusão da compra, através do sistemaWP_Cron. Este hook deve ser usado para realizar chamadas de API adicionais, consultas de banco de dados dispendiosas e tarefas que devem ser consideradas não críticas para a conclusão da compra pelo usuário. Bons exemplos disso são adicionar usuários a listas de e-mail, calcular estatísticas para um usuário, atualizar caches, etc.
Quais argumentos são passados para o hook?
O hook edd_after_order_actions envia três argumentos:
- O ID do pedido como um inteiro
- O objeto
EDD\Orders\Order - O objeto
EDD_Customer
Quais status de pedido estão incluídos em ‘concluído’?
Easy Digital Downloads usa o status complete para marcar um pedido como concluído. Se você estiver integrando ou usando a extensão Recurring Payments, o status edd_subscription também é considerado um pedido ‘completo’. Se você deseja executar sua ação apenas para a compra inicial (e ignorar renovações de assinatura), você precisará verificar o $order->status para um valor de complete antes de continuar com sua integração.
Por que isso requer WP_Cron?
WP_Cron é um processo em segundo plano que seu site WordPress usa para concluir tarefas sem impactar a experiência do usuário ao visualizar seu site. Quando o tráfego é gerado em seu site, antes que a página termine de carregar, o WordPress determina se há alguma tarefa em segundo plano que precise ser concluída. Se houver, ele iniciará um processo em segundo plano para lidar com essas tarefas pendentes.
E se meu host desativar o WP_Cron?
Embora façamos o nosso melhor para detetar se o WP_Cron está a funcionar, pode haver um caso em que não consigamos detetar isto corretamente. Se o seu anfitrião ou servidor tiver o WP_Cron desativado ou modificado para ser executado a uma frequência pré-determinada, poderá ter de desativar esta funcionalidade manualmente. Existe um filtro se optar por não utilizar os ganchos de ação pós-compra, caso em que o EDD voltará a executar as ações no momento da conclusão e evitará o processo demorado.
AVISO: Como este sistema de ações pós-pedido depende do WP_Cron, não deve ser utilizado para coisas consideradas ‘críticas’. É simplesmente uma forma de descarregar integrações dispendiosas com APIs e grandes conjuntos de dados que não afetam diretamente os dados da compra.
Pontos chave sobre ações pós-pedido
- Disparado via
WP_Cron - Pode ser desativado via filtro (
edd_use_after_payment_actions) - Por padrão, ele é agendado para 30 segundos após a compra, mas pode ser alterado por meio de um filtro.
- A tabela de base de dados do pedido contém uma coluna para a hora em que as ações foram concluídas.
Existe um exemplo?
Criámos um ‘modelo’ para integrar com o gancho edd_after_order_actions na nossa biblioteca WP Code. Pode ser visto aqui:
Migrar o seu código de edd_after_payment_actions
Se integrou anteriormente com o gancho edd_after_payment_actions, a boa notícia é que migrar para este novo e mais eficiente gancho é bastante fácil.
A principal diferença é a alteração do segundo parâmetro. Em vez de enviar o pagamento como um objeto EDD_Payment, enviará um objeto Order.
