Agregue destinatarios basados ​​en la función de usuario a los correos electrónicos de WooCommerce fallidos y cancelados

Quiero poder cambiar quién recibe las notificaciones por correo electrónico de Woocommerce según el rol que el usuario tenga al realizar el pedido.

Por ejemplo, si el usuario ha iniciado sesión como Cliente mayorista, se notificará a un correo electrónico diferente.

He encontrado cómo cambiarlo cuando se completa un nuevo pedido utilizando el woocommerce_email_recipient_new_order pero no puedo encontrar ningún enlace relacionado con las notificaciones fallidas o canceladas.

 add_filter( 'woocommerce_email_recipient_new_order', 'sv_conditional_email_recipient', 10, 2 ); function sv_conditional_email_recipient( $recipient, $order ) { // Bail on WC settings pages since the order object isn't yet set yet // Not sure why this is even a thing, but shikata ga nai $page = $_GET['page'] = isset( $_GET['page'] ) ? $_GET['page'] : ''; if ( 'wc-settings' === $page ) { return $recipient; } // just in case if ( ! $order instanceof WC_Order ) { return $recipient; } if ( in_array( 'wholesale_customer', (array) $user->roles ) ) { $recipient .= ', shaun@example.com'; return $recipient; } return $recipient; } add_filter( 'woocommerce_email_recipient_new_order', 'sv_conditional_email_recipient', 10, 2 ); 

¿Alguien puede ayudar por favor?

El enlace que ya está utilizando es un woocommerce_email_recipient_{$this->id} compuesto: woocommerce_email_recipient_{$this->id} , donde {$this->id} es el ID de new_order como new_order . Por lo tanto, puede configurar cualquier ID de correo electrónico para que funcione para la notificación de correo electrónico deseada.

A continuación tiene los 3 ganchos para “Nuevo pedido”, “Pedido cancelado” y “Pedido fallido” que puede usar para la misma función enganchada.

En su función, eliminé algunos códigos innecesarios y completé el código para obtener los datos del cliente (las funciones del usuario) relacionados con el pedido:

 add_filter( 'woocommerce_email_recipient_new_order', 'user_role_conditional_email_recipient', 10, 2 ); add_filter( 'woocommerce_email_recipient_cancelled_order', 'user_role_conditional_email_recipient', 10, 2 ); add_filter( 'woocommerce_email_recipient_failed_order', 'user_role_conditional_email_recipient', 10, 2 ); function user_role_conditional_email_recipient( $recipient, $order ) { if ( ! is_a( $order, 'WC_Order' ) ) return $recipient; // Get the customer ID $user_id = $order->get_user_id(); // Get the user data $user_data = get_userdata( $user_id ); // Adding an additional recipient for a custom user role if ( in_array( 'wholesale_customer', $user_data->roles ) ) $recipient .= ', shaun@example.com'; return $recipient; } 

El código va en el archivo function.php de su tema (o tema) secundario activo o también en cualquier archivo de complemento.

Probado y funciona.