Title: Doctor Subs
Author: David
Published: <strong>03.12.2025</strong>
Last modified: 27.04.2026

---

ჩადგმების ძებნა

![](https://ps.w.org/doctor-subs/assets/banner-772x250.png?rev=3516753)

![](https://ps.w.org/doctor-subs/assets/icon.svg?rev=3516743)

# Doctor Subs

 ავტორი: [David](https://profiles.wordpress.org/davidrukahu/)

[ჩამოტვირთვა](https://downloads.wordpress.org/plugin/doctor-subs.2.1.0.zip)

 * [დეტალები](https://ka.wordpress.org/plugins/doctor-subs/#description)
 * [მიმოხილვა](https://ka.wordpress.org/plugins/doctor-subs/#reviews)
 *  [დაყენება](https://ka.wordpress.org/plugins/doctor-subs/#installation)
 * [დეველოპმენტი](https://ka.wordpress.org/plugins/doctor-subs/#developers)

 [მხარდაჭერა](https://wordpress.org/support/plugin/doctor-subs/)

## აღწერა

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:

 1. A plain-English explanation of what happened (no jargon)
 2. A preview modal showing exactly which fields will change before you commit
 3. A one-click fix that WordPress handles for you
 4. A journal entry you can undo at any time
 5. 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).

## ეკრანული სურათები

 * [[
 * 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

## დაყენება

#### Automatic

 1. Plugins > Add New > search “Doctor Subs”
 2. Install > Activate

#### Manual

 1. Download the plugin zip from WordPress.org or GitHub Releases
 2. Plugins > Add New > Upload Plugin
 3. Install > Activate

#### After activation

 1. WooCommerce > Doctor Subs
 2. Click **Scan my subscriptions**
 3. Review the X-of-Y healthy stat and the two action counters, click into the broken
    bucket, preview a fix, commit

## ხდკ

### 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_renewal`
flag 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-stamps `next_payment` if 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_SIZE` constant 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_Interface` and register on the `dr_subs_register_rules`
action. See the six built-in rules under `includes/rules/` for examples.

### Is HPOS supported?

Required. Doctor Subs declares High-Performance Order Storage compatibility and 
requires WooCommerce 9.0 or higher.

## მიმოხილვები

There are no reviews for this plugin.

## მონაწილეები & დეველოპერები

“Doctor Subs” ღია პროგრამული უზრუნველყოფაა. შემდეგმა ადამიანებმა წვილი შეიტანეს 
მის განვითარებაში.

მონაწილეები

 *   [ David ](https://profiles.wordpress.org/davidrukahu/)

[გადათარგმნეთ Doctor Subs თქვენს ენაზე.](https://translate.wordpress.org/projects/wp-plugins/doctor-subs)

### დაინტერესებული ხართ დეველოპმენტით?

[დაათვალიერეთ კოდი](https://plugins.trac.wordpress.org/browser/doctor-subs/), შეამოწმეთ
[SVN რეპო](https://plugins.svn.wordpress.org/doctor-subs/), ან გამოიწერეთ [შექმნის ჟურნალი](https://plugins.trac.wordpress.org/log/doctor-subs/):
[RSS](https://plugins.trac.wordpress.org/log/doctor-subs/?limit=100&mode=stop_on_copy&format=rss).

## ცვლილებები

#### 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_transitions` 
   log 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: value`
   after-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_transitions` table with `sub_id`,`
   from_status`, `to_status`, `product_id`, `variation_id`, `transitioned_at`. Pruned
   daily on a 30-day TTL.
 * Scanner now walks `active`, `on-hold`, and `pending-cancel` statuses (was `active`
   only). 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-danger` token using the existing terracotta `--broken` for genuinely
   destructive actions.

**Internal:**

 * New `DR_Subs_Rule_Catalog` central source-of-truth for per-rule label, summary,
   detect, fix, bucket, and journal_summary copy.
 * New `dev/` directory with `seed-test-data.php` and `wipe-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

## მეტა

 *  Version **2.1.0**
 *  Last updated **1 დღის წინ**
 *  Active installations **10-ზე ნაკლები**
 *  WordPress version ** 6.4, ან უფრო მაღალი **
 *  Tested up to **6.9.4**
 *  PHP version ** 7.4, ან უფრო მაღალი **
 *  Language
 * [English (US)](https://wordpress.org/plugins/doctor-subs/)
 * Tags
 * [diagnostics](https://ka.wordpress.org/plugins/tags/diagnostics/)[subscriptions](https://ka.wordpress.org/plugins/tags/subscriptions/)
   [troubleshooting](https://ka.wordpress.org/plugins/tags/troubleshooting/)[woocommerce](https://ka.wordpress.org/plugins/tags/woocommerce/)
 *  [დამატებითი ხედი](https://ka.wordpress.org/plugins/doctor-subs/advanced/)

## რეიტინგები

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/doctor-subs/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/doctor-subs/reviews/)

## მონაწილეები

 *   [ David ](https://profiles.wordpress.org/davidrukahu/)

## მხარდაჭერა

გაქვთ კომენტარი? გჭირდებათ დახმარება?

 [მხარდაჭერის ფორუმის ნახვა](https://wordpress.org/support/plugin/doctor-subs/)