En Easy Digital Downloads 3.2.0 se introdujeron las after order actions para reemplazar las after payment actions obsoletas. Este hook proporciona a los desarrolladores una forma de procesar acciones intensivas cuando un pago se completa sin afectar la velocidad y el rendimiento del usuario final al completar la compra. Esta es una guía sobre cómo agregar una acción posterior al pedido.
Introducción a las Acciones Posteriores al Pedido
Si buscas realizar acciones adicionales cuando un pedido se marca como ‘completado’, te recomendamos usar el hook edd_after_order_actions en lugar del hook edd_complete_purchase. ¿Cuál es la diferencia entre estos dos hooks?
edd_complete_purchase– Se ejecuta durante el proceso de compra después de que el usuario hace clic en el botón ‘Completar Compra’ y antes de que se cargue la página ‘Confirmación de Compra’. Este hook debe usarse para tareas “críticas para la misión”, ya que afectará el tiempo percibido que tarda el usuario en completar su compra. Ejemplos de uso de este hook deben ser tareas como la creación de claves de licencia, la generación de suscripciones o cualquier cosa que el usuario deba tener visible en la página del recibo.edd_after_order_actions– Se ejecuta ~30 segundos después de que se completa la compra, a través del sistemaWP_Cron. Este hook debe usarse para realizar llamadas adicionales a la API, consultas costosas a la base de datos y tareas que deben considerarse no críticas para la misión del usuario al completar su compra. Buenos ejemplos de esto son agregar usuarios a listas de correo, calcular estadísticas para un usuario, actualizar cachés, etc.
¿Qué argumentos se pasan al hook?
El hook edd_after_order_actions envía tres argumentos:
- El ID del pedido como un entero
- El objeto
EDD\Orders\Order - El objeto
EDD_Customer
¿Qué estados de pedido se incluyen en ‘completado’?
Easy Digital Downloads usa el estado de complete para marcar un pedido como completado. Si estás integrando o usando la extensión Recurring Payments, el estado edd_subscription también se considera un pedido ‘completado’. Si solo deseas ejecutar tu acción para la compra inicial (e ignorar las renovaciones de suscripción), deberás verificar que el $order->status tenga el valor complete antes de continuar con tu integración.
¿Por qué requiere WP_Cron?
WP_Cron es un proceso en segundo plano que tu sitio de WordPress utiliza para completar tareas sin afectar la experiencia del usuario al ver tu sitio. Cuando se genera tráfico en tu sitio, antes de que la página termine de cargarse, WordPress determina si hay tareas en segundo plano que deban completarse. Si las hay, iniciará un proceso en segundo plano para manejar estas tareas pendientes.
¿Qué pasa si mi host deshabilita WP_Cron?
Si bien hacemos todo lo posible para detectar si WP_Cron está funcionando, puede haber un caso en el que no podamos detectarlo correctamente. Si su host o servidor tiene WP_Cron deshabilitado o modificado para ejecutarse a una frecuencia predeterminada, es posible que deba deshabilitar esta función manualmente. Hay un filtro si elige no usar los ganchos posteriores a la acción, en cuyo caso, EDD recurrirá y realizará las acciones en el momento de la finalización, y evitará el proceso retrasado.
AVISO: Debido a que este sistema de acciones posteriores al pedido depende de WP_Cron, no debe usarse para cosas consideradas 'críticas'. Es simplemente una forma de descargar integraciones costosas con API y grandes conjuntos de datos que no afectan directamente los datos de compra.
Puntos clave sobre las acciones posteriores al pedido
- Se activa a través de
WP_Cron - Se puede deshabilitar a través de un filtro (
edd_use_after_payment_actions) - Por defecto, se programa para 30 segundos después de la compra, pero se puede cambiar mediante un filtro.
- La tabla de base de datos del pedido contiene una columna para el momento en que se completaron las acciones.
¿Hay algún ejemplo?
Hemos creado una 'plantilla' para integrar con el gancho edd_after_order_actions en nuestra biblioteca de código WP. Se puede ver aquí:
Migración de su código desde edd_after_payment_actions
Si anteriormente se integró con el gancho edd_after_payment_actions, la buena noticia es que migrar a este nuevo y más eficiente gancho es bastante fácil.
La principal diferencia es el cambio del segundo parámetro. En lugar de enviar el pago como un objeto EDD_Payment, enviará un objeto Order.
