Custom Subscription Workflow for WooCommerce
what a custom subscription workflow WooCommerce build includes
Everything from the billing model through the renewal logic, the customer account screens and the failure handling, delivered as a versioned plugin you own.
get a quoteBilling logic and proration
Custom intervals, trials, setup fees, mid-cycle upgrades and downgrades with proration, usage-based or seat-based pricing, and grouped renewals that bill once for several products on the same date.
Renewal and dunning automation
Scheduled renewals through Action Scheduler, retry ladders for failed payments, tokenised cards via Stripe or PayPal, and the emails and account notices that keep involuntary churn down.
Integration and account tooling
Hooks into your CRM, fulfilment or licensing system, custom My Account tabs, admin reporting and a WP-CLI command set so support staff can pause, resume or migrate subscribers safely.
how we build a custom subscription workflow in WooCommerce
where the default plugin stops
WooCommerce Subscriptions is a solid base. It gives you the shop_subscription post type, scheduled renewals through Action Scheduler and payment tokens for Stripe, PayPal and Braintree. What it does not give you is your business model. Typical requests we get: a trial that converts only after onboarding is complete, a plan that bills per active seat at the end of the month, a box subscription where the customer picks contents before each cut-off date, or an annual plan that has to sync to a licence server the moment payment clears. None of these are settings. Each one is a custom subscription workflow WooCommerce needs code for, and the quality of that code decides whether renewals run quietly for years or wake you up at 2am.
Signs that you have outgrown the defaults:
- Support staff editing subscriptions by hand in wp-admin every week because the plugin cannot express the plan.
- Failed renewals piling up in
wp_actionscheduler_actionsbecause the retry logic was never configured, or a snippet in functions.php throws on edge cases. - Customers charged twice, or not at all, after a plan switch because proration was approximated with a manual coupon.
- A Zapier chain of five steps that usually tells your fulfilment or CRM system about a new subscriber.
- Reporting done in a spreadsheet because MRR, churn and cohort data are not in the WooCommerce Analytics tables.
how we design the workflow
We start with a state diagram, not code. Every subscription status (pending, active, on-hold, pending-cancel, cancelled, expired) gets defined transitions, and every transition names the hook that fires it and the side effects that must run. WooCommerce Subscriptions exposes the hooks we need: woocommerce_subscription_status_updated, woocommerce_scheduled_subscription_payment, wcs_renewal_order_created, woocommerce_subscription_payment_complete and woocommerce_subscriptions_switch_completed. For pricing we filter woocommerce_subscriptions_product_price or register a custom product type that extends WC_Product_Subscription. For usage billing we record usage in a custom table (never in post meta at volume) and compute the renewal total in wcs_renewal_order_items before the gateway charges the token.
Every side effect that talks to an external system runs asynchronously through Action Scheduler with an idempotency key, so a CRM timeout never blocks a payment. If you also need the CRM side built, our WooCommerce CRM integration service covers HubSpot, Zoho and Salesforce sync in both directions.
what the build delivers
- A single versioned plugin in its own Git repository, with PHPUnit tests around the pricing and transition logic. No snippets in the theme.
- Custom My Account endpoints (added via
add_rewrite_endpointandwoocommerce_account_menu_items) so customers can pause, skip, switch plan or update their card without contacting support. - A dunning ladder: configurable retry schedule, pre-dunning emails through
WC_Emailsubclasses, and automatic on-hold after the final retry. - WP-CLI commands (
wp swd-subs migrate,wp swd-subs reconcile) for bulk plan moves and for reconciling gateway records against local subscriptions. - Admin reporting: MRR, active count and churn per plan, queried from
wp_wc_order_statsand the subscription tables rather than a spreadsheet export.
migrating existing subscribers
If you are coming from Chargebee, Recurly, MemberPress or an older WooCommerce setup, we import the payment tokens directly (Stripe supports cross-account payment method migration; PayPal reference transactions carry over with the billing agreement ID), create the subscriptions with wcs_create_subscription() and set the next payment date to match the old schedule. We rehearse the migration on a staging copy, compare the renewal calendar against the source system and only then run it live, usually in a maintenance window under an hour.
performance and checkout
Subscription checkouts are slower than one-off orders because the gateway has to create a customer and a payment method before the order is placed. We keep the extra work off the critical path and profile the checkout with Query Monitor before launch. If your store’s checkout is already slow, read about our WooCommerce checkout speed fix first; a subscription layer on a slow checkout only makes it worse. For stores being built from scratch, the subscription workflow is scoped as part of full website development so the catalogue and checkout are designed around it from day one.
timeline and pricing
A typical custom subscription workflow WooCommerce engagement takes three to six weeks: one week for the state diagram and technical spec, two to four weeks of build and testing, and a final week for migration rehearsal and go-live. You get a fixed scope and fixed price in writing before any code is written, and a straight answer on cost within 24 hours of our first call. We walk through the reasoning in more depth in Building a Custom Subscription Workflow in WooCommerce (Beyond the Default Plugin), or you can send us your plan structure and we will tell you what it takes to build.
