Subscriptions
El módulo de suscripciones añade productos con pagos recurrentes. Los clientes compran suscripciones con renovación manual, y el administrador las gestiona en WooCommerce.
Cómo funciona
Section titled “Cómo funciona”- El administrador crea un tipo de producto “Suscripción” con un ciclo y un precio
- El cliente compra una suscripción y paga el primer pedido
- El plugin crea una suscripción con el estado “Activa”
- Antes de la fecha de renovación, el cliente recibe un correo de recordatorio
- En la fecha de renovación, el plugin crea un pedido de renovación
- El cliente paga el pedido de renovación (renovación manual)
- El ciclo se repite hasta que se cancela la suscripción
Configuración
Section titled “Configuración”Vaya a WooCommerce > Ajustes > Polski > Módulos PRO > Suscripciones.
El módulo se controla mediante la opción:
polski_subscriptionsAjustes generales
Section titled “Ajustes generales”| Ajuste | Descripción |
|---|---|
| Activar suscripciones | Activa el módulo |
| Modo de renovación | Manual (el cliente paga el pedido) |
| Días de recordatorio | Cuántos días antes de la renovación se envía un recordatorio (por defecto 3) |
| Periodo de gracia | Cuántos días después de la fecha de renovación la suscripción permanece activa (por defecto 7) |
| Suspensión automática | Suspender la suscripción tras finalizar el periodo de gracia |
Crear un producto de suscripción
Section titled “Crear un producto de suscripción”- Vaya a Productos > Añadir nuevo
- Seleccione el tipo de producto: Suscripción
- Configure el precio y el ciclo:
| Campo | Descripción |
|---|---|
| Precio de la suscripción | Importe por periodo de facturación |
| Periodo de facturación | Día / Semana / Mes / Año |
| Duración del periodo | Número de periodos (p. ej. 1 mes, 3 meses) |
| Precio inicial | Opcional - precio distinto para el primer periodo |
| Cuota de activación | Opcional - cuota única en el primer pedido |
| Límite de renovaciones | 0 = sin límite, o número de renovaciones |
- Publique el producto
Precio inicial frente a precio de renovación
Section titled “Precio inicial frente a precio de renovación”El plugin admite escenarios en los que el precio del primer periodo difiere del precio de los periodos siguientes. Casos de uso habituales:
- periodo de prueba gratuito o de prueba a precio reducido
- precio promocional de introducción
- cuota de activación + precio recurrente más bajo
El precio inicial se aplica únicamente al primer pedido. Los pedidos de renovación posteriores utilizan el precio estándar de la suscripción.
Ciclo de vida de la suscripción
Section titled “Ciclo de vida de la suscripción”Pending → Active → On Hold → Active → ... → Expired → Cancelled| Estado | Descripción |
|---|---|
| Pending | A la espera del pago del primer pedido |
| Active | Activa - el cliente tiene acceso al producto |
| On Hold | Suspendida - el pedido de renovación está a la espera de pago |
| Expired | Caducada - el número de renovaciones alcanzó el límite o transcurrió el periodo de gracia |
| Cancelled | Cancelada por el cliente o el administrador |
Renovaciones
Section titled “Renovaciones”Renovación manual
Section titled “Renovación manual”En la versión actual, el plugin admite renovaciones manuales. Esto significa que:
- El plugin crea un pedido de renovación con el estado “Pago pendiente”
- El cliente recibe un correo con un enlace para pagar el pedido
- El cliente paga el pedido con el método de pago que elija
- Tras el pago, la suscripción se renueva por el siguiente periodo
Proceso de renovación
Section titled “Proceso de renovación”El plugin comprueba a diario las suscripciones pendientes de renovación mediante WP-Cron:
polski_daily_maintenanceLa tarea cron se ejecuta una vez al día y realiza lo siguiente:
- comprobar las suscripciones cuya fecha de renovación es hoy o anterior
- crear pedidos de renovación para las suscripciones que requieren renovación
- suspender las suscripciones que han superado el periodo de gracia
- caducar las suscripciones que han alcanzado el límite de renovaciones
Recordatorios por correo
Section titled “Recordatorios por correo”El plugin envía recordatorios por correo antes de la fecha de renovación:
| Correo | Cuándo | Contenido |
|---|---|---|
| Recordatorio de renovación | X días antes de la renovación | Información sobre la próxima renovación, importe, enlace al área |
| Pedido de renovación | En la fecha de renovación | Pedido a pagar con enlace de pago |
| Suscripción suspendida | Tras vencer el plazo de pago | Información sobre la suspensión, enlace para pagar |
| Suscripción caducada | Tras finalizar el periodo de gracia | Información sobre la caducidad, enlace para volver a comprar |
Las plantillas de correo pueden personalizarse en WooCommerce > Ajustes > Correos electrónicos.
Área Mi cuenta
Section titled “Área Mi cuenta”El módulo añade un endpoint /polski-subscriptions al área Mi cuenta del cliente. El endpoint está disponible en:
/moje-konto/polski-subscriptions/Lista de suscripciones
Section titled “Lista de suscripciones”El cliente ve una tabla con las suscripciones:
| Columna | Descripción |
|---|---|
| Producto | Nombre del producto de suscripción |
| Estado | Estado actual de la suscripción |
| Precio | Importe por periodo |
| Próxima renovación | Fecha de la próxima renovación |
| Acciones | Cancelar / Pagar renovación |
Detalles de la suscripción
Section titled “Detalles de la suscripción”Tras hacer clic en una suscripción, el cliente ve:
- los datos completos de la suscripción (producto, precio, ciclo, fechas)
- el historial de renovaciones (lista de pedidos asociados)
- el botón para cancelar la suscripción
- el botón para pagar una renovación pendiente (si corresponde)
Cancelar una suscripción
Section titled “Cancelar una suscripción”El cliente puede cancelar una suscripción activa desde el área Mi cuenta. La cancelación:
- cambia el estado de la suscripción a “Cancelled”
- la suscripción permanece activa hasta el final del periodo pagado en curso
- se informa al cliente de la fecha de finalización del acceso
polski_pro/subscription/status_changed
Section titled “polski_pro/subscription/status_changed”Acción que se dispara tras un cambio de estado de la suscripción.
/** * @param int $subscription_id ID subskrypcji * @param string $new_status Nowy status * @param string $old_status Poprzedni status */do_action('polski_pro/subscription/status_changed', int $subscription_id, string $new_status, string $old_status);Ejemplo:
add_action('polski_pro/subscription/status_changed', function (int $subscription_id, string $new_status, string $old_status): void { if ($new_status === 'cancelled') { $subscription = polski_pro_get_subscription($subscription_id); // Wysłanie ankiety o powód rezygnacji wp_mail( $subscription->get_customer_email(), 'Szkoda, że odchodzisz', 'Powiedz nam, dlaczego anulujesz subskrypcję: https://example.com/ankieta' ); }}, 10, 3);polski_pro/subscription/renewal_created
Section titled “polski_pro/subscription/renewal_created”Acción que se dispara tras crear un pedido de renovación.
/** * @param int $order_id ID zamówienia odnowienia * @param int $subscription_id ID subskrypcji */do_action('polski_pro/subscription/renewal_created', int $order_id, int $subscription_id);Ejemplo:
add_action('polski_pro/subscription/renewal_created', function (int $order_id, int $subscription_id): void { $order = wc_get_order($order_id); $order->add_order_note( sprintf('Zamówienie odnowienia dla subskrypcji #%d', $subscription_id) );}, 10, 2);polski_pro/subscription/renewal_paid
Section titled “polski_pro/subscription/renewal_paid”Acción que se dispara tras pagar un pedido de renovación.
/** * @param int $order_id ID zamówienia odnowienia * @param int $subscription_id ID subskrypcji */do_action('polski_pro/subscription/renewal_paid', int $order_id, int $subscription_id);Hooks de recordatorio de renovación (1.8.2+)
Section titled “Hooks de recordatorio de renovación (1.8.2+)”El motor de recordatorios (14 + 7 días antes de la renovación por defecto) expone filtros y acciones:
// Customise windows (days before renewal)add_filter('polski_subscription_reminder_windows', fn ($w) => ['first' => 21, 'second' => 7, 'last' => 1]);
// Subject / body / headers filtersadd_filter('polski_subscription_reminder_subject', fn ($s, $sub, $type) => "[$type] $s", 10, 3);add_filter('polski_subscription_reminder_body', fn ($b, $sub, $type) => $b . "\n\nThanks!", 10, 3);add_filter('polski_subscription_reminder_headers', fn () => ['Content-Type: text/html; charset=UTF-8']);
// Skip a specific subscriptionadd_filter('polski_subscription_skip_reminder', fn ($skip, $sub) => $sub->productId === 42, 10, 2);
// Observe dispatchadd_action('polski_subscription_reminder_sent', fn ($sub, $type, $days) => null, 10, 3);add_action('polski_subscription_reminder_failed', fn ($sub, $type) => null, 10, 2);Notificaciones de cambio de precio (1.8.3+)
Section titled “Notificaciones de cambio de precio (1.8.3+)”SubscriptionRepository::updateRecurringAmount() detecta un cambio de importe y envía un correo al cliente con el precio anterior/nuevo, la próxima fecha de facturación efectiva y un enlace de cancelación con un solo clic (requisito de protección al consumidor de la UE).
add_action('polski_subscription_amount_changed', function (int $id, float $prev, float $next) { error_log("Subscription $id: $prev -> $next");}, 10, 3);
add_filter('polski_subscription_amount_change_body', fn ($body, $sub, $prev, $next) => $body, 10, 4);add_action('polski_subscription_amount_change_notified', fn ($sub, $prev, $next, $sent) => null, 10, 4);Panel de administración
Section titled “Panel de administración”Lista de suscripciones
Section titled “Lista de suscripciones”Vaya a WooCommerce > Suscripciones. La tabla contiene:
- ID de la suscripción
- cliente (nombre, apellidos, correo)
- producto
- estado
- precio y ciclo
- fecha de la próxima renovación
- fecha de creación
Filtros disponibles: estado, producto, fecha de creación.
Editar una suscripción
Section titled “Editar una suscripción”El administrador puede:
- cambiar el estado de la suscripción
- cambiar la fecha de la próxima renovación
- cambiar el precio (afecta a las renovaciones posteriores)
- añadir una nota
- consultar el historial de estados y los pedidos asociados
Problemas frecuentes
Section titled “Problemas frecuentes”Los pedidos de renovación no se crean
Section titled “Los pedidos de renovación no se crean”- Compruebe si WP-Cron funciona correctamente (se está llamando a
wp_cron) - Vaya a Herramientas > Scheduled Actions y compruebe si la tarea
polski_daily_maintenanceestá programada - Verifique que la suscripción tenga el estado “Active” y una fecha de renovación correcta
El cliente no recibe recordatorios
Section titled “El cliente no recibe recordatorios”- Compruebe la configuración de correos de WooCommerce
- Verifique que la plantilla del correo de recordatorio esté activada
- Compruebe el ajuste “Días de recordatorio” - si es mayor que 0
La suscripción no cambia de estado tras el pago
Section titled “La suscripción no cambia de estado tras el pago”- Compruebe si el pedido de renovación está correctamente asociado a la suscripción
- Verifique los registros de WooCommerce en busca de errores
- Compruebe si la pasarela de pago cambia correctamente el estado del pedido