Imagina que tienes una tienda en línea y quieres recompensar a tus clientes más fieles de una manera automática, sencilla y efectiva. Ahora es posible hacerlo gracias a una funcionalidad que permite calcular cuánto han gastado tus clientes y, por cada XXXX euros acumulados, ofrecerles un cupón de descuento. Es una manera genial de fomentar la lealtad, animarles a seguir comprando y, al mismo tiempo, brindarles un reconocimiento por confiar en tu negocio.
Este sistema no solo rastrea el gasto total de cada cliente desde una fecha específica, sino que además es capaz de generar automáticamente cupones personalizados. Los cupones se calculan de manera dinámica en función del total acumulado, con mensajes claros que informan a tus clientes cuánto les falta para alcanzar el próximo descuento. Imagina la emoción de tus compradores al saber que están a solo unos pasos de obtener un ahorro exclusivo en su próxima compra.
Además, esta estrategia se adapta perfectamente a cualquier negocio que quiera destacar por su atención al cliente. Los descuentos no solo incentivan más ventas, sino que también refuerzan la relación con tus clientes, quienes sentirán que sus compras son valoradas y recompensadas. Es una herramienta poderosa para fidelizar clientes, aumentar el ticket promedio y, por supuesto, mejorar la experiencia de compra en tu tienda.

El siguiente código tienes que agregarlo en el functions.php de tu tema hijo o utilizar un plugin como CODE SNIPPETS.
add_action('woocommerce_before_account_orders', 'mostrar_resumen_gasto_total');
function mostrar_resumen_gasto_total() {
if (is_user_logged_in()) {
$current_user = wp_get_current_user();
$user_id = $current_user->ID;
// Establecer una fecha de inicio para el cálculo del gasto total
$fecha_inicio = '2025-01-01'; // Cambiar a la fecha deseada
$fecha_actual = date('Y-m-d'); // Fecha actual
// Obtener todos los pedidos completados del usuario dentro del rango de fechas
$args = array(
'customer_id' => $user_id,
'status' => 'completed',
'date_query' => array(
'inclusive' => true,
'after' => $fecha_inicio,
'before' => $fecha_actual,
),
);
$orders = wc_get_orders($args);
$total_gasto = 0;
// Calcular el total gastado desde la fecha de inicio
foreach ($orders as $order) {
$order_date = $order->get_date_created()->date('Y-m-d');
if ($order_date >= $fecha_inicio && $order_date <= $fecha_actual) {
$total_gasto += $order->get_total();
}
}
// Inicio del contenedor principal
echo '<div style="padding: 20px; background: #f5f5f5; border-radius: 12px; box-shadow: 0 8px 15px rgba(0, 0, 0, 0.1); max-width: 800px; margin: 20px auto; font-family: Arial, sans-serif;">';
echo '<h2 style="text-align: center; color: #333; margin-bottom: 20px;">Resumen de Gasto Total</h2>';
// Bloque: Gasto total
echo '<div style="display: flex; justify-content: space-between; align-items: center; background: #ffffff; padding: 15px; border-radius: 8px; margin-bottom: 20px; border-left: 5px solid #6f42c1;">';
echo '<div style="font-size: 18px; color: #555;">Has gastado un total de:</div>';
echo '<div style="font-size: 22px; font-weight: bold; color: #6f42c1;">' . wc_price($total_gasto) . '</div>';
echo '</div>';
// Información adicional sobre cupones
echo '<p style="font-size: 14px; color: #666; margin-bottom: 20px;">Por cada 1000€ gastados desde el ' . date('d/m/Y', strtotime($fecha_inicio)) . ', recibirás un cupón de descuento de 100€. Los cupones son de un solo uso, no tienen fecha de expiración y no se pueden usar juntos.</p>';
// Bloque: Cupones generados
echo '<div style="background: #ffffff; padding: 15px; border-radius: 8px; border-left: 5px solid #28a745;">';
echo '<h3 style="font-size: 18px; color: #333; margin-bottom: 15px;">Cupones Generados</h3>';
echo '<ul style="list-style: none; padding: 0; margin: 0; font-size: 16px; color: #555;">';
$cupones_generados = false;
$umbral = 1000;
while ($total_gasto >= $umbral) {
$coupon_meta_key = '_generated_coupon_' . $umbral;
$coupon_code = 'cupon-' . $umbral . '-' . strtolower(str_replace(' ', '-', $current_user->user_login));
// Verificar si el cupón ya se generó
$generated_coupon_id = get_user_meta($user_id, $coupon_meta_key, true);
if ($generated_coupon_id) {
// Comprobar si el cupón existe en la base de datos
$existing_coupon = get_post($generated_coupon_id);
if ($existing_coupon && $existing_coupon->post_status === 'publish') {
$coupon_used = get_post_meta($generated_coupon_id, 'usage_count', true) >= 1 ? 'Usado' : 'No usado';
echo '<li style="margin-bottom: 10px; color: #6c757d;">✔ Cupón por alcanzar los ' . $umbral . '€: <strong>' . $existing_coupon->post_title . '</strong> (' . $coupon_used . ')</li>';
} else {
// Notificar al usuario que el cupón fue eliminado
echo '<li style="margin-bottom: 10px; color: #dc3545;">❌ El cupón por alcanzar los ' . $umbral . '€: <strong>' . $coupon_code . '</strong> ha sido eliminado por el administrador.</li>';
}
} else {
// Generar un nuevo cupón
$coupon = array(
'post_title' => $coupon_code,
'post_content' => 'Cupón de descuento generado por alcanzar los ' . $umbral . '€ de gasto.',
'post_status' => 'publish',
'post_author' => 1,
'post_type' => 'shop_coupon',
);
$new_coupon_id = wp_insert_post($coupon);
if ($new_coupon_id) {
// Configurar los datos del cupón
update_post_meta($new_coupon_id, 'discount_type', 'fixed_cart');
update_post_meta($new_coupon_id, 'coupon_amount', 100);
update_post_meta($new_coupon_id, 'individual_use', 'yes');
update_post_meta($new_coupon_id, 'usage_limit', 1);
update_post_meta($new_coupon_id, 'customer_email', $current_user->user_email);
// Guardar referencia del cupón generado
update_user_meta($user_id, $coupon_meta_key, $new_coupon_id);
echo '<li style="margin-bottom: 10px; color: #28a745;">✔ Nuevo cupón generado por alcanzar los ' . $umbral . '€: <strong>' . $coupon_code . '</strong> (No usado)</li>';
}
}
$cupones_generados = true;
$umbral += 1000;
}
if (!$cupones_generados) {
echo '<li style="margin-bottom: 10px; color: #dc3545;">❌ No tienes cupones generados todavía.</li>';
}
echo '</ul>';
echo '</div>';
// Bloque: Próximo umbral
$siguiente_umbral = ceil($total_gasto / 1000) * 1000;
if ($total_gasto < $siguiente_umbral) {
$diferencia = $siguiente_umbral - $total_gasto;
echo '<div style="background: #fff3cd; padding: 15px; border-radius: 8px; margin-top: 20px; border-left: 5px solid #ffc107;">';
echo '<h3 style="font-size: 18px; color: #856404;">¡Estás muy cerca de conseguir otro descuento!</h3>';
echo '<p style="font-size: 16px; color: #856404;">Te faltan <strong style="color: #ff5722;">' . wc_price($diferencia) . '</strong> para recibir un cupón de <strong style="color: #28a745;">100€ de descuento</strong>.</p>';
echo '</div>';
}
// Cierre del contenedor principal
echo '</div>';
}
}
Lenguaje del código: PHP (php)
Entendiendo el Código
1. Enganche a la acción woocommerce_before_account_orders
- Función utilizada:
add_action('woocommerce_before_account_orders', 'mostrar_resumen_gasto_total'); - Propósito: Añadir la funcionalidad antes de que se muestren los pedidos en la cuenta del cliente en WooCommerce. Esto asegura que el resumen del gasto total y los cupones generados aparezcan en una ubicación relevante para el usuario.
2. Verificación del usuario autenticado
- Condición:
if (is_user_logged_in()) - Propósito: Asegurarse de que solo los usuarios registrados puedan acceder al resumen de su gasto total. Si el usuario no ha iniciado sesión, el contenido no se mostrará.
3. Recuperar el ID del usuario
- Función utilizada:
wp_get_current_user() - Propósito: Obtener los datos del usuario autenticado, incluidos su ID, nombre de usuario y correo electrónico. Esto es necesario para calcular el gasto total y asociar los cupones generados a dicho usuario.
4. Establecer una fecha de inicio
- Variable:
$fecha_inicio - Propósito: Define desde qué fecha se empezarán a calcular los pedidos del usuario. Esto permite establecer un período para analizar el gasto total y evitar considerar pedidos anteriores.
5. Obtener pedidos completados del usuario
- Función utilizada:
wc_get_orders($args) - Parámetros importantes:
customer_id: ID del usuario para obtener sus pedidos.status: Se filtran los pedidos con estado «completed».date_query: Solo se consideran los pedidos realizados después de la fecha definida en$fecha_inicio.
- Propósito: Recuperar los pedidos relevantes para calcular el gasto total del usuario.
6. Calcular el gasto total
- Lógica: Iterar sobre los pedidos obtenidos con
foreachy sumar el total de cada pedido usando$order->get_total(). - Propósito: Determinar cuánto ha gastado el usuario en el período especificado. Este valor se utilizará para evaluar cuántos cupones se han generado o deben generarse.
7. Mostrar el resumen visual
- HTML dinámico: Se genera un contenedor con información estilizada que incluye:
- El total gastado por el usuario en formato moneda usando
wc_price($total_gasto). - Mensajes informativos sobre los cupones disponibles y el próximo umbral de descuento.
- El total gastado por el usuario en formato moneda usando
- Propósito: Proporcionar una interfaz visual clara y atractiva para que el usuario entienda su progreso hacia los descuentos.
8. Generar cupones automáticos
- Lógica:
- Se evalúa si el gasto total supera el umbral de 1000€, usando un bucle
while. - Por cada 1000€ gastados, se verifica si ya se generó un cupón:
- Función utilizada:
get_user_meta($user_id, '_generated_coupon_1000', true); - Si no existe, se genera un nuevo cupón con las siguientes características:
- Función:
wp_insert_post()para crear el cupón. - Metadatos asociados con
update_post_meta():- Tipo de descuento:
fixed_cart. - Monto del descuento: 100€.
- Uso único y asociado al correo del usuario.
- Tipo de descuento:
- Función:
- Se guarda una referencia del cupón en el usuario con
update_user_meta().
- Función utilizada:
- Se evalúa si el gasto total supera el umbral de 1000€, usando un bucle
- Propósito: Automatizar la creación de cupones cada vez que se alcanza un nuevo umbral de gasto.
9. Mostrar cupones generados
- HTML dinámico: Se genera una lista de cupones generados que incluye:
- El código del cupón.
- Su estado actual (usado o no usado).
- Notificaciones si un cupón fue eliminado por el administrador.
- Propósito: Informar al usuario sobre los cupones generados y su disponibilidad.
10. Mostrar el próximo umbral de gasto
- Cálculo:
- Se determina el siguiente múltiplo de 1000€ usando
ceil($total_gasto / 1000) * 1000. - Se calcula cuánto falta para alcanzar ese umbral.
- Se determina el siguiente múltiplo de 1000€ usando
- Propósito: Motivar al usuario a seguir comprando para obtener el próximo cupón de descuento.
En conclusión, este código es una herramienta poderosa para incentivar la lealtad de tus clientes, ofreciendo recompensas automáticas basadas en su gasto acumulado. No solo mejora la experiencia del usuario al mostrar un resumen claro de su progreso, sino que también permite generar cupones personalizados que fomentan futuras compras.
Si necesitas adaptar este código a las necesidades específicas de tu negocio, integrar funcionalidades adicionales en tu sitio web o simplemente requieres ayuda para implementar soluciones técnicas en WooCommerce, estaré encantado de ayudarte.
Puedes contactarme directamente a través de WhatsApp haciendo clic en el siguiente enlace: Enviar mensaje por WhatsApp.
Nos vemos en el siguiente tutorial.
Un saludo.




Deja tus opiniones o dudas en los comentarios.