Title: Rollora – Made-to-Measure Roller Blinds
Author: brainiacbusiness
Published: <strong>2026-11-06</strong>
Last modified: 2026-11-06

---

Search plugins

![](https://s.w.org/plugins/geopattern-icon/rollora.svg)

# Rollora – Made-to-Measure Roller Blinds

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

[Download](https://downloads.wordpress.org/plugin/rollora.1.0.1.zip)

 * [Details](https://tt.wordpress.org/plugins/rollora/#description)
 * [Reviews](https://tt.wordpress.org/plugins/rollora/#reviews)
 *  [Installation](https://tt.wordpress.org/plugins/rollora/#installation)
 * [Development](https://tt.wordpress.org/plugins/rollora/#developers)

 [Support](https://wordpress.org/support/plugin/rollora/)

## Description

Rollora – Made-to-Measure Roller Blinds adds a roller-blinds-only configurator to
a WooCommerce store. Customers enter width and drop in millimetres, choose recess,
exact, or outside-mount fit, and select fabric, corner fit, control side, bracket,
and options. Prices are calculated server-side from the active supplier configuration;
a browser-submitted price is never used. Money is handled in integer minor units
and measurements are stored in millimetres internally.

When an order is placed, the per-blind measurements, per-blind price, fabric, options,
rule version, and data label are frozen in an immutable order snapshot. Quantity
and line total are finalised at order creation from the order item, and the workshop
production sheet is generated from that saved snapshot, never from recalculated 
current prices. Per-order fees stay order-level and are shown on the sheet as their
own row, not folded into the line total.

Supplier pricing is managed through price books: upload a flattened band-row CSV,
preview staged rows with row-level errors and a diff against the active book, then
approve. Promotion requires zero errors, zero unmapped rows, and an explicit approval
click, and the approver is recorded. Exactly one price book is active at a time 
in the free edition, and activating a book supersedes the previous one. History 
and rollback are built in.

IMPORTANT: the plugin ships with synthetic supplier defaults, clearly labelled SYNTHETIC.
They are placeholder values, not real supplier rules. Replace them with your own
supplier configuration before taking real orders, and do not use the synthetic defaults
for real orders. Workshop sheets carry the data label of the configuration they 
came from; sheets from synthetic data say so, and sheets from other data say to 
use them only if approved for production. The workshop sheet is not production-approved,
and 36 additional manufacturing fields remain unconfirmed.

Compatibility is claimed only for versions actually tested: WordPress 7.1.4, WooCommerce
11.2.1, and PHP 8.3.6. WordPress 6.4, WooCommerce 9.x, and PHP 8.2 are NOT claimed
and are NOT supported by this release.

### Configuration

**Supplier Settings (Rollora > Supplier Settings):** deductions, mechanism allowance,
size limits, roll widths by fabric, recess depth minimum, tolerance, fabrics, and
options. Saving stamps `config_version` (incremented), `updated_by`, and `updated_at`.“
Restore synthetic defaults” reloads the bundled defaults. The price matrix and bands
are edited through the CSV importer, not here, and are preserved on save.

**Price Books (Rollora > Price Books):** a 3-step controlled import. Step 1 uploads
a CSV of flattened band rows only. Step 2 previews staged rows, row-level errors,
and the diff against the active book. Step 3 approves: promotion requires zero errors,
zero unmapped rows, and an explicit approval click. An active book’s mapped rows
replace the covered matrix cells. Price books apply to matrix pricing only; per-
m2 mode is unaffected by price books. **History and rollback:** the same page lists
every price book (newest first) with its status, source, row count, and activation
record; any superseded book has a “Roll back to this book” button (nonce-checked,
with confirmation) that reactivates it and supersedes the current active book.

**Import preview (Rollora > Import Preview):** a preview-only page that shows staging,
diff, and row-level errors. It does not promote anything.

**Data label:** the configuration carries a data label. The bundled defaults are
labelled SYNTHETIC. When you enter your real supplier rules, set the label accordingly;
snapshots and workshop sheets then carry that label.

### Features

 * Roller-blinds-only configurator: width, drop, recess/exact/outside fit, fabric,
   corner fit, control side, bracket, options
 * Server-side pricing only: matrix, bands, per-m2, fabric groups, surcharges
 * Tax-exclusive engine prices; WooCommerce calculates applicable taxes
 * Admin supplier settings with version stamps and restore-defaults
 * Price books: CSV preview, diff vs the active book, approval-gated promotion, 
   single active book in free, history and rollback
 * Immutable order snapshots: per-blind measurements, price, fabric, options, rule
   version, and data label frozen at add-to-cart; quantity and line total finalised
   at order creation
 * Workshop production sheet from the saved order snapshot, with guest access restricted
 * Currency table with a zero-decimal guard, so zero-decimal currencies are not 
   divided by 100
 * HPOS-compatible order storage using WooCommerce CRUD only; no tables created
 * No licence-key checks, network calls, or subscription logic in the free edition
 * Security: nonces and `manage_options` / `manage_woocommerce` capability checks
   on admin and workshop pages, uploaded files checked with `is_uploaded_file`, 
   all admin output escaped, no direct order-table queries, no AJAX or REST endpoints
   in plugin code, and the configurator product ID bound by a server-salt token 
   so a visitor cannot reprice an arbitrary store product as a blind

### Requirements

 * WordPress 7.1 or higher (tested up to 7.1.4)
 * WooCommerce 11.2 or higher (tested up to 11.2.1)
 * PHP 8.3 or higher (tested on 8.3.6)
 * A WooCommerce product for each roller blind sold through the configurator

WordPress 6.4, WooCommerce 9.x, and PHP 8.2 are NOT claimed and are NOT supported
by this release.

### Support

For help with this plugin, use the plugin’s support forum on WordPress.org. When
reporting an issue, include your WordPress, WooCommerce, and PHP versions, the steps
to reproduce the problem, and whether you are using the bundled synthetic defaults
or your own supplier configuration. Do not post private order details, customer 
data, or credentials in the forum.

Please note: this plugin ships with synthetic supplier defaults labelled SYNTHETIC.
Before taking real orders, replace them with your real supplier rules and confirm
your workshop sheets against those rules, as the sheets are not production-approved.

## Screenshots

[⌊Customer configurator: width, drop, fit, fabric, and options on a product page.⌉⌊
Customer configurator: width, drop, fit, fabric, and options on a product page.⌉[

Customer configurator: width, drop, fit, fabric, and options on a product page.

[⌊Cart and checkout showing the server-calculated blind price and a per-order fee
shown separately.⌉⌊Cart and checkout showing the server-calculated blind price and
a per-order fee shown separately.⌉[

Cart and checkout showing the server-calculated blind price and a per-order fee 
shown separately.

[⌊Supplier Settings admin screen with deductions, size limits, and roll widths.⌉⌊
Supplier Settings admin screen with deductions, size limits, and roll widths.⌉[

Supplier Settings admin screen with deductions, size limits, and roll widths.

## Installation

 1. Install the plugin ZIP via WordPress Admin > Plugins > Add New > Upload Plugin,
    then activate it. Activation seeds the supplier configuration from the synthetic
    defaults and records plugin version 1.0.1. It never overwrites an existing admin
    configuration.
 2. Create a simple WooCommerce product for a roller blind and note its ID.
 3. Add `[blinds_roller_configurator product_id="123"]` to a page, replacing 123 with
    your product ID.
 4. Add `[blinds_workshop_sheet order_id="123"]` to an admin page for workshop sheets,
    replacing 123 with an order ID. Guests see only “Workshop sheet unavailable.”
 5. Replace the synthetic supplier defaults with your real supplier rules before taking
    real orders (see Configuration).

## FAQ

### What are the synthetic defaults, and must I replace them?

Yes. The plugin ships with synthetic supplier defaults, clearly labelled SYNTHETIC,
so it works out of the box for evaluation. They are placeholder values, not real
supplier rules. Replace them with your own supplier configuration in Rollora > Supplier
Settings and Rollora > Price Books before taking real orders. Do not use the synthetic
defaults for real orders.

### How do price books work?

Upload a flattened band-row CSV in Rollora > Price Books, preview staged rows, row-
level errors, and the diff against the active book, then approve. Promotion requires
zero errors, zero unmapped rows, and an explicit approval click, and the approver
is recorded. Exactly one book is active at a time in the free edition; activating
a book supersedes the previous one. To roll back, use the “Roll back to this book”
button next to any superseded book in the Price-book history table on the same page;
the rolled-back book becomes active and the current active book becomes superseded.
Price books apply to matrix pricing only.

### What CSV format does the importer accept?

Flattened band rows only. XLSX files, 2D matrix grids, per-m2 imports, and universal
imports are not supported; convert XLSX to CSV first. Decimal prices are rejected
because prices use integer minor units. Open-ended top bands cannot be imported 
as-is, and importer overlap grouping ignores `option_code`.

### Does the plugin work with HPOS?

Yes. HPOS on and off were both tested in staging (WordPress 7.1.4, WooCommerce 11.2.1).
Order data is stored through WooCommerce CRUD only, and the plugin creates no tables.

### How are taxes handled, including CAD and GBP?

Engine prices are tax-exclusive and WooCommerce calculates applicable taxes. In 
staging, a £38.50 blind checked out at CAD 43.13 in British Columbia (GST 5% plus
PST 7%) and CAD 43.51 in Ontario (HST 13%), and GBP pricing was restored and re-
verified at £38.50 afterwards. Currency display uses a per-currency table, so zero-
decimal currencies are not divided by 100.

### What is included free, and what is premium?

Free: single supplier configuration, configurator, matrix/bands/per-m2 pricing, 
server-side pricing, snapshot, workshop sheet, CSV preview with controlled promotion,
and price-book history/rollback. Premium-only features are declared but not implemented
in this edition: multiple supplier configurations, per-product supplier selection,
and multi-site licence sharing. The free edition contains no licence-key checks,
network calls, or subscription logic.

### Who can see a workshop sheet?

Only users with the `manage_woocommerce` capability. Guests and customers see only“
Workshop sheet unavailable.” The sheet reads the saved order snapshot, never recalculated
current prices, so it matches the order line. If a price book is activated or the
configuration edited between add-to-cart and checkout, the snapshot is refreshed
from the recalculated result before the order is created.

### What happens when I deactivate or uninstall the plugin?

Deactivation deletes nothing. Uninstall deletes only the plugin’s own four options(`
blinds_supplier_config`, `blinds_price_books`, `blinds_plugin_version`, `blinds_premium_active`).
Past order snapshots remain with their orders, as store records should.

### What is NOT supported?

Anything other than made-to-measure roller blinds; XLSX, 2D grids, and per-m2 imports;
decimal prices in imports; open-ended top bands as-is; WordPress 6.4, WooCommerce
9.x, and PHP 8.2; real supplier sheets, retailer feedback, or manufacturing approval(
none has been obtained); and production use of the synthetic defaults or of a workshop
sheet that has not been approved for production.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“Rollora – Made-to-Measure Roller Blinds” is open source software. The following
people have contributed to this plugin.

Contributors

 *   [ brainiacbusiness ](https://profiles.wordpress.org/brainiacbusiness/)
 *   [ banglablog ](https://profiles.wordpress.org/banglablog/)

[Translate “Rollora – Made-to-Measure Roller Blinds” into your language.](https://translate.wordpress.org/projects/wp-plugins/rollora)

### Interested in development?

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

## Changelog

#### 1.0.1 — 2026-11-06

 * Fixed: the “Active price book” line on the Price Books admin page showed the 
   previously active book on the approval response after activating a new price 
   book, while the success notice and the history table already showed the newly
   activated book. The line is now rendered after the approve/rollback handlers 
   run, so it always names the book that is active now. No pricing, measurement,
   activation, or other behaviour changed.

#### 1.0.0 — 2026-11-02

 * Roller-blinds-only configurator: width, drop, recess/exact/outside fit, fabric,
   corner fit, control side, bracket, options.
 * Server-side pricing only: matrix, bands, per-m2, fabric groups, surcharges. Engine
   prices are tax-exclusive; WooCommerce calculates applicable taxes. Money in integer
   minor units, measurements in mm.
 * Admin supplier settings with version stamps (`config_version`, `updated_by`, `
   updated_at`) and restore-synthetic-defaults.
 * Price books: CSV preview, diff vs the active book, approval-gated promotion (
   zero errors, zero unmapped rows, explicit approval click), single active book
   in free, history/rollback.
 * Immutable order snapshots: per-blind measurements, price, fabric, options, rule
   version, and data label immutable from add-to-cart; quantity and line total finalised
   at order creation.
 * Workshop production sheet from the saved order snapshot, never recalculated current
   prices; guests see only “Workshop sheet unavailable.”
 * Currency table with zero-decimal guard; free/premium entitlement boundary.
 * Activation/deactivation/uninstall handling; no tables created.
 * Per-order-fee fix: the engine total includes per-order surcharges, but the WooCommerce
   order line total does not, so finalisation subtracts the per-order fee before
   dividing (recorded as `finalisation_fee_excluded_minor`); the workshop sheet 
   shows the fee as its own row. Staging verified: motor plus remote, quantity 1
   to 2, line £247.00 plus £15.00 fee once = £262.00 total.
 * Release-candidate fixes: configurator product ID bound by a server-salt token,
   closing an unauthenticated price override; non-array options input guarded; data
   label flows from the effective configuration through the engine and checkout 
   hook; totals hook refreshes the stored snapshot from the recalculated result;
   admin preview dumps scroll on narrow screens; admin inputs are 16px; header floors
   raised to the tested versions.
 * Tests and staging (executed, WordPress 7.1.4 / WooCommerce 11.2.1 / PHP 8.3.6):
   pure-PHP regression suite 108/108 PASS on PHP 8.3.6; classic checkout £38.50;
   Blocks/Store API checkout £38.50 and £77.00 (quantity-change case); HPOS on and
   off; workshop sheets with guest restriction; admin save and restore; price-book
   activation (£40.00) and rollback (£38.50); CAD British Columbia CAD 43.13 and
   Ontario CAD 43.51; GBP restored at £38.50.
 * Known limitations: synthetic supplier defaults only; tested on WordPress 7.1.4/
   WooCommerce 11.2.1 / PHP 8.3.6 only; visual responsive check in a live browser
   not verified; CSV flattened band rows only; price books apply to matrix pricing
   only; workshop sheet is not production-approved and 36 manufacturing fields remain
   unconfirmed.

## Meta

 *  Version **1.0.1**
 *  Last updated **9 сәгать ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 7.1 or higher **
 *  Tested up to **7.1.4**
 *  PHP version ** 8.3 or higher **
 *  Language
 * [English (US)](https://wordpress.org/plugins/rollora/)
 * Tags
 * [blinds](https://tt.wordpress.org/plugins/tags/blinds/)[made to measure](https://tt.wordpress.org/plugins/tags/made-to-measure/)
   [pricing](https://tt.wordpress.org/plugins/tags/pricing/)[woocommerce](https://tt.wordpress.org/plugins/tags/woocommerce/)
   [workshop](https://tt.wordpress.org/plugins/tags/workshop/)
 *  [Advanced View](https://tt.wordpress.org/plugins/rollora/advanced/)

## Ratings

No reviews have been submitted yet.

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

[See all reviews](https://wordpress.org/support/plugin/rollora/reviews/)

## Contributors

 *   [ brainiacbusiness ](https://profiles.wordpress.org/brainiacbusiness/)
 *   [ banglablog ](https://profiles.wordpress.org/banglablog/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/rollora/)