Today I want to tell you about a free plugin we have published in the repository, and which is our second most used and downloaded free plugin after our famous plugin for Importing and Exporting Users and Customers (which today is the de facto standard for that job in this ecosystem). This second plugin is First Payment Date for WooCommerce Subscriptions and, well, I think its name makes it clear what it does: it lets you set fixed payment dates in WooCommerce Subscriptions.
WooCommerce Subscriptions lets you delay the first charge of a subscription through the trial period: “1 month free”, “15 days free”… The problem is that a trial period is relative to the moment of purchase, not a specific date.
In other words, with WooCommerce Subscriptions you can say “one month free”, but you cannot say “this subscription starts being charged on January 1st, no matter who buys it or when”.
And that is exactly the real need of a great many businesses:
The First Payment Date for WooCommerce Subscriptions plugin solves exactly that: it lets you set a date (fixed or calculated) for the first payment, and it takes care of translating it internally into the trial period in days that WooCommerce Subscriptions needs.
Important note for new products: the plugin fields only appear on Simple subscription or Variable subscription products. When you create a new product, WooCommerce treats it as a simple product, so save it as a subscription first and reload the screen; the fields will then show up.
Edit the product and go to Product data → General. Below the usual WooCommerce Subscriptions fields you will see a new block with the “First payment date type” selector, offering three options:
This is the default value. The plugin steps aside and WooCommerce Subscriptions works as usual, with its classic trial period field. Use it when you really want an “X days free” relative to the purchase.
A calendar field appears where you choose a specific date (for example, 2027-01-01).
What happens from that point on:
A technical detail you will appreciate: the calculations are made using your WordPress time zone and setting the time to 12:00, precisely to avoid the classic one-day offset when someone buys in the early hours or right before the day changes.
Here is the magic for calendar-based recurring subscriptions. Instead of a static date you would have to update every year, you choose a rule, and the plugin calculates the date at the moment of each purchase. The free version offers two rules:
Besides, the plugin is smart enough not to break with short months: if the rule points to a day that does not exist in the target month (the 31st in February, for example), it uses the actual last day of that month instead of skipping the whole month.
Need more rules? The 15th of next month, the last day of the month, “the next 10th, whether it is this month or the next one”… These advanced options are in the premium version. I go through them further down, but if you already know you need them: Payment Schedule for WooCommerce Subscriptions.
If you sell a variable subscription (for example, monthly plan / quarterly plan / annual plan), you will find the same fields inside each variation, in the Variations tab.
Each variation can have its own type and its own date, so you can set up combinations such as:
One thing to keep in mind: on a variable product page, before the customer picks a variation, WooCommerce Subscriptions shows the data of the first variation. The plugin compensates for this: when the customer selects a specific variation, the “First payment: …” line is dynamically updated to that variation’s real date.
If you have a product with 20 variations, you are not going to edit them one by one. In the Variations tab, in the bulk actions dropdown, the plugin adds a “First payment date” group with the “Set fixed first payment date” action.
You choose it, it asks you for the date in YYYY-MM-DD format, and it applies to every variation: fixed date type, the date you entered, and trial period set to zero. A matter of seconds.
Bulk editing of the expiration date (the last payment) is a premium version feature: see Payment Schedule for WooCommerce Subscriptions.
Here is one of the most important improvements of the latest versions. Before, a customer would see something like “€29.00 / month with 24 days free trial”, which is a rather confusing way to communicate “you start paying on April 1st”.
Now, when a product has a first payment date configured:
WooCommerce Subscriptions limits by default the length of periods expressed in days. Since this plugin translates dates into trial days, that limit would be a problem: a date 10 months away is more than 300 days.
That is why the plugin extends the range of day-based periods up to 730 (two years) in the dashboard. This way you can set a first payment date far into the future with no problem.
In case you want to use them to extend it yourself (if you want more hooks, write to us and we will add them):
fpdws_date_first_payment_calculated_options — filter to add your own calculated date rules to the dropdown. (It is exactly the filter the premium add-on uses to inject its dozens of extra options.)fpdws_disable_add_to_cart_validation — return true to disable writing metadata when adding to the cart, if your installation has a particular purchase flow.fpdws_after_simple_subscription_product_options — action to render your own fields after the plugin’s ones on simple subscriptions.fpdws_after_variation_subscription_product_options — the same, for variations.The free version answers one question very well: when is the first charge made? But there are real scenarios that require controlling the whole payment schedule, from start to finish. That is what the premium add-on brings, Payment Schedule for WooCommerce Subscriptions, which is installed alongside the free one and adds its fields on the same screens.
These are the features that are not available in the free version:
Just as you set the start date, you can set the end date: fixed or calculated. The plugin calculates for you how many payments fit between both dates according to the product’s period and interval, and adjusts the subscription length automatically.
It is the only clean way to set up the classic case: “the fee runs from January 1st to December 31st, whenever you happen to pay”. → See the premium version
The free version offers two rules. The premium one dynamically generates the complete list:
And all of them are available both for the start date and for the expiration date. → See all the calculated date options
The premium version adds a “Payment schedule” tab on the product page, where you can see before publishing exactly which payments would be made if someone bought right now: how many, on which dates and for what amount. On variable products it shows the breakdown variation by variation.
It is the best tool to spot wrong configurations before a customer spots them. → See the premium version
With the [payment-schedule] shortcode (optionally [payment-schedule product_id="123"]) you can publish that very same schedule on the product page or on any page. Total transparency for the customer and fewer support requests. → See the premium version
WooCommerce Subscriptions generates automatic texts that sometimes sound artificial or downright confusing. The premium version lets you completely replace that text with your own, product by product (and variation by variation), even supporting links. → Customize the WooCommerce Subscriptions messages
Instead of giving away the days between the purchase and the first payment date, you can charge them proportionally by including them in the sign-up fee. The calculation is made according to the subscription period and the remaining days.
With this, a customer who subscribes on March 20th to a monthly fee starting on April 1st pays 11 proportional days up front, instead of getting them for free. → See the first payment proration
By default, WooCommerce Subscriptions calculates the next charge from the moment the previous payment was processed. If a payment is two days late, the whole schedule shifts by two days. The preserve schedule option makes the next date be calculated from the expected date, not from the actual one, keeping the charge day stable month after month. → See the premium version
An option so that the cart and checkout totals show only the recurring amount and the interval, without the “for X months” that in many businesses is unnecessary or confusing. → See the premium version
I cannot see the plugin fields on my product. Save the product first as a Simple subscription or Variable subscription and reload the page. WordPress creates products as “simple” by default, and the fields are only shown on subscription products.
What happens if the date I set has already passed? The plugin ignores it and applies a trial period of 0 days: the customer pays immediately. No error occurs and the purchase is not blocked.
And what if I use a calculated date such as “first day of next month”? You do not have to maintain anything. The date is recalculated on every purchase, so the product stays correct indefinitely. That is why, for calendar-based recurring fees, calculated dates are always a better option than fixed ones.
My variable product shows the wrong date before choosing a variation. That is WooCommerce Subscriptions‘ own behaviour, as it shows the data of the first variation. As soon as the customer selects a variation, the date updates to the correct one.
Does it work with HPOS? Yes, the plugin declares compatibility with WooCommerce High-Performance Order Storage.
If you sell subscriptions with WooCommerce and you need charges to happen on specific dates and not “X days after the purchase”, First Payment Date for WooCommerce Subscriptions covers the essentials for free: fixed date, calculated date, variable products, bulk editing and a clear message for the customer.
And when your business requires controlling the complete schedule —expiration date, dozens of calculation rules, payment preview, your own messages, proration and a stable charge day—, the natural step is Payment Schedule for WooCommerce Subscriptions, which extends the free one without changing anything you already have configured.