Everything set up in the plan comes together on the product page. WPSubscription 2.0 replaces the old single line of subscription text with a plan selector — a card per plan, a button per duration, and a badge showing what subscribing saves against buying once.

It needs no theme work and no shortcode. Connect a product to a plan and the selector appears above the Add to cart button.

The product page

Screenshot of a WooCommerce product page with the WPSubscription plan selector above the Add to cart button
The selector sits where a shopper already looks — between the description and Add to cart.

The selector, close up

Close-up screenshot of the plan selector showing a Subscribe and Save card with three duration buttons and a One Time Purchase card
One card per plan, one button per duration, one-time purchase last.
  • Each card is one plan. Its heading is the plan's name, exactly as you typed it when you created the plan.

  • The line under the heading is the billing note — the price and how often it is charged, with the regular price struck through when there is a discount.

  • Each button is one of the plan's active durations, labelled with the duration's name.

  • One Time Purchase is a card of its own, shown only when you have turned one-time purchase on for the product.

The first card is selected by default, on its first duration — so a customer who reads nothing and clicks Add to cart gets a subscription on your leading plan.

The discount badge

When a duration's offer price is below its regular price, WPSubscription works out the percentage and shows it on the card.

Close-up screenshot of a plan card with a Save 14 percent badge and the regular price struck through beside the offer price
$34.95 struck through, $29.95 charged, Save 14% on the badge. You set the two prices; the badge is calculated.
  • All the durations on a card discount by the same amount → Save 14%.

  • They discount by different amounts → Save up to 20%, quoting the best one.

  • No offer price anywhere on the card → no badge.

Note: The badge is measured against the Regular Price you set for that duration on the plan, not against the product's WooCommerce price. If you want the badge to read "what you save by subscribing", set the duration's regular price to the one-time price and the offer price to the subscriber price. See Plan products and pricing.

Choosing a duration

Clicking a duration button rewrites the card's billing note in place — no page reload, no flicker.

Screenshot of the plan selector with the third duration button selected and the billing note updated to show the 3-month price
"Billed every 3 months" selected; the note now reads $29.95 / 3 months.

Whatever is highlighted when the customer presses Add to cart is what goes into the cart.

One-time purchase

Where you have allowed it, the last card lets the customer opt out of subscribing entirely.

Screenshot of the plan selector with the One Time Purchase card selected instead of the subscription card
One Time Purchase selected. Add to cart now adds a normal WooCommerce line, with no renewals.

It is deliberately placed last, under the subscription cards, so the subscription is what the customer reads first and what they get by default.

Variable products

Note: Variable products require WPSubscription Pro.

Plans can differ per variation, so the selector waits until the customer has chosen one.

Screenshot of a variable product page before a variation is chosen, showing the message Select options to see available plans
Before a variation is picked, the selector says why it is empty.

Choose a variation and its plans appear, priced for that variation.

Screenshot of the same variable product after choosing a size, with the plan selector showing that variation's durations and prices
The 150 softgels variation and its own prices. Switching size rebuilds the selector.

A variation that is not on a plan simply shows no selector and sells as an ordinary product; the rest of the variations are unaffected.

The catalogue

Shop and category pages show the plan price too, so the price on a listing matches the price on the product page.

Screenshot of a WooCommerce category page showing plan-priced products in the product grid
Plan prices in the product grid.

A listing has no room to ask which duration the shopper wants, so the price is summarised:

  • One duration, discounted → the regular price struck through beside the offer price.

  • Several durations that all cost the same → that single price.

  • Several durations at different prices → the range, cheapest to dearest.

No billing period is shown in the catalogue. The period belongs to a duration, and the listing is not showing one — the product page is where the customer picks.

In the cart

The cart line spells the whole arrangement out: what is being charged, how often, what it saves, and when the next payment falls.

Screenshot of the WooCommerce cart with a subscription line showing the discounted price, the billing period, the saving and the recurring totals
The cart line and the Recurring totals block beside it.
  • The line shows the struck-through regular price, the price being charged, and the billing period.

  • Save $5.00 restates the discount in money rather than percent.

  • Recurring totals gives the amount per cycle and the date of the next payment — the two things a shopper wants confirmed before paying.

Restyling the selector

The selector is a WooCommerce template, so you can override it the usual way — copy it into your theme at:

your-theme/subscription/product/plan-selector.php

For colours and spacing alone, target the selector's classes in your theme's stylesheet instead; you get the markup updates that way.

Class

Element

.subscrpt-buybox

The selector as a whole

.subscrpt-buybox__card

One plan card. .is-selected when chosen

.subscrpt-buybox__badge

The "Save 14%" badge

.subscrpt-buybox__label

The plan name

.subscrpt-buybox__note

The billing note under the name

.subscrpt-buybox__term

One duration button. .is-active when chosen

.subscrpt-buybox__price

The price on the One Time Purchase card

The badge wording can be changed in code without touching the template, through the subscrpt_plan_card_badge filter — return an empty string to hide it.

If the selector does not appear

Check

Where

Is the product on a plan?

Product → Subscription tab. It should name a plan, not offer to connect one.

Is Enable subscription on?

Same tab, top left. Off means the product sells as an ordinary product.

Does the plan have an active duration?

Plan → Durations. A draft duration is never shown to customers.

Is the duration enabled for this product?

Plan → Products → expand the product. The Status column must read Enabled.

Variable product on the free plugin?

Variable products need Pro.

What to do next