Açıklama
Doctor Subs is a focused diagnostic tool for WooCommerce Subscriptions. It runs a daily background scan across every active and on-hold subscription on your store, classifies each one as healthy / at risk / broken, and gives you a one-click preview + fix + undo for the six most common renewal failure patterns – including the silent manual-renewal-flag bugs that quietly stop auto-renewals.
Built for solo, non-technical store owners with 20 to 500 active subscriptions. No log-reading, no WP-CLI, no support tickets.
What it detects
- Manual-renewal drift – active subs silently flipped to “manual renewal” despite a working Stripe card on file. Maps directly to the four subscriptions-core bugs disclosed in April 2026 (stale dates cache, HPOS to postmeta sync gap, wcs_create_subscription state discard, same-gateway switch). Customers churn invisibly.
- Ghost subscriptions – active subs whose next payment was supposed to fire but WordPress never scheduled the renewal event. Silent revenue loss.
- Mass on-hold cascade – 20 or more subs sharing the same product transitioning to on-hold within an hour. Symptom of a product-edit cascade or faulty bulk operation that takes out a whole product line at once.
- Stuck on-hold – subs whose latest Stripe renewal actually captured successfully but the status never flipped back to active. Customer paid, your store shows them as delinquent.
- Repeated payment failures – 2 or more failed scheduled payment attempts in the last 30 days. Often a gateway blip that a single retry fixes.
- Total drift – stored subscription total no longer matches the line items. Flagged for manual review (drift causes are too varied to safely auto-correct).
What it does about them
Every detected problem gets:
- A plain-English explanation of what happened (no jargon)
- A preview modal showing exactly which fields will change before you commit
- A one-click fix that WordPress handles for you
- A journal entry you can undo at any time
- An explicit warning if reverting cannot undo something that already ran (e.g. a re-scheduled payment already charged the customer)
All fixes are state-guarded: if the subscription changed between detection and when you click Fix, the plugin aborts and asks you to re-scan. You never get surprised.
Dashboard + alerts
- Calm-clinical dashboard – “X of Y healthy” stat plus two action counters (At risk / Broken). Click any counter, search by sub number, customer name, or email, and filter by rule chip.
- Bulk fix – “Fix all N matches” across one rule or every visible row. Each fix lands as its own reversible journal entry.
- Daily background scan – Action Scheduler runs the scan automatically. A WP-Cron watchdog catches the rare case when AS stops firing.
- Email digest – when something new breaks between scans, you get a plain-text summary email.
- Fix history – every applied fix, with Revert on each. Configurable retention (30 to 365 days, or forever).
- Per-rule on/off – any of the six rules can be disabled in Settings if it’s noisy in your store.
Modern design system
Self-hosted typography (Switzer, Source Serif 4, JetBrains Mono), OKLCH colour tokens, full responsive + print stylesheets, WCAG 2.1 AA contrast, prefers-reduced-motion respected. Scoped to Doctor Subs – never leaks into the rest of WP admin.
Translations
Ships in 20 major languages: French, Spanish, German, Italian, Portuguese (BR + PT), Dutch, Polish, Russian, Japanese, Chinese (Simplified + Traditional), Korean, Arabic, Turkish, Swedish, Norwegian, Danish, Finnish, Czech.
Privacy
- Zero external asset fetches at runtime. Fonts, CSS, JS all bundled.
- No data leaves your site unless you explicitly opt in to anonymous fix telemetry (off by default; rule name + timestamp only, no customer data).
Ekran Görüntüleri

Calm dashboard with the X-of-Y healthy stat, two action counters, search, rule chips, and the Needs attention table 
Fix preview modal with the plain-English narrative, named diff, and “you can undo this” reassurance 
Fix history with per-entry Revert buttons and an escalated confirm when the renewal payment has already executed 
Settings page with per-rule on/off toggles plus full plain-English descriptions of what each rule detects and fixes 
Bulk-fix confirm modal: lists per-rule counts, warns about scheduled renewal payments, primary button reflects the exact count
Yükleme
Automatic
- Plugins > Add New > search “Doctor Subs”
- Install > Activate
Manual
- Download the plugin zip from WordPress.org or GitHub Releases
- Plugins > Add New > Upload Plugin
- Install > Activate
After activation
- WooCommerce > Doctor Subs
- Click Scan my subscriptions
- Review the X-of-Y healthy stat and the two action counters, click into the broken bucket, preview a fix, commit
SSS
-
Does Doctor Subs fix issues automatically?
-
No. The plugin never mutates your data without an explicit Fix click. Every change shows a preview first and lands in the Fix history with a Revert button. The scanner only detects; the merchant decides.
-
What happens if I revert a fix after the payment already ran?
-
The revert confirm explicitly tells you: the re-scheduled payment has already charged the customer, reverting will undo the status change but will NOT refund. If a refund is needed, handle it in the related WooCommerce order.
-
Does it really detect the silent “manual renewal” bug?
-
Yes. The Manual-renewal drift rule looks for active subs whose
_requires_manual_renewalflag is set despite a working Stripe customer/source meta on file. It clears the flag in both the orders table and postmeta (belt-and-braces against the HPOS sync gap), re-stampsnext_paymentif past-due, and schedules a fresh renewal so WCS bills automatically again. -
Is this a replacement for dunning management?
-
No. Doctor Subs fixes structural issues (missing AS events, stuck-on-hold statuses, manual-renewal flag drift, line-item total drift). It does not handle card declines, SCA prompts, or retry strategy. For those, use your gateway’s built-in dunning or a dedicated plugin.
-
Which gateways does it support?
-
v2.1: Stripe fully supported across all rules that need a gateway signal (stuck on-hold, manual-renewal drift). The remaining rules are gateway-agnostic. PayPal, Authorize.net, Square, and WooPayments variants land in a future release.
-
Will it work on stores with 10,000+ subscriptions?
-
Yes. The scanner uses a shared pre-built index so every rule is O(1) per sub (no N+1 queries). The
DR_SUBS_SCAN_BATCH_SIZEconstant lets you tune the batch size in wp-config.php for very large stores. -
Can I extend it with my own rules?
-
Yes. Implement
DR_Subs_Rule_Interfaceand register on thedr_subs_register_rulesaction. See the six built-in rules underincludes/rules/for examples. -
Is HPOS supported?
-
Required. Doctor Subs declares High-Performance Order Storage compatibility and requires WooCommerce 9.0 or higher.
İncelemeler
Bu eklenti için herhangi bir değerlendirme bulunmuyor.
Katkıda Bulunanlar ve Geliştiriciler
“Doctor Subs” açık kaynaklı yazılımdır. Aşağıdaki kişiler bu eklentiye katkıda bulunmuşlardır.
Katkıda bulunanlar“Doctor Subs” eklentisini dilinize çevirin.
Geliştirmeyle ilgilenir misiniz?
Kodu görüntüleyin, SVN deposuna göz atın ya da RSS ile geliştirme günlüğüne abone olun.
Değişiklik Kaydı
2.1.0
Major detection + UX expansion. Six rules now ship; design language tightened.
New rules (3):
- Manual-renewal drift (Stripe-only): detects active subs silently flipped to manual renewal despite a Stripe customer/source on file. Direct response to the four April 2026 subscriptions-core bug disclosures. Fix clears the flag in HPOS + postmeta, re-stamps next_payment if past-due, and schedules a fresh renewal.
- Mass on-hold cascade: detects 20 or more on-hold transitions for the same product within a 1-hour window. Backed by a new
dr_subs_status_transitionslog written by an observer on every subscription status change. Fix reactivates each cascade member; bulk-fix recovers the whole cascade in one click. - Total drift (flag-only): detects subs whose stored total no longer matches the sum of line items + tax + shipping + fees by more than $0.50, ignoring subs modified in the last 7 days. Surfaces the discrepancy and links to the sub for manual review.
Dashboard:
- Healthy counter relocated as an “X of Y healthy” stat above the action counters; can no longer be mistaken for a clickable filter.
- Search bar matches sub number, customer name, and billing email. Debounced, ESC clears.
- Rule chip filters above the table; bucket counter and rule chip are now mutually exclusive (clicking one clears the other).
- Reason column strips inline HTML so emphasis tags never render literally.
- Issue column header moved to screen-reader-only; the rule pill carries the label.
Bulk + revert:
- Bulk-fix button beside the active rule chip OR in “All rules” mode: groups visible rows by rule, posts one batch per rule, surfaces a styled confirm modal listing the per-rule counts and a renewal-payment warning. Total Drift opts out (manual-only).
- Revert confirm now opens a styled in-plugin modal instead of
window.confirm(). When the journal entry’s AS action has already executed, the modal escalates to a danger-styled button and the explicit “this will NOT refund” warning.
Settings:
- New “Detection rules” section listing all six rules with toggle, plain-English Detects/Fix descriptions, and bucket tag. Disabled rules skip detection on every scan.
- Plain-English summaries on dashboard rule chips and table pills via
DR_Subs_Rule_Catalog.
Fix history:
- Plain-English summary per row (“Rescheduled the missed renewal payment”, “Reactivated as part of a mass-hold cascade recovery”, etc.) instead of the raw
key: valueafter-state dump. - All canonical rule ids now render correct labels (legacy short ids fall back).
Schema + scanner:
- Schema bumped to 2.1.0; new
dr_subs_status_transitionstable withsub_id,from_status,to_status,product_id,variation_id,transitioned_at. Pruned daily on a 30-day TTL. - Scanner now walks
active,on-hold, andpending-cancelstatuses (wasactiveonly). Mass-hold + Stuck-on-hold rules now reach their target subs. - Manual_renewal_drift registered before Ghost_sub so it claims primary-rule on the same broken state with the right fix. Ghost_sub now skips manual-renewal subs entirely.
Design + accessibility:
- Display typeface swapped from Instrument Serif to Source Serif 4 (less editorial-romantic, calmer italic).
- Counter numerals dropped from 62px display serif to 32px Switzer 500: a 28-broken count no longer reads like a panic-amplifier.
- Dashboard hint copy de-imperative-d (“needs you now” -> “since last scan”).
- All em dashes / en dashes / minus signs replaced with plain hyphens across PHP, JS, CSS, and views.
- Modal focus on open lands on the dialog itself (tabindex=-1) so the sub-id link no longer reads as “selected”.
- New
.btn-dangertoken using the existing terracotta--brokenfor genuinely destructive actions.
Internal:
- New
DR_Subs_Rule_Catalogcentral source-of-truth for per-rule label, summary, detect, fix, bucket, and journal_summary copy. - New
dev/directory withseed-test-data.phpandwipe-test-data.php(excluded from the production zip via build script + CI workflow).
2.0.0-alpha.1
Major rewrite. Single breaking change moment: every PHP class renamed from WCST_* to DR_Subs_*; legacy class_alias shims ship for the three most-likely-extended public classes.
- Traffic-light dashboard with per-bucket drill-down
- Three deterministic detection rules: Ghost Sub, On-Hold with Paid Renewal (Stripe), Repeated Payment Failures
- Daily background scanner via Action Scheduler + WP-Cron watchdog
- One-click fixes with state-guarded apply and reversible Fix journal
- Fix preview modal with named diff and executed-payment warning
- Email digest alerts (off by default; configurable recipient)
- Settings page with retention controls and anonymous telemetry opt-in
- 20 language translations via Potomatic
- Self-hosted typography, no external asset fetches
- HPOS baseline (WC 9.0+)
1.2.4
- Fixed all security issues (sanitization, validation, escaping)
- Fixed Action Scheduler compatibility (scheduled_date_gmt column)
- Improved error handling and debugging
- Enhanced analyzer stability
- Added PHPCS configuration
1.2.3
- Initial release
