Estoy usando un complemento para enviar códigos de referencia personalizados en los pedidos por correo electrónico, pero ahora descubrí que cada correo electrónico de pedido tiene el código insertado.
function gens_raf_customer_email( $order, $sent_to_admin, $plain_text ) {
$user_id = ( version_compare( WC_VERSION, '2.7', '<' ) ) ? $order->customer_user : $order->get_customer_id();
if( ! empty( $user_id ) && ( get_user_meta($user_id, "gens_referral_id", true) ) != '' ){
$code = get_user_meta($user_id, "gens_referral_id", true);
} else {
$code = ( version_compare( WC_VERSION, '2.7', '<' ) ) ? $order->billing_email : $order->get_billing_email();
}
if( $plain_text ){
_e('Your referral code is: ','gens-raf') . $code;
} else {
echo '<p style="text-align:center;margin-top:10px;">Your referral code is: ' .get_home_url() .'?raf='. $code . '</p>';
}
}
add_action('woocommerce_email_customer_details', 'gens_raf_customer_email', 30, 3);
Estaba jugando con
if ( $email->id == 'customer_completed_order' )
Pero me dio un error del generador de código php. El problema principal es enviar ese correo electrónico solo a los pedidos completados y/o en procesamiento en lugar de reembolsados, cancelados, etc.
¡Gracias!
------------------------------------
Estás recibiendo el error porque no agregaste el cuarto argumento $email disponible para woocommerce_email_customer_details gancho.
El contenido sólo se mostrará en el orden Completado y
Procesando plantillas de pedidos.
Prueba esto:
add_action('woocommerce_email_customer_details', 'gens_raf_customer_email', 30, 4 );
function gens_raf_customer_email( $order, $sent_to_admin, $plain_text, $email ) {
if ( $email->id == 'customer_completed_order' || $email->id == 'customer_processing_order' ) {
$user_id = ( version_compare( WC_VERSION, '2.7', '<' ) ) ? $order->customer_user : $order->get_customer_id();
if( ! empty( $user_id ) && ( get_user_meta($user_id, "gens_referral_id", true) ) != '' ){
$code = get_user_meta($user_id, "gens_referral_id", true);
} else {
$code = ( version_compare( WC_VERSION, '2.7', '<' ) ) ? $order->billing_email : $order->get_billing_email();
}
if( $plain_text ){
_e('Your referral code is: ','gens-raf') . $code;
} else {
echo '<p style="text-align:center;margin-top:10px;">Your referral code is: ' .get_home_url() .'?raf='. $code . '</p>';
}
}
}
El código ha sido probado y funciona.
1
Vincenzo, funcionó... ¡Muchas gracias!
- Aleksei
26/03/2021 a las 21:08
------------------------------------
La variable $email es el cuarto argumento que falta en su función enlazada, elDebes dirigirte a notificaciones de correo electrónico específicas.
Utilice en su lugar (para woocommerce 3 y superior):
add_action('woocommerce_email_customer_details', 'gens_raf_customer_email', 100, 4 );
function gens_raf_customer_email( $order, $sent_to_admin, $plain_text, $email ) {
// Target specific notifications: Customer processing and completed orders
if ( in_array( $email->id, ['customer_processing_order', 'customer_completed_order'] ) ) {
$gens_raf = get_user_meta( $order->get_user_id(), "gens_referral_id", true );
$code = empty( $gens_raf ) ? $order->get_billing_email() : $gens_raf;
if( $plain_text ){
printf( __('Your referral code is: %s', 'gens-raf'), $code );
} else {
$output = sprintf( __("Your referral code is: %s", "gens-raf"), get_home_url() .'?raf='. $code );
echo '<p style="text-align:center;margin-top:10px;">' . $output . '</p>';
}
}
}
El código va en el archivo funciones.php del tema secundario activo (o tema activo). Debería funcionar.