=== U2Code Product Addons for WooCommerce ===
Contributors: bycrik, freemius
Tags: product addons, product options, extra product options, custom fields, woocommerce
Requires at least: 6.5
Tested up to: 7.0
Requires PHP: 7.4
Stable tag: 1.0.0
License: GPLv3
License URI: https://www.gnu.org/licenses/gpl-3.0.html

Add extra product options with prices — swatches, text fields, checkboxes, uploads and more, with live price totals.

== Description ==

U2Code Product Addons lets customers personalize the products they buy — engraving text, gift wrap, image swatches, uploaded artwork, donations — and charges for it right on the product page, with a live totals box that updates as they pick.

Build addon groups once and attach them to your whole catalog, to specific products, categories, tags or brands, or add fields to a single product from its own edit screen. No code, no shortcodes.

**[Try the live demo](https://demo.product-addons.com/)** — the builder and the storefront, ready to click through.

= Field types =

* **Multiple Choice** — dropdown, radio buttons, checkboxes, buttons, pills, cards, or image and color swatches (square or circle)
* **Single Checkbox** — gift wrap, express handling, an agreement to accept
* **Short Text** — plain text, number, email, phone or URL, with optional character limits
* **Long Text** — multi-line input for gift messages and instructions
* **Quantity** — a numeric amount priced per unit
* **Date Picker** — delivery and pickup dates, with selectable range limits
* **File Upload** — artwork, photos and documents, with file type and size limits
* **Customer Defined Price** — donations, tips, "pay what you want"
* **Heading** — display-only text to structure long forms

= Pricing =

Charge a flat fee, a percentage of the product price, per quantity, or per character of what the customer types. Every price shows in a live totals box before add to cart and carries through the cart, checkout, order emails and the admin order screen.

= Targeting =

* Assign addon groups to all products, or target specific products, categories, tags and brands — with exclusions
* Show fields only for selected variations of a variable product
* Reusable option sets, or import options straight from a product attribute

= Design =

Four storefront themes — Boxed, Compact, Bold and Soft — previewed live in the settings, or switch styling off entirely and use your theme's own look. All markup uses plain, prefixed CSS classes that are easy to override.

= Fits into your store =

* Classic and block-based (Store API) cart and checkout
* Customers can reopen and edit their choices from the cart; you can edit them on the order from the admin
* Uploaded files live in a protected folder, and files never attached to an order are cleaned up automatically
* Multi-currency: WOOCS, CURCY, Aelia, WCML, WooPayments and Currency Switcher for WooCommerce
* WPML and Polylang, including targeting translated products
* Works alongside Tiered Pricing Table — addons stack correctly on tier prices
* HPOS compatible

= Pro version =

The paid version adds features for stores that need more:

* **Date Range** field — a start and end date priced per day, for rentals and hire periods
* **Dimensions** field — width × height priced by area, for made-to-measure blinds, glass, fabric and signage
* **Users & Roles** — show addon groups only to certain roles or specific customers, or hide them from some
* **Multiple file uploads** on a single File Upload field
* **Selection limits** — require a minimum and maximum number of choices on multi-select fields
* **Conditional logic** — show or hide any field based on what the customer picked in another, with unlimited rules

Upgrade from the Product Addons screen inside the plugin.

== Installation ==

1. Upload the plugin files to `/wp-content/plugins/u2code-product-addons-for-woocommerce`, or install through the WordPress plugins screen.
2. Activate the plugin. WooCommerce must be installed and active.
3. Go to **Products → Addons** to create your first addon group, or open the **Product Addons** tab on any product to add product-specific fields.

== Frequently Asked Questions ==

= Do addons work with variable products? =

Yes. Fields render above the variations table, and individual fields can be limited to selected variations so they appear only after a matching variation is chosen.

= Do addons work with the block-based cart and checkout? =

Yes. Selections show on cart lines in both the classic and block-based cart. Products with file-upload fields still need the classic product page form, since files cannot travel in a Store API request.

= Can customers edit their choices from the cart? =

Yes — an "Edit options" link on the cart line reopens the product page with everything prefilled, including the quantity.

= Where do uploaded customer files go? =

Into a protected subdirectory of your uploads folder. Files not attached to any order are deleted automatically after a configurable number of days (**WooCommerce → Settings → Products → Product Addons**).

= Will it slow my store down? =

The storefront loads one small script and stylesheet, only on pages that actually show addons. The admin builder is a separate app that never loads on the storefront.

= Does deleting the plugin remove my data? =

Only if you ask it to. Addon groups, settings and uploads are removed on uninstall only when you opt in to cleanup; otherwise everything is kept for reinstalling later.

== Screenshots ==

1. The addon group builder — fields, options and pricing in one screen
2. Addons on the product page — color swatches, buttons, pills and cards, with the live totals box
3. The addon groups list — targeting, status and bulk actions at a glance
4. Conditional logic (Premium): show or hide fields based on other answers
5. Targeting by products, categories, tags and brands — plus user roles, with exclusions
6. The six storefront styles previewed live in settings

== Source code & build ==

The admin app in `assets/admin/` is compiled with webpack. Its human-readable
source ships in this plugin under `js-source/`. To rebuild it:

1. `cd js-source`
2. `npm install`
3. `npm run build`

The output is written to `assets/admin/`. Everything else in `assets/` is
hand-written and used as-is.

== Changelog ==

= 1.0.0 - 2026-08-18 =
* Initial release.

== Upgrade Notice ==

= 1.0.0 =
Initial release.
