CartTailor – WooCommerce Product Options, Custom Fields & Swatches

CartTailor — WooCommerce Product Options, Custom Fields & Swatches

Custom product options, visual swatches, and pricing rules that your customers configure right on the product page. CartTailor adds a visual builder to WooCommerce. You create option groups — sets of fields such as engraving text, size choices, gift wrap, or file uploads — and assign them to all products, selected products, or categories. Customers answer the fields on the product page and see a live price breakdown before they add the item to the cart. Every price is recalculated on the server, so the totals in the cart always come from your saved configuration, not from the browser.

What you can build

  • Personalized products: engraving text, monograms, gift messages, and custom names, with per-character pricing where a per-letter rate fits.
  • Configured products: sizes, materials, finishes, and add-ons as dropdowns, radio buttons, checkboxes, or visual swatches.
  • Choice-driven forms: fields that appear or disappear based on earlier answers, so customers only see the options that apply to them.
  • Restricted options: fields or whole groups shown only to selected WordPress roles, or only to logged-out visitors.
  • Customer uploads: logos, photos, and design briefs attached to the order through a validated, protected upload directory.

14 field types

Text Field, Textarea, Number, Date Picker, Time Picker, Range Slider, Dropdown, Multi-Select, Radio Buttons, Checkboxes, Color Swatches, Image Swatches, Text Swatches, and File Upload. Multi-select fields work by clicking options to select or deselect them — holding Ctrl is not required. Swatches carry tooltips, price badges, and selection checkmarks. Color swatch shape (round, rounded rectangle, or square) and size (24px to 64px) are global settings. Any choice on a choice-based field can be marked Unavailable: it renders with a cross overlay on swatches, greyed out with an “(Unavailable)” note on radio and checkbox choices, or as a disabled option on dropdowns — and the server rejects it at add-to-cart even if it is force-submitted.

Pricing that covers the real cases

Six pricing types, set per field or per choice:
  • No charge — a complimentary option.
  • Fixed fee — a one-time charge per line item, regardless of quantity.
  • Per unit — an amount multiplied by the purchased quantity.
  • Percentage — a percentage of the product base price only (or of the selected variation price), never of other options.
  • Per character — a rate multiplied by the number of characters typed into a text field.
  • Formula — a math expression using the base price and other numeric fields, for example {base} * 0.1. Formulas are evaluated server-side by a safe parser; eval() is never used. Invalid formulas are rejected at add-to-cart with a clear error instead of being priced at 0.
A Charge once toggle applies a per-unit, percentage, per-character, or formula fee only once per line instead of once per unit. Checkbox fields accept minimum and maximum selection counts, enforced on the server. The product page shows a live total row above Add to cart and a price breakdown card (base price, options total, final total). One documented behavior: the on-page estimate does not mirror formula rows, so the cart total is authoritative for formula-priced items.

Conditional logic, done on the server too

Each field can show or hide based on other fields’ values, with match all (AND) or match any (OR) rule sets and seven operators: is, is_not, is_empty, is_not_empty, contains, greater_than, less_than. Rules run in the browser for instant feedback and again on the server, so a hidden field is skipped for required checks and pricing. For choice fields, rule values match the option’s Value column, not its label.

Image swap on selection

When a selected choice carries an image, the product gallery main image changes to that image, and returns to the original when the selection is cleared. On variable products with a variation selected, the variation image takes priority and the swap does nothing.

Assignments and per-product options

Apply a group to all products, specific products, or categories, exclude specific products, and order groups by priority. Or build options for a single product only, directly in the product editor’s Custom Options tab, without creating a group.

Uploads, orders, and compatibility

  • File uploads: per-field extension lists or the global default (jpg, jpeg, png, gif, webp, pdf, doc, docx, zip, txt), per-field size limits, MIME checks, randomized filenames, and a protected upload directory. Dangerous extensions are never allowed.
  • Orders: option selections are stored on order line items and shown in the admin order view, the customer order view, and order emails.
  • Compatibility: declared for WooCommerce HPOS (custom_order_tables) and Cart/Checkout Blocks (cart_checkout_blocks).
  • Import/export: back up and migrate option groups as JSON between stores.
  • Requirements: WordPress 5.8+, WooCommerce 5.0+, PHP 7.4+.

What is included

The installable plugin ZIP, plus 12 documentation files: Installation, User Guide, Field Types Reference, Pricing Rules and Calculations, Conditional Logic, Variable Products, FAQ, Troubleshooting, Changelog, Screenshots, and a single browsable documentation page.

Changelog:

= 1.0.15 =

* Listing gallery re-verified: the eight screenshots described in SCREENSHOTS.md are attached to the listing's Preview Screenshots field and visible in the listing lightbox (1 of 8). The 1.0.14 review reported an empty gallery, but the saved listing shows all eight images in the documented order.

* INSTALLATION.md version stamp corrected to 1.0.15 (it still read 1.0.10); every per-document version stamp in the documentation now matches 1.0.15.

= 1.0.14 =

* Listing gallery: the eight screenshots described in SCREENSHOTS.md are now uploaded to the WPBay listing gallery (field builder, frontend options, swatches, unavailable choice, conditional logic, price breakdown, order details, role visibility and formula pricing).

* SCREENSHOTS.md updated: the seventh screenshot is now the order-details view (the thank-you page after checkout, showing the chosen options, the formula-priced line total, and the download link for the uploaded file) instead of a mobile view; the intro now states that store-page captures have no admin bar while the field-builder capture shows the admin builder.

CHANGELOG — 1.0.13

* Uninstall now reads and preserves the upload-storage configuration before deleting it, so temporary files stored above the web root are removed when Delete Data on Uninstall is enabled (1.0.10–1.0.12 deleted the option first and could not locate the directory); files attached to retained orders are still kept, and an empty private directory is removed.

* The HTTP probe no longer treats redirects as proof of protection: any 3xx response is now 'unknown' and new uploads are refused, because a redirect can lead to a URL that serves the file. Properly denied directories (403, or 404 with a passing positive control) still work.

CHANGELOG — 1.0.12

* Upload-directory protection is now verified by an HTTP probe on every server, not by trusting the .htaccess file: a unique test file is requested through its public URL, with a positive control proving the URL mapping works, and the directory is accepted only when the test file cannot be retrieved. A 404 is conclusive only because the positive control proves the file exists and the URL works; a 200 that returns the test content means the directory is public and uploads are refused.

* Stored upload-directory protection is re-verified every 24 hours and when the server changes, on Apache/LiteSpeed as well as Nginx; a directory whose protection stops working flips to refused uploads while existing files stay downloadable.

* Documentation updated to describe the probe verification accurately.

## 1.0.11

* File uploads are now linked to their order on the block (Store API) checkout too: the post-save step runs on woocommerce_store_api_checkout_order_created and woocommerce_store_api_checkout_order_processed as well as the classic woocommerce_checkout_order_created — the classic hook never fires for block checkout, so 1.0.10 left files unattached there and guests with a valid order key got a 403.

* The storage upgrade migration now moves existing files even when no prior storage record exists (1.0.9 installs): the uploads directory is used as the previous location instead of skipping the move.

* The one-time recovery now also repairs temporary entries left unattached by the 1.0.10 block-checkout gap, and the download endpoint self-heals them the same way.

## 1.0.9 — Review round 5

* Customer uploads are now protected: the upload directory denies all direct access (Apache `.htaccess`, upgraded automatically on existing installs), and files are served only through an authorization-checked download endpoint — the customer who owns the order (or its order key), store staff, or the shopper's own session for cart files. An Nginx server block snippet is documented in `INSTALLATION.md`.

* Calculated fees can no longer overflow to INF or NaN, or grow into amounts WooCommerce cannot represent: percentage, quantity and per-character fees, quantity multiplication, aggregated fees and the final cart price are all checked — every amount must be finite and no more than $1 trillion (the maximum supported amount; a finite $1e307 fee is rejected just like INF). An extreme value fails cleanly at add-to-cart with an actionable error instead of storing an unsupported price.

* A failed formula recalculation no longer silently removes the fee: the cart line is flagged and checkout is blocked with a clear error telling the shopper to remove the item and add it again. This covers saved carts, quantity changes and catalog price changes after add-to-cart.

= 1.0.8 =

* Conditional-logic builder crash fixed: opening a field with saved rules no longer throws a JavaScript error (the faulty syncRules ran before the builder initialized — the rule list is now read from the DOM after the table is ready, and the Add Condition / Add Condition Group controls work after the fix).

* Base price is no longer frozen at add-to-cart: cart recalculation re-reads the current catalog price, so a price change after add-to-cart is honoured at checkout instead of throwing a stale-price validation error, and the shipping cost shown at checkout uses the same corrected line price.

* Non-finite configured prices are rejected: an imported price, minimum or maximum of 1e999 (or any non-finite value) fails validation with the exact field name, and a formula referencing a non-finite numeric result reports a clear pricing error instead of silently changing the price.

* A negative formula result is rejected at validation instead of clamping the unit price to $0.00.

* SVG, XML, XSL, SWF, XHT and HTA can never be whitelisted for customer uploads, closing the stored-XSS gap that a custom extension list could previously open.

* Import validation hardened: only CartTailor exports are accepted, malformed group entries are skipped with a warning instead of creating empty groups, and duplicate titles are detected in both create-new and update-existing modes.

* Option values are never reused: the builder now uses a monotonic per-field counter, so a freed value is never handed out again after a delete or an import.

* Documentation, license and readme corrections: the real GPL-2.0 license text ships in license.txt, the documentation version stamp is current, the readme install step names the correct plugin folder, and the promised-but-missing screenshots section is removed.

1.0.7 — Follow-ups to the round-4 fixes: option values are never reused after a delete (fresh opt_N past the highest in use); a formula referencing non-finite numeric text such as 1e999 now reports the specific finite-value error.

1.0.5 — WPBay review fixes (round 3): strict input-shape validation (arrays rejected for scalar controls, nested arrays rejected for choice arrays, numbers must be finite); one canonical text value for validation, pricing, storage, recalculation, checkout and order meta; documented builder settings (default, lengths, bounds, step) in both builder contexts; conditional visibility that keeps unavailable choices disabled through hide/show cycles (snapshot-based restore, correcting the 1.0.3/1.0.4 guards). 1.0.4 — corrected the 1.0.3 visibility guard to an attribute check. 1.0.3 — input-shape validation, canonical text value, builder settings, conditional-unavailable fix (see reviewer message for verification details).

Version 1.0.2

Version 1.0.2 — fixes for all 6 round-2 review points: builder XSS (DOM-assigned values, no interpolation), product-tab independent builder instance, duplicate/import fresh field IDs with formula remapping, checkbox scalar-shape rejection + unique-count limits, upload writability probe + failure cleanup, display positions restricted to in-form hooks. Demo: https://tivorenza.com/carttailor/

Version 1.0.1

Version 1.0.1 — fixes for all 5 review points: (1) Option groups now use a dedicated capability type (spo_group) granted only to administrators and shop managers — Authors/Contributors can no longer create, publish, modify or duplicate groups, including via direct admin requests; group saves and duplication enforce the same per-post capability. (2) File uploads now enforce content/MIME matching — a file whose content does not match its extension (e.g. text renamed to .jpg) is rejected at add-to-cart validation and again before the file is moved, so no mismatched file is stored and a required-file purchase cannot go through incomplete. (3) Classic checkout now applies the same role-visibility guard as add-to-cart validation — a required field hidden by role no longer blocks checkout for shoppers outside that role, while eligible shoppers must still supply it. (4) Conditionally hidden checkbox fields are excluded from frontend min/max selection-limit validation and their stale error state is cleared when hidden. (5) Group-level role restrictions now survive export, import and duplication (export schema 1.0.1); files exported before 1.0.1 have no role restrictions, so importing one leaves the group visible to everyone. Also fixed: text swatch rows align on the top. All five fixes were live-verified on the demo site (https://tivorenza.com/carttailor/).

Version 1.0.0 — Initial release.

Reviews

There are no reviews yet.

Only logged in customers who have purchased this product may leave a review.

Loading...
WPBay support Support by DigiLink

DigiLink supports this product through WPBay

Questions are handled in WPBay's private ticket system, keeping your purchase details and support conversation together.

Go to My Downloads

After purchase, open this item in My Downloads and choose Get Support.

What support includes

  • Answers to product-related questions
  • Help with reported bugs and issues
  • Guidance for included third-party assets

What support does not include

  • Customizations or new features
  • Installation or setup services
Plugin

Maintenance snapshot

See recent updates, compatibility, support, and developer activity.

  • Updated today
  • Developer active recently
  • WPBay support available
  • WordPress 7.1 tested

Snapshot updated 8 hours ago

View details Hide details

Maintenance details

This is maintenance data. It does not measure product quality or sales.

  • Last update Updated today
  • Compatibility WordPress 7.1 tested · PHP 7.4 tested, several versions behind · WooCommerce 11 tested
  • Releases 12 releases in the 17 days since listing
  • Developer activity Developer active recently
  • Support No recent support tickets to measure
  • Docs and demo Documentation available · Changelog available · Demo available

Health reflects increased activity during the last 90 days.

How this snapshot works

Plugin Health

The score is out of 100 and uses data WPBay can check. Ratings, popularity, and sales are not used.

Last update 30 points

Plugins receive full recency points under 30 days, then step down at 90, 180, 365, and 545 days.

Compatibility 20 points

WordPress, PHP, and WooCommerce (when relevant) are scored separately. The latest two PHP lines count as current. Nearby previous versions keep most of the points.

  • Current version 100%
  • One version behind 75%
  • Two versions behind 50%
  • Three versions behind 25%
  • Older or not listed 0%
Releases 15 points

One release earns 10, two or three earn 13, and four or more earn 15. Each accepted product ZIP counts once; reprocessing the same upload and listing-only edits do not count.

Developer activity 15 points

Based on WPBay login and dashboard activity. Exact last-login dates are never shown.

Support 15 points

There are no recent WPBay tickets to measure.

Docs and demo 5 points

Documentation: 2. Changelog: 1. Working demo or preview: 2.

Score ranges

  • 90–100 Excellent
  • 75–89 Healthy
  • 60–74 Fair
  • 40–59 Needs attention
  • 0–39 Limited

Long gaps

WPBay also checks for long gaps between updates, developer activity, support replies, and releases. Buyers do not see this score.

  • Time since update 35 points
  • Last developer activity 25 points
  • WordPress compatibility 15 points
  • Support replies 15 points
  • Fewer releases 10 points

Pricing Plans 

$29
1 Site
$59
5 Sites
$99
Unlimited Sites

Prices are in US dollars and exclude taxes

  • Marketplace Pillar
    1
  • Verified Seller
    1
View Store
  • Last Updated 13 Nov 2026
  • Type Plugin
  • Version 1.0.15
Compare with similar plugins

© All Rights Reserved - DigiLink
Contact WPBay Market's Help Team