Hooks del ciclo de vida del registro
El punto donde engancharse cuando un visitante se registra en un evento —lo más útil, para enviar el correo de confirmación que el plugin no envía—.
La acción
add_action( 'pom_events_ajax_on_event_signup', function ( $user_id, $event_id, $request, &$email_sent ) {
// Runs after the registration has been stored on the event.
}, 10, 4 );
Se dispara después de que el registro se escribe en el mapa de asistentes del evento, así que en ese momento:
- el usuario ya existe —ya sea localizado por correo o creado—;
- el registro está almacenado, con su estado ya decidido;
- el visitante aún no ha recibido la respuesta.
El cuarto parámetro se pasa por referencia, de modo que una integración puede registrar que ha enviado un mensaje y cooperar con cualquier otra cosa que esté escuchando.
Los parámetros
| Parámetro | Contenido |
|---|---|
$user_id |
El ID de usuario del asistente |
$event_id |
El evento |
$request |
Los datos del formulario enviados |
$email_sent |
Una bandera por referencia |
Enviar un correo de confirmación
La integración más común, porque POM Events no envía nada:
add_action( 'pom_events_ajax_on_event_signup', function ( $user_id, $event_id, $request, &$email_sent ) {
if ( $email_sent ) {
return;
}
$user = get_userdata( $user_id );
$event = get_post( $event_id );
if ( ! $user || ! $event ) {
return;
}
$assistants = get_post_meta( $event_id, 'event_assistants', true );
$status = $assistants[ $user_id ]['status'] ?? '';
$subject = 'waiting-list' === $status
? sprintf( __( 'You are on the waiting list for %s', 'my-plugin' ), $event->post_title )
: sprintf( __( 'Your place at %s', 'my-plugin' ), $event->post_title );
$sent = wp_mail( $user->user_email, $subject, my_plugin_build_body( $event, $status ) );
$email_sent = $email_sent || $sent;
}, 10, 4 );
Dos detalles que vale la pena copiar: respeta la bandera para que varias integraciones no envíen un mensaje cada una, y comprueba el estado para que una persona en lista de espera no reciba una confirmación de una plaza que no tiene.
Leer el estado almacenado
El estado está en el evento, no en la solicitud:
$assistants = get_post_meta( $event_id, 'event_assistants', true );
$status = $assistants[ $user_id ]['status'] ?? ''; // '' | 'waiting-list'
Un estado vacío significa confirmado.
Otras cosas que hacer aquí
- Notificar al organizador de que ha llegado un registro.
- Enviar a un CRM o a una lista de correo, sujeto al consentimiento que realmente hayas recogido.
- Registrar el registro para tus propios informes.
- Añadir al usuario a un rol o grupo.
Qué no hacer aquí
- No modifiques el registro para cambiar su estado. La decisión sobre la lista de espera ya está tomada y el visitante está a punto de recibir el resultado.
- No realices trabajo lento. Esto se ejecuta dentro de la solicitud del visitante; una llamada remota lenta retrasa su confirmación. Ponla en cola en su lugar.
- No des por supuesto el consentimiento. El consentimiento del formulario cubre lo que dice tu cláusula que cubre. Añadir personas a una lista de marketing necesita su propia base.
La ruta de WooCommerce no dispara esto
Un registro creado por una compra no pasa por el formulario, así que esta acción no es el hook para eventos de pago. Usa en su lugar los hooks de pedido de WooCommerce —consulta WooCommerce integration hooks—.
Si envías correos de confirmación, implementa ambas rutas o la mitad de tus asistentes no recibirá nada.
Verifica
- Regístrate desde una ventana privada y confirma que tu manejador se ejecuta.
- Confirma que el estado se lee correctamente para un registro confirmado.
- Llena el evento y regístrate de nuevo; confirma que se usa la rama de lista de espera.
- Confirma que el visitante sigue recibiendo su respuesta en pantalla con prontitud.