✅Descuentos Automáticos por Cada XXXX€ Gastados en WooCommerce

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.

Descuentos Automáticos por Cada 1000€ Gastados en WooCommerce

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 foreach y 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.
  • 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.
      • Se guarda una referencia del cupón en el usuario con update_user_meta().
  • 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.
  • 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.

5/5 - (1 voto)
Compartir Artículo

Un comentario

  1. Fran Salas Master WP 1 año atrás

    Deja tus opiniones o dudas en los comentarios.

¿Tienes una duda o sugerencia sobre este artículo?

Puedes dejar un comentario de forma anónima, sin necesidad de registrarte ni proporcionar ningún dato personal. Tu mensaje se publicará como “Usuario Anónimo No Premium”, un perfil que agrupa a todos los visitantes no registrados.

Importante: para evitar el spam automático, todos los comentarios anónimos deben comenzar con el símbolo #. Ejemplo: # Tengo una duda sobre los shortcodes personalizados...

Este espacio está destinado exclusivamente a preguntas concretas, dudas o sugerencias relacionadas con el contenido del artículo. Por respeto a los demás lectores, no se publicarán temas sin relación.

Privacidad y normas:
  • No tienes que agregar tu nombre, correo ni ningún otro dato identificativo.
  • No se permiten enlaces en comentarios anónimos.
  • No se permiten símbolos especiales como < o > (menor y mayor que), ya que se consideran intentos de insertar código y serán bloqueados.
  • Todos los comentarios anónimos pasan por revisión antes de ser publicados y solo se aprobarán si aportan valor al contenido del artículo.
¿Quieres comentar con tu nombre y que tu mensaje se publique al instante? Inicia sesión o regístrate.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

0%