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
Sección titulada «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
Sección titulada «Configuración»Desde Polski PRO 1.22.0 las suscripciones tienen su propia fila en Polski > Módulos (clave de módulo subscriptions). Ahí se activa el módulo y en esa misma fila se establecen los valores de toda la tienda; al guardar se escriben en la opción polski_subscriptions. El módulo se entrega apagado.
La fila no muestra todas las claves que lee el módulo. Lo que falte se puede seguir estableciendo directamente en la opción, por ejemplo con WP-CLI:
wp option patch update polski_subscriptions reminder_first_days 10Los valores por producto (si un producto es o no una suscripción, y su ciclo) están en la pestaña Polski Pro del editor de productos, consulte Per-product settings.
Ajustes que lee el módulo
Sección titulada «Ajustes que lee el módulo»| Clave | Por defecto | Descripción |
|---|---|---|
show_on_single |
true |
Mostrar las opciones de suscripción en la página de producto |
reminder_first_days |
14 |
Días antes de la renovación para el primer recordatorio |
reminder_second_days |
7 |
Días antes de la renovación para el segundo recordatorio |
allow_cancellation |
true |
Permitir que el cliente cancele desde Mi cuenta |
allow_pause |
true |
Permitir que el cliente pause y reanude desde Mi cuenta |
show_in_account / account_label |
true / Suscripciones |
Sección de Mi cuenta con las suscripciones |
date_format |
d.m.Y |
Formato de fecha en los textos para el cliente |
Los correos de recordatorio y de renovación, los nombres de estado y el texto del ciclo tienen cada uno su clave (reminder_subject, renewal_intro_text, status_paused, etc.). Los valores por defecto están en Polski\Pro\Service\SubscriptionService. Los recordatorios y los pedidos de renovación se ejecutan en el evento cron polski_daily_maintenance.
Crear un producto de suscripción
Sección titulada «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
Sección titulada «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
Sección titulada «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
Sección titulada «Renovaciones»Renovación manual
Sección titulada «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
Sección titulada «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
Sección titulada «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
Sección titulada «Á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
Sección titulada «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
Sección titulada «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
Sección titulada «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
Sección titulada «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
Sección titulada «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
Sección titulada «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+)
Sección titulada «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+)
Sección titulada «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
Sección titulada «Panel de administración»Lista de suscripciones
Sección titulada «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
Sección titulada «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
Sección titulada «Problemas frecuentes»Los pedidos de renovación no se crean
Sección titulada «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
Sección titulada «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
Sección titulada «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