✅¿Fuera de Stock? Notifica a tus Clientes cuando un Producto vuelve al Inventario WooCommerce

¿Te ha pasado que un cliente llega a tu tienda en línea emocionado por un producto, pero se encuentra con que está agotado? Es una experiencia frustrante tanto para el cliente como para ti como propietario de la tienda. Pero, ¿y si pudieras convertir esa frustración en una oportunidad de fidelizar al cliente y, además, concretar una venta futura?

En este artículo, te mostraré cómo implementar un sistema que permite a tus clientes dejar su correo electrónico para recibir una notificación automática cuando el producto vuelva a estar disponible. Este sistema es ideal para mantener interesados a los clientes, aumentar tus conversiones y ofrecer una experiencia de compra más personalizada. A continuación, te explicaré en detalle qué hace este código y cómo puede ayudarte a mejorar tu tienda WooCommerce.

1. Detecta si un producto está agotado

El primer paso que realiza este código es verificar el estado del producto en tu inventario. Si el sistema detecta que no hay unidades disponibles, muestra un mensaje personalizado en la página del producto. Este mensaje no solo informa al cliente de que el producto está agotado, sino que también lo invita a tomar acción: ingresar su correo electrónico para recibir una notificación cuando el producto vuelva al inventario.

Esta funcionalidad es fundamental porque convierte una situación negativa (producto no disponible) en una oportunidad para mantener la interacción con el cliente. Además, evita que el cliente se vaya con las manos vacías, algo que podría suceder si simplemente viera un mensaje genérico de «Sin stock».

2. Muestra un formulario para que el cliente deje su email

Cuando un cliente visita un producto que está fuera de stock, verá un formulario en la misma página. Este formulario tiene un diseño limpio y profesional, con un campo para ingresar el correo electrónico y un botón que dice “Avisadme”. El formulario también incluye mensajes claros y amigables que explican al cliente exactamente lo que sucederá: recibirán un correo electrónico automáticamente en cuanto el producto esté disponible.

Este pequeño detalle es clave para generar confianza. Cuando el cliente entiende qué va a pasar con su información, es más probable que se anime a dejar su correo. Además, el botón de acción invita a participar, lo que aumenta la tasa de conversión de este sistema.

avisar cliente producto en stock woocommerce

3. Recoge y guarda los emails de los clientes

Una vez que el cliente introduce su correo electrónico y hace clic en el botón, el sistema lo guarda automáticamente en la base de datos de tu tienda. El código se asegura de que este proceso sea seguro y eficiente.

Primero, el sistema valida que el correo electrónico sea válido. Esto es importante para evitar datos incorrectos o inútiles en tu base de datos. Si el correo es válido, se asocia directamente al producto agotado en cuestión. El código utiliza los metadatos del producto para almacenar los correos electrónicos en una lista específica y organizada.

¿Por qué es importante esta organización? Porque permite que cada producto tenga su propia lista de clientes interesados. Por ejemplo, si tienes dos productos agotados, el sistema separa las listas de correos de manera automática. Esto te asegura que las notificaciones se envíen únicamente a los clientes interesados en cada producto, manteniendo todo limpio y estructurado.

Además, antes de guardar un correo, el sistema verifica si ese correo ya está registrado en la lista del producto. De esta forma, evita duplicados y asegura que cada cliente reciba solo una notificación, incluso si intenta registrarse varias veces.

4. Envía un email automático cuando el producto vuelve al inventario

La verdadera magia de este sistema ocurre cuando el producto vuelve a estar en stock. En ese momento, el código detecta automáticamente el cambio en el inventario y envía un correo electrónico a todos los clientes que se registraron para recibir una notificación.

El correo electrónico no es un mensaje genérico. Está diseñado para ser útil y persuasivo. Incluye:

  • El nombre del producto, para que el cliente sepa exactamente qué artículo está disponible.
  • La cantidad de unidades disponibles, para añadir un sentido de urgencia y motivar al cliente a actuar rápidamente.
  • Un enlace directo al producto en tu tienda, facilitando la compra.
emails automaticos producto sin stock woocommerce

Este tipo de comunicación personalizada es altamente efectiva para convertir a los clientes interesados en compradores reales. Además, te permite mantener una relación positiva con el cliente, incluso después de haber enfrentado la frustración inicial de encontrar el producto agotado.

5. Limpia la lista de correos después de enviar las notificaciones

Una vez que el sistema ha enviado los correos electrónicos, limpia automáticamente la lista de emails asociados al producto. Esto es esencial para mantener tu base de datos organizada y para evitar enviar notificaciones innecesarias.

¿Por qué es importante este paso? Porque garantiza que cada notificación sea relevante y evita que tus clientes reciban correos duplicados o fuera de lugar. Esto no solo mejora la experiencia del cliente, sino que también refuerza la imagen profesional de tu tienda.

El siguiente código tienes que agregarlo en el functions.php de tu tema hijo o utilizar un plugin como CODE SNIPPETS.

// Agrega un formulario de notificación de email en la ficha del producto agotado
add_action('woocommerce_single_product_summary', function() {
    global $product;

    // Comprueba si el producto no está en stock
    if (!$product->is_in_stock()) {
        // Muestra un formulario donde el usuario puede ingresar su email para ser notificado
        echo '<div id="notify-me" style="font-family: Arial, sans-serif; max-width: 400px; margin: 20px auto; padding: 20px; border: 1px solid #ccc; border-radius: 10px; background-color: #f9f9f9; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);">
                <h3 style="margin-bottom: 15px; color: #333; text-align: center;">Producto agotado</h3>
                <p style="margin-bottom: 15px; text-align: center;">Introduce tu email para ser notificado cuando el producto esté disponible.</p>
                <input type="email" id="notify_email" name="notify_email" placeholder="Tu correo electrónico" required style="padding: 10px; width: calc(100% - 22px); margin-bottom: 15px; border: 1px solid #ccc; border-radius: 5px; font-size: 14px;">
                <button id="notify_me_button" style="display: block; width: 100%; padding: 10px; background-color: #0073aa; color: white; border: none; border-radius: 5px; font-size: 16px; cursor: pointer;">Avisadme</button>
                <p id="notify_message" style="display: none; color: green; margin-top: 15px; text-align: center;">¡Gracias! Te avisaremos cuando el producto esté disponible.</p>
              </div>';
        ?>
        <script>
            // Lógica JavaScript para gestionar el envío del email al backend
            document.getElementById('notify_me_button').addEventListener('click', function(e) {
                e.preventDefault();

                // Obtiene el email ingresado por el usuario
                const email = document.getElementById('notify_email').value;

                if (email) {
                    // Obtiene el ID del producto actual
                    const productId = <?php echo $product->get_id(); ?>;

                    // Realiza una petición AJAX para guardar el email
                    fetch('<?php echo admin_url('admin-ajax.php'); ?>', {
                        method: 'POST',
                        headers: {
                            'Content-Type': 'application/x-www-form-urlencoded',
                        },
                        body: new URLSearchParams({
                            action: 'save_notify_email', // Acción a ejecutar en WordPress
                            email: email,
                            product_id: productId
                        })
                    }).then(response => response.json()).then(data => {
                        // Muestra un mensaje de éxito o error según la respuesta
                        if (data.success) {
                            document.getElementById('notify_message').style.display = 'block';
                        } else {
                            alert(data.message || 'Ocurrió un error. Intenta nuevamente.');
                        }
                    }).catch(error => {
                        alert('Ocurrió un error en la solicitud. Intenta nuevamente.');
                    });
                } else {
                    alert('Por favor, introduce un correo electrónico válido.');
                }
            });
        </script>
        <?php
    }
}, 15);

// Maneja la lógica para guardar el email en la base de datos
add_action('wp_ajax_save_notify_email', 'save_notify_email');
add_action('wp_ajax_nopriv_save_notify_email', 'save_notify_email');
function save_notify_email() {
    // Sanitiza y valida los datos recibidos
    $email = isset($_POST['email']) ? sanitize_email($_POST['email']) : '';
    $product_id = isset($_POST['product_id']) ? intval($_POST['product_id']) : 0;

    if (!is_email($email) || !$product_id) {
        wp_send_json_error(['message' => 'Datos inválidos.']);
    }

    // Recupera los emails notificados para este producto
    $notified_emails = get_post_meta($product_id, '_notify_emails', true);

    if (!$notified_emails || !is_array($notified_emails)) {
        $notified_emails = [];
    }

    // Agrega el email si no está ya registrado
    if (!in_array($email, $notified_emails)) {
        $notified_emails[] = $email;
        update_post_meta($product_id, '_notify_emails', $notified_emails);
        wp_send_json_success();
    } else {
        wp_send_json_error(['message' => 'Este correo ya está registrado para notificaciones.']);
    }
}

// Envía notificaciones por correo cuando el producto vuelve a estar en stock
add_action('woocommerce_product_set_stock_status', 'send_email_notification_on_stock', 10, 3);
function send_email_notification_on_stock($product_id, $stock_status, $product) {
    // Solo ejecuta la acción si el producto vuelve a estar en stock
    if ($stock_status === 'instock') {
        // Recupera la lista de correos asociados al producto
        $notified_emails = get_post_meta($product_id, '_notify_emails', true);

        if (!empty($notified_emails) && is_array($notified_emails)) {
            $stock_quantity = $product->get_stock_quantity();
            $logo_url = 'https://codigos.fransalas-proyectos.com/wp-content/uploads/2022/04/logo-dark.svg';

            // Enviar un correo a cada usuario en la lista
            foreach ($notified_emails as $email) {
                $button = '<a href="' . get_permalink($product_id) . '" style="display: inline-block; padding: 10px 20px; background-color: #0073aa; color: white; text-decoration: none; border-radius: 5px;">Ver Producto</a>';
                $message = '<div style="font-family: Arial, sans-serif; line-height: 1.5;">
                    <img src="' . $logo_url . '" alt="Logo" style="max-width: 150px; margin-bottom: 20px;">
                    <p>Hola,</p>
                    <p>Te informamos que el producto que solicitaste, <strong>' . $product->get_name() . '</strong>, ya está disponible en nuestra tienda.</p>
                    <p>Actualmente hay <strong>' . $stock_quantity . '</strong> unidades disponibles. ¡Date prisa si no quieres quedarte sin él!</p>
                    <p>Puedes adquirirlo haciendo clic en el siguiente botón:</p>
                    ' . $button . '
                    <p>Gracias por confiar en nosotros.</p>
                    <p>Atentamente,</p>
                    <p>El equipo de nuestra tienda</p>
                </div>';

                // Envía el correo
                wp_mail(
                    $email,
                    'Producto disponible: ' . $product->get_name(),
                    $message,
                    ['Content-Type: text/html; charset=UTF-8']
                );
            }
            // Limpia la lista de correos una vez enviados
            delete_post_meta($product_id, '_notify_emails');
        }
    }
}

Lenguaje del código: PHP (php)

Conclusión

Este sistema es mucho más que una simple funcionalidad para notificar a los clientes. Es una herramienta poderosa para mejorar la experiencia de compra, fidelizar a tus clientes y aumentar tus ventas de manera efectiva. Al implementar este código, puedes transformar un problema común —productos agotados— en una oportunidad para mantener la relación con tus clientes y generar nuevas ventas.

¿Te gustaría implementar este sistema en tu tienda WooCommerce o necesitas ayuda con personalizaciones para tu negocio? Estoy aquí para ayudarte.

Contáctame por WhatsApp para servicios de desarrollo personalizado, ajustes en tu tienda online o cualquier solución a medida que necesites.
➡️Haz clic aquí para contactarme por WhatsApp

Hablemos y trabajemos juntos para que tu tienda sea más efectiva y atractiva para tus clientes.

Nos vemos en el siguiente tutorial.

Un saludo.

5/5 - (3 votos)
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%