Agregue cupones al correo electrónico de la orden de procesamiento solo si el cliente no ha usado uno

Encontré este fragmento que agrega un cupón al correo de la orden.

Me gustaría hacer que aparezca en el correo de la orden de procesamiento solo si el cliente no ha usado ningún cupón.

add_action( 'woocommerce_email_before_order_table', 'add_content', 20 ); function add_content() { echo '

Get 20% off

Thank you for making this purchase! Come back and use the code "Back4More" to receive a 20% discount on your next purchase! Click here to continue shopping.

'; }

Gracias.

@update 2: los nuevos pedidos son la mayoría del tiempo en estado 'on-hold' , pero no en 'Processing' .
En este caso, use esto en su lugar:

 add_action( 'woocommerce_email_before_order_table', 'processing_order_mail_message', 20 ); function processing_order_mail_message( $order ) { if ( empty( $order->get_used_coupons() ) && $order->post_status == 'wc-on-hold' ) echo '

Get 20% off

Thank you for making this purchase! Come back and use the code "Back4More" to receive a 20% discount on your next purchase! Click here to continue shopping.

'; }

O para manejar 'processing' estados 'on-hold' Y 'processing' use esto:

 add_action( 'woocommerce_email_before_order_table', 'processing_order_mail_message', 20 ); function processing_order_mail_message( $order ) { if ( empty( $order->get_used_coupons() ) && ( $order->post_status == 'wc-on-hold' || $order->post_status == 'wc-processing' ) ) echo '

Get 20% off

Thank you for making this purchase! Come back and use the code "Back4More" to receive a 20% discount on your next purchase! Click here to continue shopping.

'; }

Este código va en el archivo function.php de tu tema o tema infantil activo

Este código está probado y es completamente funcional


PRUEBAS:
Para mostrar el estado de la orden por correo electrónico, puede agregar en la función esta línea:

 echo '

The status of this order is: ' . $order->post_status . '

';

Para mostrar los cupones utilizados (si son algunos) agregue esto:

 echo '

Coupons used in this order are: '; print_r( $order->get_used_coupons() ); echo '

'

(esto es solo para fines de prueba).


Respuesta original:

Sí, es posible agregar fácilmente una statement if con 2 condiciones .

El primero detecta si un cupón no se ha utilizado en el orden utilizado en el pedido:

 empty( $order->get_used_coupons() ) 

Y el segundo detectará si el pedido está en estado de “procesamiento”:

 $order->post_status == 'wc-processing' 

Si esas condiciones coinciden, su mensaje se muestra usando ** 'woocommerce_email_before_order_table' ** hook:

Aquí está su fragmento de código personalizado:

 add_action( 'woocommerce_email_before_order_table', 'processing_order_mail_message', 20 ); function processing_order_mail_message( $order ) { if ( empty( $order->get_used_coupons() ) && $order->post_status == 'wc-processing' ) echo '

Get 20% off

Thank you for making this purchase! Come back and use the code "Back4More" to receive a 20% discount on your next purchase! Click here to continue shopping.

'; }

Este código va en el archivo function.php de tu tema o tema infantil activo

Este código está probado y es completamente funcional