Title: Flexa Extra – Product Options, Variation Swatches &amp; Pricing for WooCommerce
Author: FlexaTech
Published: <strong>ସେପ୍ଟେମ୍ବର 8, 2026</strong>
Last modified: ସେପ୍ଟେମ୍ବର 20, 2026

---

Search plugins

![](https://ps.w.org/flexa-extra/assets/banner-772x250.png?rev=3696470)

![](https://ps.w.org/flexa-extra/assets/icon-256x256.png?rev=3685911)

# Flexa Extra – Product Options, Variation Swatches & Pricing for WooCommerce

 By [FlexaTech](https://profiles.wordpress.org/flexatech/)

[Download](https://downloads.wordpress.org/plugin/flexa-extra.1.10.5.zip)

 * [Details](https://ory.wordpress.org/plugins/flexa-extra/#description)
 * [Reviews](https://ory.wordpress.org/plugins/flexa-extra/#reviews)
 *  [Installation](https://ory.wordpress.org/plugins/flexa-extra/#installation)
 * [Development](https://ory.wordpress.org/plugins/flexa-extra/#developers)

 [Support](https://wordpress.org/support/plugin/flexa-extra/)

## Description

Flexa Extra lets you attach extra option fields to WooCommerce products so shoppers
can personalize what they buy and you can charge for it. Build an **Option Set**
once, assign it to products (all, a hand-picked list, or by category/tag/price/stock
conditions), and the fields appear on the product page with live price updates.

Every price is recomputed on the server from your saved field definitions when the
product is added to the cart (a client-submitted price is never trusted), so the
amount a shopper pays always matches what you configured.

📌 [**DEMO**](https://templates.sitebefy.com/templates/maison-verte/product/riviera-coral/)

#### Field types (free)

 * Text and textarea, with email, URL, phone or custom-regex validation
 * Number and range slider (min/max/step)
 * Date picker, time picker, date & time picker, and colour picker
 * Checkbox, radio, dropdown
 * Colour/image swatches
 * Button group
 * Heading / description block
 * Minimum and maximum number of choices on any multi-select field

#### Pricing

 * Per-field or per-option surcharge
 * Fixed amount, a percentage of the product price, or a safe arithmetic formula
 * Formula prices use `base`, `qty` and other fields’ values with `+ - * / ( )` 
   and `round()`, `min()`, `max()` (no `eval`), for per-unit and volume-tiered pricing
 * Conditional fees and discounts applied to the item when selections match a rule

#### Inventory

 * Optional stock limit per choice option: sold-out options are disabled, over-selling
   is blocked at add-to-cart, and paid orders draw the stock down (restored on cancel
   or refund)

#### Templates

 * Start from a template: pick a ready-made starter (gift wrapping, engraving, size&
   colour, installation service, warranty plan, product add-ons) and it creates 
   an option set, switched off, that you can edit before turning it on

#### Assignment & logic

 * Target all products, a manual list, or conditions (category, tag, product, price,
   stock)
 * Conditional logic to show/hide fields based on other selections
 * Duplicate an option set, and import or export sets as a JSON file
 * Live preview in the builder: see the option set render (and price) exactly as
   the storefront will, updating as you edit

#### Store insights

 * Analytics screen ranking which options and choices sell, and the add-on revenue
   they bring, filterable by date range and order status

#### Variation swatches

 * Turn WooCommerce variation attribute dropdowns into colour, image or button swatches
   on variable products, with its own admin screen to assign a colour or image to
   each attribute term (no extra plugin required)
 * The native variation `<select>` stays in place (hidden) and remains the source
   of truth: clicking a swatch drives WooCommerce’s own variation logic, so price,
   stock and gallery image update exactly as before, unavailable combinations are
   dimmed, and keyboard selection works
 * Size, shape, custom width/height, button font size, selected-ring and unavailable-
   strike colours, and an optional hover tooltip, all from the Style settings
 * Show the selected value as an “Attribute: Value” line, render attributes with
   no swatch type as buttons, and show a loading spinner while the variation updates
 * Choose how unavailable or out-of-stock swatches behave (dim and strike, hide,
   or show as normal), and optionally clear the choice by clicking the selected 
   swatch again
 * Limit how many swatches show per attribute with a “+N more” toggle, and show 
   per-swatch stock (“N left” on low stock, “Out of stock” when a combination is
   sold out)
 * Show swatches in the shop and category loop too: each links to the product with
   that option preselected
 * Only applies to global attributes (`pa_*`) that have terms; custom product-level
   attributes have no term to attach a colour/image to. If a dedicated plugin like
   Woo Variation Swatches is active, Flexa Extra steps aside automatically to avoid
   double rendering

#### Product badges

 * Show targeted badges on product thumbnails, in the shop and category loop and
   on the single product page: give each a label, background and text colour, a 
   corner (top-left, top-right, bottom-left, bottom-right) and a priority
 * Target the same way pricing rules do: all products, a manual list (searched with
   an async product/category/tag picker), or by brand, attribute or price range
 * Dynamic targets that read live product state: on sale, new (published recently),
   featured, low stock and out of stock, each of which can be inverted
 * Badges stack per corner in priority order, and the whole module has an on/off
   switch. It sits on the product image, separate from the pricing sale flash, so
   both can show at once

#### Headless & integrations

 * Gutenberg “Flexa Extra Configurator” block to show an option set with live pricing
   on any page or post (display only, does not add to cart)
 * Public read-only REST API for decoupled/headless storefronts: fetch a product’s
   option sets, prices, and logic to render the same configurator and subtotal elsewhere.
   Open by default, closable with a filter

#### Cart

 * Edit a line’s options straight from the cart: the product page reopens with the
   
   saved selections filled in, and re-adding replaces the line instead of stacking
   a duplicate

#### Display & accessibility

 * Position fields before or after the add-to-cart button
 * Live “extra subtotal” and “total price” readouts
 * Itemized price breakdown: each selected option and conditional fee/discount listed
   with its own price, updating live
 * Swatch size/shape and button colour styling
 * Accessible markup (fieldset/legend groups, `aria-required`, keyboard focus), 
   responsive, and reduced-motion aware

### Source code for compiled JavaScript and CSS

The admin app ships as a compiled bundle in `assets/dist/admin/`. The
 human-readable
TypeScript source and its build config live in the public repository at https://
github.com/flexatech/flexa-extra (under `apps/admin/`) and are built with pnpm +
Vite:

 1. `cd apps/admin`
 2. `pnpm install`
 3. `pnpm build` (or `pnpm dev` for a watched dev build)

The storefront assets in `assets/frontend/` are plain, unminified JS/CSS and need

no build step.

### External services

Storefront and configuration data (option sets, prices, orders, stock) stays in 
your own WordPress database. The plugin connects to one external service, and only
in the admin, for the reason below.

#### Deactivation feedback (Flexa Product Intelligence)

When you go to deactivate Flexa Extra on the Plugins screen, a short optional survey
asks why. This is served by Flexa’s product intelligence service at https://product-
intelligence.flexacommerce.com. It runs only on `wp-admin/plugins.php`, never on
the front end, and it never blocks or delays deactivation: if the service is unreachable,
the plugin still deactivates normally.

What is sent, and when:

 * On opening the Plugins screen: a request to `/api/v1/config` (the product slug
   and tier) to load the survey configuration. The response is cached for 6 hours.
 * When you deactivate or interact with the survey: the deactivation reason you 
   pick and any optional message you type, sent to `/api/v1/deactivations`, `/api/
   v1/events`, `/api/v1/feedback`, `/api/v1/feature-requests` and `/api/v1/recovery-
   events`.

Every request includes an anonymous per-site identifier (a random UUID generated
on your site), the plugin version and tier, and by default your WordPress version,
PHP version and locale. No email address, site domain, user identity or raw IP is
collected by the plugin. The environment details (WordPress/PHP/locale) can be turned
off, and the whole survey can be disabled, with the filters below.

 * Turn the survey off entirely: `add_filter( 'flexa_extra/deactivation_survey/enabled','
   __return_false' );`
 * Send only the anonymous identifier, version and tier (no WP/PHP/locale): `add_filter('
   flexa_extra/deactivation_survey/config', function ( $c ) { $c['collect_environment']
   = false; return $c; } );`

Service terms and privacy policy: https://flexacommerce.com/pages/terms and https://
flexacommerce.com/pages/privacy

## Screenshots

[⌊One home for the Flexa toolkit: open Product Options, Variation Swatches, Pricing
and Product Badges from a single modules screen, and see what's coming next.⌉⌊One
home for the Flexa toolkit: open Product Options, Variation Swatches, Pricing and
Product Badges from a single modules screen, and see what's coming next.⌉[

One home for the Flexa toolkit: open Product Options, Variation Swatches, Pricing
and Product Badges from a single modules screen, and see what’s coming next.

[⌊All your option fields on one product page: swatches, buttons, radio and checkbox
choices, priced live.⌉⌊All your option fields on one product page: swatches, buttons,
radio and checkbox choices, priced live.⌉[

All your option fields on one product page: swatches, buttons, radio and checkbox
choices, priced live.

[⌊Add-ons that charge automatically: per-option fees, a colour dropdown, and a date
picker on the product page.⌉⌊Add-ons that charge automatically: per-option fees,
a colour dropdown, and a date picker on the product page.⌉[

Add-ons that charge automatically: per-option fees, a colour dropdown, and a date
picker on the product page.

[⌊One option set reused across products: the same gift options assigned wherever
you need them.⌉⌊One option set reused across products: the same gift options assigned
wherever you need them.⌉[

One option set reused across products: the same gift options assigned wherever you
need them.

[⌊Build option sets by drag and drop: pick a field from the palette, drop it in,
and configure it in the inspector.⌉⌊Build option sets by drag and drop: pick a field
from the palette, drop it in, and configure it in the inspector.⌉[

Build option sets by drag and drop: pick a field from the palette, drop it in, and
configure it in the inspector.

[⌊Conditional fees and discounts: apply a fixed or percentage amount when the shopper's
selections match your rules.⌉⌊Conditional fees and discounts: apply a fixed or percentage
amount when the shopper's selections match your rules.⌉[

Conditional fees and discounts: apply a fixed or percentage amount when the shopper’s
selections match your rules.

[⌊Decide where each set applies: all products, a hand-picked list, or by category,
tag, price and stock conditions.⌉⌊Decide where each set applies: all products, a
hand-picked list, or by category, tag, price and stock conditions.⌉[

Decide where each set applies: all products, a hand-picked list, or by category,
tag, price and stock conditions.

[⌊Control what shoppers see: toggle the extra subtotal, total price, itemized breakdown,
and mini-cart values.⌉⌊Control what shoppers see: toggle the extra subtotal, total
price, itemized breakdown, and mini-cart values.⌉[

Control what shoppers see: toggle the extra subtotal, total price, itemized breakdown,
and mini-cart values.

[⌊Start from a ready-made template: six starters you can edit before turning the
set on.⌉⌊Start from a ready-made template: six starters you can edit before turning
the set on.⌉[

Start from a ready-made template: six starters you can edit before turning the set
on.

[⌊Variation swatches on the product page: colour, image and button swatches replace
the attribute dropdowns.⌉⌊Variation swatches on the product page: colour, image 
and button swatches replace the attribute dropdowns.⌉[

Variation swatches on the product page: colour, image and button swatches replace
the attribute dropdowns.

[⌊Set up variation swatches in the admin: give each attribute term a colour, image
or button style, with tabs for Swatches, Settings and Analytics.⌉⌊Set up variation
swatches in the admin: give each attribute term a colour, image or button style,
with tabs for Swatches, Settings and Analytics.⌉[

Set up variation swatches in the admin: give each attribute term a colour, image
or button style, with tabs for Swatches, Settings and Analytics.

[⌊Pricing dashboard: net impact, applications and average per order, tracked day
by day.⌉⌊Pricing dashboard: net impact, applications and average per order, tracked
day by day.⌉[

Pricing dashboard: net impact, applications and average per order, tracked day by
day.

[⌊Pricing simulator: test any product against every rule and see exactly why each
one fired.⌉⌊Pricing simulator: test any product against every rule and see exactly
why each one fired.⌉[

Pricing simulator: test any product against every rule and see exactly why each 
one fired.

[⌊Start from a ready-made pricing rule: pick a template, adjust it, and activate.⌉⌊
Start from a ready-made pricing rule: pick a template, adjust it, and activate.⌉[

Start from a ready-made pricing rule: pick a template, adjust it, and activate.

[⌊Every pricing rule in one place: drag to set priority, filter by type, and import
or export.⌉⌊Every pricing rule in one place: drag to set priority, filter by type,
and import or export.⌉[

Every pricing rule in one place: drag to set priority, filter by type, and import
or export.

[⌊Activity log: a full audit trail of who changed which rule, and when.⌉⌊Activity
log: a full audit trail of who changed which rule, and when.⌉[

Activity log: a full audit trail of who changed which rule, and when.

[⌊Pricing settings: control how rules stack, the discount base, and how prices are
displayed.⌉⌊Pricing settings: control how rules stack, the discount base, and how
prices are displayed.⌉[

Pricing settings: control how rules stack, the discount base, and how prices are
displayed.

## Blocks

This plugin provides 5 blocks.

 *   Flexa Discount Badge Show the discount badge for a product.
 *   Flexa Pricing Table Show the quantity/tier discount table for a product.
 *   Flexa Extra – Options configurator Show an interactive option-set configurator
   with live price on any page. Display only: selections are not added to the cart.
 *   Flexa Pricing Nudge Show the cart progress nudge toward the next discount.
 *   Flexa Pricing Countdown Show a countdown to a pricing rule's end time.

## Installation

 1. Upload the plugin to `/wp-content/plugins/flexa-extra` or install it through the
    Plugins screen.
 2. Activate it. WooCommerce must be active.
 3. On activation a short quick-start guide points you at the template gallery so you
    can build your first Option Set in a couple of minutes. It is skippable, and you
    can replay it later from Advanced settings.
 4. Open **Flexa Extra** in the admin menu to configure settings and build Option Sets.

## FAQ

### Does it require WooCommerce?

Yes. Flexa Extra stays inactive (with an admin notice) until WooCommerce is active.

### Can a customer tamper with the surcharge?

No. The extra price is recomputed server-side from your stored option definitions
on add-to-cart and on every cart totals pass; the posted values are sanitized against
the field schema.

### Is it compatible with High-Performance Order Storage (HPOS)?

Yes. The plugin declares HPOS compatibility.

### Can developers extend it?

Yes, see `docs/HOOKS.md` for the available actions and filters.

### Can I style individual fields with my own CSS?

Yes. Each field is wrapped in a `<div>` with class hooks: `flexa-extra-field` on
every wrapper, `flexa-extra-field--<type>` for all fields of a type, and `flexa-
extra-field--id-<field_id>` for one specific field (plus `data-field-id` and `data-
field-type` attributes). You can also add your own class per field in the builder:
select the field and fill the “CSS class” box in the Inspector. See `docs/HOOKS.
md` for examples.

### Can I import from another options plugin?

Yes. The Import screen reads option sets from YayExtra, ThemeHigh “Extra Product
Options” (free), WooCommerce Product Add-Ons, Acowebs “Custom Product Addons for
WooCommerce”, and YITH WooCommerce Product Add-Ons (free), and re-creates them in
Flexa Extra, switched off. They appear in the Option Sets list for review; the storefront
ignores them until you turn each one on. Field types, per-option prices, swatches
and product assignment are mapped where an equivalent exists; anything that cannot
be mapped 1:1 is listed per set so you can re-create it. Keep the source plugin 
active during the import so its data is readable.

### Can I use it with a headless or decoupled front end?

Yes. Two open, read-only REST routes (`/wp-json/flexa-extra/v1/public/config` and`/
public/product/{id}`) return the option sets, prices, and logic a front end needs
to render the configurator and compute the live subtotal. They expose only what 
the on-page configurator already ships, and you can close the API with the `flexa_extra/
public_api/enabled` filter. Add-to-cart and the final price are always recomputed
server-side.

### How do the variation swatches work, and what are the limits?

On a variable product, Flexa Extra can replace each attribute dropdown with colour,
image or button swatches. It hides the native `<select>` but keeps it as the source
of truth, so clicking a swatch uses WooCommerce’s own variation logic for price,
stock and the product gallery. Assign colours/images per attribute term under **
Flexa Extra  Variation Swatches**. It works only with global attributes (`pa_*`)
that have terms; custom product-level attributes have no term to attach to. If a
dedicated swatches plugin (for example Woo Variation Swatches) is active, Flexa 
Extra defers to it automatically to avoid rendering swatches twice.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“Flexa Extra – Product Options, Variation Swatches & Pricing for WooCommerce” is
open source software. The following people have contributed to this plugin.

Contributors

 *   [ FlexaTech ](https://profiles.wordpress.org/flexatech/)

[Translate “Flexa Extra – Product Options, Variation Swatches & Pricing for WooCommerce” into your language.](https://translate.wordpress.org/projects/wp-plugins/flexa-extra)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/flexa-extra/), check
out the [SVN repository](https://plugins.svn.wordpress.org/flexa-extra/), or subscribe
to the [development log](https://plugins.trac.wordpress.org/log/flexa-extra/) by
[RSS](https://plugins.trac.wordpress.org/log/flexa-extra/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 1.10.5

 * Fix: the deactivation feedback survey no longer opens more than one “Before you
   go” dialog. With several Flexa plugins active at once, each bundled its own copy
   of the survey script and every copy added a handler to the Deactivate link, so
   the dialog stacked and needed one click to dismiss each copy. Each Deactivate
   link now opens a single dialog.

#### 1.10.4

 * Product Badges screen has a single sticky action bar at the bottom instead of
   duplicating Add badge and Save badges at the top and bottom. The bar stays in
   view while you scroll, and holds Add badge, Save badges and the Expand all / 
   Collapse all switch.

#### 1.10.3

 * Variation swatches are easier to set up. After you create a global attribute 
   or its terms on WooCommerce’s own screens, a banner there now links straight 
   back to the Flexa swatches manager, so you no longer have to hunt for the menu.
   Each attribute card also links to its exact term editor, and a short summary 
   shows how many terms still need a color or image.
 * Each attribute now collapses to a one-line header on the swatches screen, so 
   a store with many attributes stays compact. Click a card to slide it open, or
   use Expand all / Collapse all.

#### 1.10.2

 * Product badges now appear on block-based shop grids and single product pages.
   A render_block filter mirrors the classic loop and gallery hooks for the woocommerce/
   product-image and woocommerce/product-image-gallery blocks, so badges show on
   the WooCommerce Product Collection block and block themes, not just classic PHP
   templates.

#### 1.10.1

 * Product Badges screen is easier to manage with many badges: each badge card now
   collapses to a one-line summary (label, position, on/off) and slides open when
   you click it. Existing badges start collapsed; a badge you just added opens ready
   to edit.
 * Add badge and Save badges are now available in a toolbar at the top of the list,
   not only at the bottom, so you no longer have to scroll to save. Add badge at
   the top inserts the new badge at the top; the bottom button still appends.
 * Added an Expand all / Collapse all switch for the whole list.

#### 1.10.0

 * New option field types: a range slider (with min/max/step and a live value), 
   a time picker, and a combined date & time picker. All three carry an optional
   field price and can drive formula prices.
 * Text fields gain a Phone format that shows the phone keypad on mobile and marks
   the input as a telephone number.
 * Time, date & time, and range fields support minimum and maximum bounds, checked
   again on the server at add-to-cart so a hand-crafted request cannot slip past
   the limits.

#### 1.9.0

 * Product badges can now be scheduled: give a badge an optional start and end time
   and it only shows within that window. Leave a bound empty to leave that end open.
 * Product badges can be limited to specific customers: match by user role (is /
   is not one of the roles you pick) and by login state (logged-in customers or 
   guests), combined with any/all. A badge with no conditions shows to everyone,
   as before.
 * Badge style presets: pick a shape (rounded, pill, square) and a size (small, 
   medium, large) per badge. Existing badges keep their current look.
 * New corner ribbon badge shape: a diagonal band across the badge’s corner instead
   of a chip, available in any of the four corners.
 * The Product Badges screen now has its own header, and every add-on screen shows
   a loading placeholder while it opens instead of a blank page.
 * Fixed: on the single product page badges now sit on the product image in every
   corner. A right or bottom badge (such as the corner ribbon) previously drifted
   to the edge of the summary column.
 * Fixed: a pricing rule can no longer be saved with its end date before its start
   date, a window that would never apply.
 * Fixed: the product and term search dropdowns in the rule and badge editors are
   no longer clipped by the card edge.

#### 1.8.0

 * Badge targeting now searches for products, categories and tags with an async 
   picker (selected entries show as removable chips) instead of typed comma-separated
   IDs. The same picker is used on the Option Sets assignment screen, and the lookup
   route is paginated with a “Load more” row. Existing badges keep working with 
   no migration. Brands and attributes still use the manual ID field.
 * Four more badge targets that read live product state: new (published in the last
   30 days, adjustable with the flexa_extra/badges/new_days filter), featured, low
   stock and out of stock, on top of the existing “on sale” target. Each can be 
   inverted.
 * Fixed: “Add badge” failed with a JavaScript error on sites served over plain 
   HTTP (a non-secure context), because new badge IDs relied on crypto.randomUUID(),
   which the browser only exposes over HTTPS or localhost. New IDs now use a context-
   independent generator, so the button works everywhere.

#### 1.7.0

 * New Product Badges add-on: a feature under the Flexa menu (and a card on the 
   Flexa home screen) that shows targeted badges on product thumbnails in the shop
   loop and on the single product page. Give each badge a label, background and 
   text colour, a corner and a priority. Target them the same way pricing rules 
   do (all products, a manual list, or by product, category, tag, brand, attribute
   or price range) plus an “on sale” target. Badges stack per corner in priority
   order.
 * The Product Badges add-on has an on/off switch in its Settings. Turn it off and
   no storefront hooks, overlay markup or CSS are added. The badge sits on the product
   image, separate from the pricing sale flash, so both can show at once.

#### 1.6.0

 * New Pricing add-on: a third feature under the Flexa menu (and a card on the Flexa
   home screen) that adds dynamic pricing and discount rules to WooCommerce, bulk
   and tiered pricing, BOGO / buy X get Y, bundles, cart discounts and checkout 
   fees, with conditions (cart totals, quantity, user role, country and more), sale
   badges, strike-through prices, a quantity discount table, a spend-more nudge 
   and a countdown timer. Prices are recomputed on the server so a client-submitted
   amount is never trusted.
 * The Pricing add-on has an on/off switch in its Settings. Turn it off to leave
   every WooCommerce price hook untouched so another pricing plugin can take over
   cleanly.
 * Requires PHP 8.1 or newer (the pricing engine uses PHP 8.1 language features).

#### 1.5.0

 * Deactivation feedback: when you deactivate Flexa Extra, a short optional survey
   on the Plugins screen asks why, so we can prioritise fixes and the features people
   miss. It never blocks or delays deactivation, sends only anonymous data (a random
   per-site id, plus WordPress/PHP version and locale unless you turn that off),
   and can be switched off entirely with a filter. See the “External services” section
   for exactly what is sent and how to disable it.

#### 1.4.3

 * Swatch analytics: a new Analytics tab under Variation Swatches shows which attribute
   values shoppers actually buy, with the times bought and revenue for each, and
   the swatch colour or image next to it. It reads your existing orders, so no extra
   tracking is added and past orders count too.
 * Added two screenshots covering the Variation Swatches admin screen and swatches
   on the product page.

#### 1.4.2

 * Variation Swatches settings now use the same left-hand tab layout as the Product
   Options settings screen: General, Display, Appearance, Availability and Shop 
   pages, instead of one long scrolling column. No settings or behaviour changed.

#### 1.4.1

 * Packaging: the distributed plugin now contains only the compiled admin bundle.
   The TypeScript build source is published in the public GitHub repository instead
   of being bundled in the download, so the zip is smaller. No functional changes.

#### 1.4.0

 * Variation swatches: turn WooCommerce variation attribute dropdowns into colour,
   image or button swatches on variable products, with a new **Variation Swatches**
   admin screen to assign a colour or image to each attribute term. The native `
   <select>` stays as the source of truth, so price, stock and gallery image update
   through WooCommerce’s own logic; unavailable combinations are dimmed and keyboard
   selection works. Works with global attributes (`pa_*`) that have terms; if a 
   dedicated swatches plugin like Woo Variation Swatches is active, Flexa Extra 
   defers to it automatically.
 * Swatch display options: show the selected value as an “Attribute: Value” line,
   render attributes with no swatch type as buttons, and show a loading spinner 
   while the variation updates.
 * Swatch appearance: custom width, height and button font size, plus selected-ring
   and unavailable-strike colours and a choice of registered image size for image
   swatches, on top of the existing size, shape and tooltip options.
 * Swatch availability: choose how unavailable or out-of-stock swatches behave (
   dim and strike, hide, or show as normal), and optionally clear the choice by 
   clicking the selected swatch again.
 * Limit visible swatches: cap how many swatches show per attribute and fold the
   rest behind a “+N more” toggle (the selected swatch always stays visible).
 * Stock per swatch: show “N left” on low-stock swatches and “Out of stock” when
   every matching variation is sold out, read from WooCommerce’s own variation data.
 * Shop and category swatches: optionally render swatches under products in the 
   loop, each linking to the product with that option preselected.
 * Flexa hub: the Flexa menu landing page lists only the modules that ship in this
   plugin for now (Product Options and Variation Swatches). The wider flexatech 
   ecosystem is kept hidden (behind a filter) until more modules are ready; when
   shown, not-installed modules are dimmed so the active ones stand out.

#### 1.3.0

 * Import from more plugins: the Import screen now also reads option sets from **
   WooCommerce Product Add-Ons**, **Acowebs “Custom Product Addons for WooCommerce”**,
   and **YITH WooCommerce Product Add-Ons** (free), alongside the existing YayExtra
   and ThemeHigh sources. Field types, per-option prices (fixed, percentage, and
   increase/decrease), swatches and product/category assignment are mapped where
   an equivalent exists; anything that cannot be mapped 1:1 is listed per set. As
   before, imported sets are added switched off for you to review before turning
   them on.

#### 1.2.1

 * Import screen: only lists plugins that actually have option sets to import (present
   on the site, with at least one set), instead of always showing every supported
   plugin with an empty row.

#### 1.2.0

 * Formula prices: a price can be a safe arithmetic formula (on field prices, per-
   option prices and fee/discount rules) using `base`, `qty` and other fields’ values,
   the operators `+ - * / ( )`, and `round()`, `min()`, `max()`. The result is the
   per-unit surcharge, so `qty` is for volume tiers like `max(2, 10 - qty)` rather
   than a plain per-unit charge. Evaluated with a hand-written parser (never `eval`);
   a bad formula is worth 0 and never errors. The builder validates as you type.
 * Custom controls: checkboxes and radios now use clean custom-styled controls (
   with a subtle checked animation) instead of the raw browser widget, so they look
   consistent across browsers and themes. The colour field shows a swatch with its
   hex value and opens the colour picker on click. Selected values, validation, 
   keyboard focus and form behaviour are unchanged, and the styling is scoped so
   it will not clash with your theme.
 * Date picker: the date field now opens a lightweight, localized calendar (month
   names, weekday order and first day of week follow your site language) instead
   of the raw browser control. Works with keyboard and touch, and the calendar styling
   is scoped so it will not clash with your theme.
 * Date field options: set an earliest and latest selectable date and a list of 
   blocked dates. These are validated again on the server at add-to-cart. The stored
   value format (YYYY-MM-DD) is unchanged.
 * Date display format: chosen dates now show in your site’s date format (Settings,
   General) on the product page and in the cart/order, with an optional per-field
   override. Previously the cart showed the raw YYYY-MM-DD value.
 * Per-field styling hooks: every field wrapper now carries `flexa-extra-field--
   <type>` and `flexa-extra-field--id-<field_id>` classes so you can target a field
   type or one specific field from CSS.
 * New “CSS class” box in the field Inspector to add your own class(es) to a field
   wrapper.

#### 1.1.1

 * Fixed: YayExtra import brought nothing over. Field types (and per-option names)
   are stored by YayExtra as `{ value, label }` pairs, not the flat `fieldType` 
   key the converter expected, so every field was skipped and each set dropped as
   empty. The real saved shape is now read, with the older flat form still accepted.
 * Fixed: conditional product assignment is now migrated from YayExtra instead of
   falling back to “all products”. Category and tag names are resolved to term IDs
   and each “is one of” list becomes one targeting rule per term; anything that 
   cannot be mapped is reported per set.
 * Fixed: plain button fields no longer import as colour swatches. Colour and image
   are now carried only for swatch field types, per option according to its swatch
   type.

#### 1.1.0

 * Import option sets from YayExtra and ThemeHigh “Extra Product Options” (free):
   auto-detected, added switched off through the schema sanitizer, with a per-set
   report of anything that could not be mapped 1:1.
 * Headless read API: two open, read-only REST routes (`/public/config` and `/public/
   product/{id}`) so a decoupled front end can render the configurator and compute
   the subtotal. Closable with the `flexa_extra/public_api/enabled` filter.
 * Sales analytics screen: rank options/choices by picks and add-on revenue, filterable
   by date range and order status (HPOS-safe).
 * Gutenberg “Flexa Extra Configurator” block: show an option set with live pricing
   on any page or post (display only).
 * Live preview in the builder: render and price an option set as the storefront
   will, updating as you edit.
 * Conditional fees and discounts: set-level rules that add a fixed or percentage
   fee or discount when selections match (a discount never drops the line below 
   zero).
 * Per-option stock: give a choice a limited quantity; sold-out options are disabled,
   over-selling is blocked, and paid orders draw stock down (restored on cancel 
   or refund).
 * Min and max choices per multi-select field, enforced again on the server at add-
   to-cart.
 * Edit options in cart: reopen the product page with the saved selections and replace
   the line instead of stacking a duplicate.
 * Template library: start a new option set from a ready-made starter.
 * Itemized price breakdown on the product page, listing each option and fee or 
   discount with its own price.
 * First-run quick-start guide, replayable from Advanced settings.
 * Date picker and colour picker field types.
 * Duplicate an option set, and import or export sets as JSON.
 * Fixed: admin dropdown arrows no longer crowd the text.

#### 1.0.1

 * Security: escape swatch image URLs for the CSS `url()` context on the product
   page and in the cart, preventing CSS injection through crafted URLs.
 * Removed the “Tested up to” line from the main plugin file so compatibility is
   declared only in readme.txt.

#### 1.0.0

 * Initial release: option-set builder with text, number, date picker, colour picker,
   choice, swatch and button fields; storefront render engine; server-authoritative
   pricing/cart engine; UX & style settings; and a two-tier automated test suite.

## Meta

 *  Version **1.10.5**
 *  Last updated **11 hours ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.5 or higher **
 *  Tested up to **7.1.1**
 *  PHP version ** 8.1 or higher **
 *  Language
 * [English (US)](https://wordpress.org/plugins/flexa-extra/)
 * Tags
 * [dynamic pricing](https://ory.wordpress.org/plugins/tags/dynamic-pricing/)[product badges](https://ory.wordpress.org/plugins/tags/product-badges/)
   [Product options](https://ory.wordpress.org/plugins/tags/product-options/)[variation swatches](https://ory.wordpress.org/plugins/tags/variation-swatches/)
   [woocommerce](https://ory.wordpress.org/plugins/tags/woocommerce/)
 *  [Advanced View](https://ory.wordpress.org/plugins/flexa-extra/advanced/)

## Ratings

No reviews have been submitted yet.

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

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

## Contributors

 *   [ FlexaTech ](https://profiles.wordpress.org/flexatech/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/flexa-extra/)