=== Extra Product Options for WooCommerce ===
Contributors: actpro, freemius
Tags: woocommerce product options, woocommerce product addons, woocommerce custom fields, conditional logic, quantity discounts
Requires at least: 6.1
Tested up to: 7.1.3
Requires PHP: 7.4
WC requires at least: 8.0
WC tested up to: 11.2.1
Stable tag: 4.4.9.4
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html

Add 27 custom field types (20 FREE) to WooCommerce products with nested conditional logic, per-option quantity pricing and display rules.

== Description ==

🔥 <strong>#1 WooCommerce Product Options Plugin with Nested Conditional Logic</strong>

Transform your WooCommerce product pages with <strong>Extra Product Options for WooCommerce by WPActPro</strong>. Add up to <strong>27+ custom product fields</strong> with advanced <strong>nested conditional logic (AND/OR groups)</strong> - the only free plugin offering this powerful feature. Whether you run a small boutique or a large online store, our plugin drives sales growth by enabling customers to personalize products effortlessly.

<strong>Why Choose Extra Product Options for WooCommerce?</strong>

✅ <strong>27 Field Types</strong> - 20 FREE + 7 Premium field types including Country Selector, Rating, Tooltip, and advanced switchers
✅ <strong>Nested Conditional Logic</strong> - Advanced AND/OR groups (FREE version exclusive!)
✅ <strong>Easy to Use</strong> - Drag & drop builder with modern UI
✅ <strong>Highly Customizable</strong> - Section settings, row/column layouts, styling options
✅ <strong>Performance Optimized</strong> - Custom database tables for faster queries
✅ <strong>Developer Friendly</strong> - Extensive hooks and filters

From a simple gift wrap option through to complex PC configurations, extra product options are a proven way for you, as a <strong>WooCommerce store owner, to increase your profits.</strong>

Extra Product options are <strong>much easier, more flexible, and faster to use than variable products.</strong> Instead of generating thousands of variations, enable customers to customize products with additional options such as text fields, checkboxes, radio buttons, dropdowns, and more. You can add extra product options to selected Products or selected Categories.

== What are the benefits of WooCommerce extra product options? ==

🔑 Generate more sales
🔑 Increase the profit margin
🔑 Stand out from the competition
🔑 No need for higher inventory costs
🔑 Better customer insight
🔑 Increase customer loyalty
🔑 Power the online business

== 🎬 See It In Action ==

<strong>Try Our Live Demo:</strong>

<ul>
<li><strong><a href="http://demo.wpactpro.com/extra-product-options" target="_blank">Frontend Demo</a></strong> - See how product options look to customers</li>
<li><strong><a href="http://demo.wpactpro.com/extra-product-options/wp-admin/edit.php?post_type=product&page=epofw-main&tab=about_info" target="_blank">Backend Demo</a></strong> - Experience the modern admin interface</li>
<li><strong><a href="https://www.youtube.com/watch?v=HCpaRwEeWvA" target="_blank">Video Tutorial</a></strong> - Watch step-by-step setup guide</li>
</ul>

<strong>Key Features to Explore:</strong>

✅ Nested conditional logic with AND/OR groups
✅ 27 field types in action (20 FREE + 7 Premium)
✅ Section settings and layouts (Accordion, Tabs, Wizard)
✅ Conditional display rules with AND/OR conditions
✅ Advanced custom pricing options (Fixed, Percentage, Per-Character, Per-Word, Formulas)

➡️ <a href="http://demo.wpactpro.com/extra-product-options" target="_blank">Try Demo Now</a> ⬅️

== Documentation & Tutorials ==

<ul>
<li><strong><a href="https://wpactpro.com/section-settings/" target="_blank">Section Settings Documentation</a></strong> - Complete guide to customizing section settings in version 4.4.0</li>
<li><strong><a href="https://youtu.be/KT5xUR3rAD8" target="_blank">Section Settings Video Tutorial</a></strong> - Watch how to use section settings features</li>
</ul>

== 💡 Share Your Ideas & Feature Requests ==

We value your feedback! Help us improve the plugin by sharing your ideas and requirements.

<strong>What features would you like to see?</strong>

<ul>
<li>New field types you need for your store</li>
<li>Additional functionality or integrations</li>
<li>UI/UX improvements</li>
<li>Performance enhancements</li>
<li>Any other suggestions</li>
</ul>

<strong>How to share your feedback:</strong>

<ul>
<li><strong>Email:</strong> <a href="mailto:support@wpactpro.com" target="_blank">support@wpactpro.com</a></li>
<li><strong>Contact us:</strong> <a href="https://wpactpro.com/contact" target="_blank">Share your Idea</a></li>
</ul>

Your suggestions help us prioritize features and build a better product roadmap. We review all feedback and consider it for future releases!

== 💁 Complete List of 27 Field Types ==

<strong>20 FREE Field Types:</strong>

<ul>
<li><strong>✅ Text Field</strong> - Single-line text input with optional HTML5 validation (email, URL, phone). Supports character length validation and regex patterns (FREE)</li>
<li><strong>✅ Textarea</strong> - Multi-line text area with word/character limits and regex validation</li>
<li><strong>✅ Number Field</strong> - Numeric input with min/max values and step increments. Supports decimal and whole numbers</li>
<li><strong>✅ Password Field</strong> - Masked password input for sensitive information</li>
<li><strong>✅ Select Dropdown</strong> - Single-choice dropdown selector. Per-option pricing support</li>
<li><strong>✅ Multi-Select</strong> - Multiple choice dropdown. Select/Deselect All button support (PRO). Per-option pricing</li>
<li><strong>✅ Checkbox</strong> - Single checkbox with yes/no option. Per-option pricing support</li>
<li><strong>✅ Checkbox Group</strong> - Multiple checkboxes for multi-select. Per-option pricing support</li>
<li><strong>✅ Radio Group</strong> - Radio buttons for single selection. Per-option pricing support</li>
<li><strong>✅ Date Picker</strong> - Calendar date selector with min/max dates, format options (PRO), and advance date-range pricing (PRO)</li>
<li><strong>✅ Time Picker</strong> - Time selector with customizable format. Earliest/Latest time constraints (PRO)</li>
<li><strong>✅ Color Picker</strong> - Color selection widget with HTML5 color input</li>
<li><strong>✅ Switch</strong> - Toggle on/off switch with customizable icons and colors (PRO). Smooth animations (PRO)</li>
<li><strong>✅ Slider</strong> - Range slider for numeric selection. Dual handle mode (PRO) for min/max range selection</li>
<li><strong>✅ Hidden Field</strong> - Non-visible field for passing data through the system</li>
<li><strong>✅ Heading</strong> - Display-only section heading for visual organization</li>
<li><strong>✅ Paragraph</strong> - Display-only text area for informational content</li>
<li><strong>✅ Separator</strong> - Horizontal divider line. Customizable color, style (solid/dashed/dotted/double), width, and margin</li>
<li><strong>✅ Rating Field</strong> - Star rating selector (1-10 stars). Price Per Star pricing (FREE). Perfect for reviews, feedback, and ratings</li>
<li><strong>✅ Country Selector</strong> - Auto-populated country dropdown with ~250 WooCommerce countries. Per-country pricing support. Ideal for international shipping</li>
</ul>

<strong>7 PREMIUM Field Types:</strong>

<ul>
<li><strong>💎 File Upload</strong> - Multi-file upload with type and size restrictions. AJAX upload support</li>
<li><strong>💎 Color Switcher</strong> - Color swatch buttons for visual color selection. Per-option pricing</li>
<li><strong>💎 Text Switcher</strong> - Text/button buttons for option selection. Per-option pricing</li>
<li><strong>💎 Image Switcher</strong> - Image thumbnail buttons for visual selection. Multi-image support (PRO). Per-option pricing</li>
<li><strong>💎 Product Group</strong> - WooCommerce product selector. Min/Max selection limits. Per-product pricing (fixed, product price, or percentage)</li>
<li><strong>💎 Repeater Field</strong> - Repeatable group of fields. Customers can clone/remove field groups. Min/max repeat limits. Per-instance pricing</li>
<li><strong>💎 Section Layout</strong> - Accordion, Tabs, and Step Wizard layouts for organizing addon fields. Global and per-addon override settings</li>
</ul>

== 👉 Display Position for Extra Fields ==

<ul>
<li>Before Add To Cart Button</li>
<li>After Add To Cart Button</li>
<li><strong>Pro </strong>- Before Variation Data (for variable products)</li>
</ul>

➡️ <a href="http://demo.wpactpro.com/extra-product-options/wp-admin/edit.php?post_type=product&page=epofw-main&tab=about_info" target="_blank">View Demo</a> ⬅️

== 💁 Key Capabilities of Extra Product Options ==

<ul>
<li>Add 27 types of extra custom product fields to WooCommerce Product Pages (20 FREE + 7 Premium)</li>
<li>Add extra custom fields for the selected product and selected categories</li>
<li>Manage Required or optional fields</li>
<li>Add prices to options</li>
<li>Allow multiple attributes to be selected in the same option</li>
<li>Easy to Use</li>
<li>Drag & Drop</li>
<li>Use with or without prices</li>
<li>Show/hide prices</li>
<li>Manage labels, values, placeholders, and CSS classes for each field</li>
<li>Duplicate the extra product custom field or groups of fields</li>
<li>Edit, Remove, Enable, or disable the extra product fields easily</li>
<li>Dynamic product price: Change the price depending on a field value(s)</li>
<li>Visibility options: decide on which product(s) to show your fields</li>
<li>Set prices for each option value</li>
<li>Set prices for each option value <strong>at each quantity break</strong> (Premium) - give every option its own volume discounts, e.g. screen print, embroidery and laser each priced differently per quantity</li>
<li>Make options mandatory for selection</li>
<li>Display selected values on checkout, order info pages, and in the order emails</li>
</ul>

== 💰 Pricing Options for Product Add-ons ==

Price an option however the job is actually quoted:

<ul>
<li><strong>Fixed amount</strong> – a flat sum added to the product price</li>
<li><strong>Percentage of product price</strong> – scales with the product</li>
<li><strong>Price × characters typed</strong> – for engraving and printed text, charged by length</li>
<li><strong>Price × characters typed, ignoring spaces</strong> – the same, without counting spaces</li>
<li><strong>Price × words typed</strong> – for translation, proofreading and per-word work</li>
<li><strong>Price × slider steps</strong> – for a size, length or weight slider</li>
<li><strong>Price × number entered</strong> – charge per unit the customer types, such as per guest or per metre</li>
<li><strong>Price × number entered, after a free allowance</strong> – the first n are included</li>
<li><strong>Customer enters the price</strong> – for donations, tips and custom quotes</li>
<li><strong>Custom formula (advanced)</strong> – your own calculation</li>
<li><strong>Pro</strong> – <strong>Price by quantity</strong>: give one option its own price at each quantity break, so screen print, embroidery and laser can each have their own volume discounts</li>
<li><strong>Pro</strong> – <strong>Fixed — flat for the band</strong>: one charge for a whole quantity range, the way a setup or origination fee works</li>
<li><strong>Pro</strong> – <strong>Quantity-Based (Volume / Tiered) pricing</strong>: bulk discounts across every option of a field, matched on the product quantity or the field's own</li>
<li><strong>Pro</strong> – <strong>Price Rules</strong>: adjust the selected option's price when another field has a particular value</li>
</ul>

Every price type is named for what it charges rather than how it works, and each explains itself in a line underneath, so you can see what a customer will be billed before you save.

== 👉 Supported Product Types ==

<ul>
<li>Simple Product</li>
<li>Variable products over ajax</li>
</ul>

➡️ <a href="http://demo.wpactpro.com/extra-product-options/wp-admin/edit.php?post_type=product&page=epofw-main&tab=about_info" target="_blank">View Demo</a> ⬅️

💎💎 💎 PREMIUM KEY FEATURES

💁 Types of extra options for WooCommerce Product

<ul>
<li><strong>Pro </strong> - File upload – allowing your customers to upload (multiple) files.</li>
<li><strong>Pro </strong> - True/false – A "yes/no" checkbox</li>
<li><strong>Pro </strong> - Image swatches – multi and single choice options with images.</li>
<li><strong>Pro </strong> - Color swatches – multi and single color options.</li>
<li><strong>Pro </strong> - Text swatches – text options.</li>
<li><strong>Pro </strong> - Paragraph - so you can add content and shortcodes to your product page.</li>
<li><strong>Pro </strong> - Image – to add images.</li>
<li><strong>Pro </strong> - HTML</li>
<li>Upload Field – To collect files from users which can be images, Videos, Documents, and anything that is supported by WordPress.</li>
<li><strong>Pro </strong> - Slider with custom formulas on product detail page</li>
<li><strong>Pro </strong> - Switch with Switch Layout, Animation Style, Checked Icon, Checked Background Color, Unchecked Icon, Unchecked Background Color</li>
</ul>

💎  Custom Price Fields  - <strong>Pro </strong>

Allow setting the price of your custom product fields. and this price will be added to the product total based on the field value. it is useful when you want to charge an additional fee for your additional services. Multiple wany you can set price.

<ul>
<li><strong>Fixed: </strong>Set a fixed price for the extra field. This fixed amount will be added to the total product price upon selecting the addon.</li>
<li><strong>Pro - Percentage: </strong>Set a percentage price for extra field. This percentage amount will be added to the total product price upon selecting the addon.</li>
<li><strong>Pro - Custom: </strong>User will enter the price and It will be added to the product price. like getting donations, tips, and similar things.</li>
<li><strong>Pro - Percentage of Product Price: </strong>Set the addon price in percentage. It will calculate the product price and added to the product price.</li>
<li><strong>Pro - Dynamic: </strong>Set the price per ‘n’ number of units/ quantity. Addon price will be calculated for the total number of units/ quantity selected by the customer and added to the product price.</li>
</ul>

💎 Conditionally Display Fields According To Relevance

with this option, you can set extra fields " Display Rules " based on a number of conditions. You will be able to control the field display easily by adding different conditions based on the following.

<ul>
<li>All Products (with Select All/Clear All)</li>
<li>Products</li>
<li>Categories</li>
<li>Tags</li>
<li><strong>Pro</strong> - User roles</li>
<li><strong>Pro</strong> - Other Fields values</li>
<li><strong>Pro</strong> - Date picker and time picker</li>
<li><strong>Pro</strong> - Product variations</li>
<li><strong>Pro</strong> - Product quantity</li>
</ul>

➡️ <a href="http://demo.wpactpro.com/extra-product-options/wp-admin/edit.php?post_type=product&page=epofw-main&tab=about_info" target="_blank">View Demo</a> ⬅️

💁 Example Uses of WooCommerce Extra Product Options Plugin

Here are just a few of the ways this flexible plugin can be used:

<ul>
<li>Sell events and tickets using this plugin to add options like seat, date, booking fees, etc</li>
<li>Add extra delivery/shipping options and costs to orders</li>
<li>Brand options</li>
<li>Checkout fields</li>
<li>Dropshipping options</li>
<li>Delivery times and dates</li>
<li>Dynamic pricing</li>
<li>Custom product designing</li>
<li>Hotel booking</li>
<li>Bulk editing of product options</li>
<li>Add gift wrap options to products (with costs) as shown in the demo</li>
<li>Add image choices to printable products (with or without prices)</li>
<li>Add text to cards (with the possibility of charging per character )</li>
<li>Add discounts to products (option prices can be negative)</li>
<li>Chargeless for bulk/wholesale orders (bundle rates)</li>
<li>Add extra charges/fees to orders</li>
<li>Add extra charges/fees to products</li>
</ul>

➡️ <a href="http://demo.wpactpro.com/extra-product-options/wp-admin/edit.php?post_type=product&page=epofw-main&tab=about_info" target="_blank">View Demo</a> ⬅️

👉 CUSTOM HOOKS

The plugin is most developer-friendly so that you can easily add more functionalities if needed with our hooks.

💁 Contact Us

Free plugin: Need Technical Help? - <a href ="mailto:support@wpactpro.com" target="_blank">Click here</a>

➡️ <a href="https://wpactpro.com" target="_blank">Premium Version</a> ⬅️

== Installation ==

= Minimum Requirements =
* WooCommerce 8.0 or greater
* WordPress 6.1 or greater
* PHP 7.4 or greater

= Automatic installation =
1. Log in to your WordPress dashboard.
2. Navigate to the Plugins menu, and click "Add New".
3. Search and locate 'Extra Product Options for WooCommerce' plugin.
4. Click 'Install Now', and WordPress will take it from there.

= Manual installation =
Manual installation method requires downloading the 'Extra Product Options for WooCommerce' plugin and uploading it to your web server via your FTP application. The WordPress codex contains [instructions on how to do this here](https://wordpress.org/support/article/managing-plugins/#manual-plugin-installation).

== Frequently Asked Questions ==

= What makes this plugin different from other WooCommerce product options plugins? =
Our plugin is the ONLY free plugin offering <strong>nested conditional logic with AND/OR groups</strong>. This means you can create complex conditions like "Show field A when (Product X OR Product Y) AND (Category Z OR User Role Admin)". Most competitors only offer simple conditional logic in their free versions.

= How many field types are included in the free version? =
The free version includes <strong>20 field types</strong>, more than most competitors. These include text, textarea, number, password, select, multiselect, radio, checkbox, checkboxgroup, datepicker, timepicker, colorpicker, switch, slider, hidden, heading, paragraph, separator, rating, country selector, and tooltip/help icon. Plus 7 additional premium field types (file upload, color switcher, text switcher, image switcher, product group, repeater, and section layout).

= Does the plugin support conditional logic? =
Yes! Our plugin offers the most advanced conditional logic in the free version. You can create nested conditions with AND/OR groups to show/hide fields based on products, categories, tags, and more.

= Can I add custom pricing to fields? =
Yes! The free version supports fixed pricing. Premium version adds percentage pricing, custom formulas, price per character, quantity-based price breaks, and a price per option at each quantity break.

= Is the plugin compatible with my theme? =
Yes! The plugin is designed to work with all major WooCommerce-compatible themes as we provide comprehensive styling settings including margin, padding, and CSS customization options to help you match the plugin's appearance with any theme. You can adjust spacing, colors, borders, and more through the section settings and field styling options.

= Can I use conditional logic to show different fields for different products? =
Absolutely! You can set display rules based on products, categories, tags, and more. Create complex conditions using AND/OR logic to show fields exactly when and where you need them.

= Does the plugin support variable products? =
Yes! The plugin works seamlessly with both simple and variable products. Fields are displayed via AJAX for variable products to ensure smooth user experience.

= Can I customize the appearance of the fields? =
Yes! You can customize field labels, add CSS classes, configure section settings, use row/column layouts, and more. Premium version adds even more styling options.

= Is there a demo I can try? =
Yes! You can try our <a href="http://demo.wpactpro.com/extra-product-options" target="_blank">live demo</a> to see the plugin in action, or check out our <a href="https://www.youtube.com/watch?v=HCpaRwEeWvA" target="_blank">video tutorials</a>.

= How does option stock management work? (Premium) =
Per-option stock lets you set a stock quantity on individual options (e.g. "Red - 10 left", "Green - 5 left") for Select, Radio, Checkbox, Color Switcher, Image Switcher, and Text Switcher fields. Stock is validated before add-to-cart, deducted when the order is placed at checkout, and restored automatically when an order is cancelled, refunded, or fails. You can verify deductions in the order line item meta (_epofw_option_stock_deductions) and check current option stock in the addon builder.

= How do I get support? =
Free plugin users can get support via email at <a href="mailto:support@wpactpro.com" target="_blank">support@wpactpro.com</a>. Support with faster response times.

== Screenshots ==
1. List Of Fields
2. Conditional Logic
3. Pricing Options
4. Text Options Settings
5. Text Options At Front Side
6. Textarea Options Settings
7. Textarea Options At Front Side
8. Number Options Settings
9. Number Options At Front Side
10. Checkbox Options Settings
11. Checkbox Options At Front Side
12. CheckboxGroup Options Settings
13. CheckboxGroup Options At Front Side
14. ImageSwitcher Options Settings
15. Multiselect Options Settings
16. Multiselect Options At Front Side
17. Qty Settings
18. Qty At Front Side
19. Radiogroup Settings
20. Radiogroup At Front Side
21. WooCommerce Settings

== Upgrade Notice ==

= 4.4.9.4 =
Adds Price by quantity: an option can have its own price at each quantity break. Fixes several cases where the price shown did not match the amount charged, and restores the Datepicker's "Only Allow Listed Dates" setting. Back up before updating, as always.

== Changelog ==

= 4.4.9.4 - 2026-10-19 =
* New - Price by quantity (premium). Give an option a different price at each quantity break, on the Options tab. Each option is a card: its label, price and stock are typed once and its quantity bands sit underneath, so dragging moves the whole option and a band can never be separated from it. Screen print, embroidery and laser can each have their own volume discounts. Available on Select, Radio and the three Switcher field types
* New - A band can charge a flat amount for its whole range instead of a price per unit, with the "Fixed - flat for the band" price type. A band of 1 to 100 set to 150.00 flat charges 150.00 whether the customer orders ten or a hundred, which is how a setup or origination charge works
* New - "Bands follow" chooses whether the bands are matched against the product quantity or the field's own quantity. Field quantity needs that field's own Quantity option switched on, so until it is the choice is greyed out and says where to enable it, with a link to that tab - rather than letting you set something that would quietly never apply
* Update - The Price Type names in the Pricing Options tab now say what they charge rather than naming the mechanism, and each one explains itself in a line underneath. "Dynamic" is now "Price × number entered" — the type that charges your amount for every unit the customer types, such as 17 per person on a "number of guests" field. "Dynamic - Exclude Base Price" is now "Price × number entered, after a free allowance", "Custom" is now "Customer enters the price", and the per-character, per-word and per-step types are named the same way. Only the names change: no saved field, stored setting or calculated price is affected
* Update - Quantity-Based Pricing and the new per-option bands are layered rather than exclusive: an option's own band is used first, then the field's tier, then the option's price. A bulk price for every option with one option excepted is now possible, which neither could express alone. Existing Quantity-Based Pricing setups are unchanged
* Fix - Quantity-Based Pricing with its Tier basis set to "field quantity" charged the wrong price on a field whose own Quantity option was off. There is no field quantity to read in that case, so the cart matched tiers on a quantity of 1 and charged the untiered price, while the product page fell back to the product quantity and showed the tier. On a 50+ tier at a product quantity of 60 the page advertised the tier price and the cart did not honour it. Both now fall back to the product quantity, and the Tier basis control greys the choice out and says where to enable it
* Update - Quantity-Based Pricing and Price by quantity now cross-reference each other: each explains the other in a sentence, and the tab name in it is a link that takes you there. The two settle the same question on different tabs, so neither is much use without knowing the other exists
* Code - 10 new automated tests cover what addon prices are shown in all four combinations of WooCommerce's "prices entered with tax" and "display prices in the shop" settings, at both whole and fractional tax rates. Tax display had no test coverage before
* Code - 59 automated tests cover the new pricing from the stored structure through to the cart: every quantity boundary, each supported field type, all eight tax configurations, and the save path, where a column the admin collector does not capture would be silently dropped
* Fix - The date and time picker could open behind the page on desktop with some themes and page builders (for example Divi), so clicking the field looked like it did nothing. The calendar now always opens above the page content, and pickers inside the quick view keep their own higher layer
* Fix - A Heading or Paragraph field with its title position set to Left showed a thin white vertical line through its text, and the text was squeezed into the narrow title column. The line is gone and the field now uses the full width
* Fix - With the title position set to Left, the title sat lower than the field beside it: about 10px for Checkbox, Checkbox Group, Radio, Switch and File Upload fields, and about 20px whenever the Title Type was Strong or Div (on mobile those titles were also indented). Titles now line up with the first option
* Fix - Addon option prices now follow the shop's "Display prices in the shop" setting, as the product price beside them already did. On a store that displays prices including tax, the product showed its tax-inclusive price while every addon option showed its price without tax, so the two could not be compared and neither matched the total below them
* Fix - The Addon Details table's Subtotal now equals the rows above it. Where prices are entered without tax and displayed including it, a product of 100.00 plus an addon of 100.00 totalled 264.00 instead of 240.00, because the product's tax-inclusive figure was taxed a second time. The amount charged was always correct; only the figure shown on the product page was wrong
* Fix - The Addon Details table no longer labels its Subtotal "Including tax" on a store that displays prices without tax. It now adds the tax as a separate "Plus" line, matching how WooCommerce presents the cart
* Fix - Products with an addon no longer show a struck-through price and a saving that do not exist. The cart stored the product's tax-inclusive price added to the addon's tax-exclusive one as the item's regular price, so a cart charging 240.00 advertised a previous price of 264.00 and a 24.00 saving. The amount charged was unaffected
* Fix - The cart line for an addon now quotes the price it actually charges. With a quantity band, a volume tier or a price rule in play, the line described the option's plain price while billing the adjusted one: an option billed at 9.00 per unit still read "Gold (2.00)" beside a line total of 135.00, and the figure drifted again whenever the shopper changed the quantity. The amount charged was always correct; only the description was wrong
* Fix - A percentage option price is no longer applied twice on the product page. The Addon Details table showed 0.32 for a 10% option on an 18.00 product, while the dropdown above it and the cart below it both said 1.80, because the server published the worked-out amount still labelled as a percentage and the browser took the percentage again. Long-standing; the cart was never affected
* Fix - A quantity band left without a price no longer produces an invalid figure in the browser. The band is now treated as costing nothing, which is what the cart already charged
* Fix - The quantity band price type list no longer offers "Percentage of product price". Neither the product page nor the cart applies a percentage to a band, so a merchant who chose it got a break that silently charged the option's normal price at every quantity. Bands offer the two types that work: a fixed amount per unit, or a flat amount for the whole band
* Fix - "Fixed - flat for the band" is no longer offered in the free version, where quantity bands do not exist and the type had nothing to apply to
* Fix - Text Switcher options with quantity bands are saved correctly. A band row posted a switcher value that the option's own row did not, so the posted arrays no longer lined up one value per row - the shape the whole save path depends on
* Fix - The six documented price filters (epofw_price_before_calculation, epofw_regular_price_before_calculation, epofw_sale_price_before_calculation and the three epofw_set_product_*_price_after) reach the prices that are stored again. A rewrite in this release left them computing a value nothing read, so a site filtering them saw no effect and no error. They now receive the as-entered price, the space the WooCommerce setters expect
* Code - The filter behind the band-capable field type list is now named epofw_option_qty_band_field_types, matching the function it belongs to. It was left over from an earlier, unreleased feature and was never in a release under the old name
* Fix - The price shown beside each option now follows the quantity. A product page is rendered once, at the quantity the shopper arrived with, so an option priced by quantity bands kept advertising its opening price: a dropdown reading "Gold (+2.00)" above an Addon Details table — and a cart — that both said 9.00. The label now changes with the product or field quantity, in the dropdown and beside Radio and Switcher options alike. Every version of the label is rendered by the server, so wording, currency formatting and any filter applied to them are unchanged
* Fix - Two Color Switcher or Image Switcher options that share a label are no longer merged into one. The builder treated the label alone as the option's identity, so a second option reading "Classic" in a different colour was drawn as a quantity band of the first, and its colour was overwritten with the first one's the moment the field was saved — losing that option. An option is now identified by its label and its swatch together, which is how the cart has always told them apart. Rows that share both are still one option with quantity bands
* Fix - "Fixed - flat for the band" is offered only while "Price by quantity" is switched on. With it off there is no band for the type to apply to, and it quietly behaved as an ordinary per-unit price: an option set to 40.00 flat charged 40.00 for every unit, so 200.00 at a quantity of five, while its name promised a single charge. A field already saved with the type keeps it, so no existing setting changes
* Fix - "Only Allow Listed Dates" is back on the Datepicker field. The setting sat in the wrong branch of the settings form, so the Datepicker never offered it — the feature could not be reached from the field it belongs to — while the Timepicker showed a control for restricting which dates a customer may pick, where it does nothing. Timepicker settings also raised PHP warnings each time they were opened. Present since 4.4.9.2
* Update - Tested with WooCommerce 11.2.1
* Update - Tested with WordPress 7.1.3

= 4.4.9.3 - 2026-10-01 =
* Fix - Files uploaded through the File Upload field are now shown on the order, with the file name and a working link. With AJAX upload switched on (the default), the uploaded file's address was stored in a form the order screen, the customer's order page and the order emails could not read, so the order showed an empty link and a broken icon and the file could only be found by browsing the server. Orders placed before this update are fixed as well: their links appear as soon as you update, with nothing to re-save
* New - Uploaded files can be opened straight from the order. Upload folders have been blocked from direct access since 4.4.4, which also left the shop owner with no way to open a customer's file from WordPress. File links now go through a protected download. It is available to shop managers, to the customer who placed the order, to anyone holding the link from that order's email, and to a shopper for the files in their own cart
* Fix - A File Upload field with "Multiple files" switched on and AJAX upload switched off now saves its files. The files reached the server but were never attached to the cart item, so the order was placed without them and without any warning
* Fix - An upload can no longer go missing from an order without anyone being told. A file the server refuses, most often because it is larger than the hosting's upload limit, now stops the add to cart with a message naming the file, and the AJAX uploader shows that reason instead of an empty error box. If an uploaded file can no longer be matched to the shopper when they add to cart, they are asked to upload it again
* Fix - An uploaded file is now stored once and appears once. With AJAX upload on, the same file was saved to the server a second time when the product was added to the cart, and could appear in the cart as two separate rows
* Fix - File types other than PDF and DOCX no longer show a broken image beside the file name in the cart, the order and order emails
* Update - An uploaded file is now listed on the order by its file name, with the file-type icon where one exists. An uploaded image is no longer embedded as its own preview, because the original would have to be loaded at full size on every order view and email open. If you style these links or filter their HTML, note that each is now a link with the class epofw-file-link containing the file name, one per line
* Security - Hardened the File Upload field. Each visitor's uploads are kept in their own private folder, the remove-file request is limited to the visitor's own uploads, and only files a visitor actually uploaded can be attached to their cart item. Updating is recommended for every store that uses File Upload fields
* Fix - Image Switcher choices are accepted again on a site that has changed address. Since 4.4.9 the product page printed each option with its image re-pointed at the current address while the cart still compared against the address stored before the move, so every add to cart was refused with "Option is invalid"
* Note - Links to uploaded files in order emails include that order's key, the same way WooCommerce's own order links do, so anyone the email is forwarded to can open the files. Files uploaded before this update stay where they are and keep working. On nginx, which ignores the folder protection file, direct access to wp-content/uploads/epofw_files/ can now be denied in the server configuration without breaking anything, because files are served through the protected download
* Code - 56 new automated tests cover the File Upload field from upload to order to download, which previously had none
* Fix - Changing the Date Format in a Datepicker field's settings now updates the Minimum Date and Maximum Date pickers straight away. The setting was wired to a selector that does not exist on the page, so nothing happened until the field was saved and reopened
* Update - Tested with WooCommerce 11.1.2
* Update - Tested with WordPress 7.1.2

= 4.4.9.2 - 2026-09-14 =
* Fix - Advanced Product Fields for WooCommerce option prices no longer disappear from the total when this plugin is active. Both plugins set the cart item price on the same hook at the same priority, each calculating from the product's original price, so whichever ran second discarded the other's additions. Because plugin load order put us second, the Advanced Product Fields options still appeared and still reached the order while their prices silently went missing. An item carrying fields from both now costs the product price plus both sets of options
* Fix - Datepicker date restrictions are now enforced when the item is added to the cart. The minimum date, maximum date, disabled weekends and blocked dates were applied only in the browser, so a customer bypassing the page scripts could order a date you had blocked. The same checks now run on the server. A date that cannot be read against the field's date format is still accepted, so a valid order is never turned away
* New - Blocked dates can now be entered as a range. Writing 01-12-2026:14-12-2026 blocks every day in that span, instead of typing all fourteen dates. Ranges mix freely with single dates and accept the same {today} and {+7d} shorthand as the minimum and maximum date fields
* New - "Only Allow Listed Dates" turns the blocked dates list into the opposite: the dates you list become the only ones a customer can pick, and every other day is switched off. For products sold on set days only, such as a class timetable or the issue dates of a magazine. It does nothing while the list is empty, and the minimum date, maximum date and Disable Weekends settings still apply on top
* Fix - The addon builder now warns when an addon's display rules would hide it on every product. An addon with no rules, or with a rule whose value was never chosen, never appears anywhere, and until now both looked completely normal in the builder. This also identifies rules left empty by the Select All problem fixed in 4.4.9.1, which updating does not repair on its own
* Update - Tested with WooCommerce 11.1.0

= 4.4.9.1 - 2026-08-27 =
* Fix - Select All and Clear All had no effect in an addon's Additional Rules. The buttons fetched the full Product, Category, Tag, Variation or User Role list correctly but never placed it in the condition field, so the box stayed empty and Clear All appeared to do nothing. Both buttons now fill and clear the condition row they belong to
* Update - The "one-off" note shown beside a flat quantity-based charge in the product page addon totals is now translatable, instead of always appearing in English

= 4.4.9 - 2026-08-11 =
* Fix - Cross-field Price Rules combined with Quantity-Based (Volume / Tiered) Pricing now apply correctly for every tier type. A fixed rule such as "Subtract 10" is taken off the line total once only when the matched tier is a flat type; against a per-unit tier, and when the quantity matches no tier at all, it now comes off each unit and is multiplied by the quantity. Percentage and Multiply rules are unaffected. Totals may change for setups that combined a per-unit tier with a fixed Price Rule
* Fix - Image Switcher option images no longer break when a site moves to a new address or drops a staging sub-directory. The stored image URLs live in the plugin's own tables, which search-and-replace tools skip, so every swatch rendered blank. Images are now re-pointed at the current uploads directory automatically, and URLs that genuinely point elsewhere (a CDN, another site) are left untouched
* Fix - Advanced Validation Rules can now be switched off. Turning the toggle off appeared to save, but the setting was read back as enabled on the next page load, making it impossible to disable once any rule had been entered
* New - Product page addon totals now show the quantity behind every amount. The subtotal reads "Subtotal (119.00$ x 6)" with the line total, and a field with its own quantity shows "(12.00$ x 4)" beside its name, so a shopper can see exactly how the figure was reached instead of a per-item price that looked like an order total
* Update - The Quantity-Based Pricing panel now states that a matching tier REPLACES the Field Price above it, and warns when the field uses a calculated Price Type (per character, per word, or a custom formula) whose result the tier would discard
* Update - The "Use the product quantity" setting in Quantity Settings (previously labelled "Product Quantity") now explains what it does to the price, with worked figures for both states
* Fix - Per-word pricing now counts words the same way the product page does. Languages that do not use the Latin alphabet (Japanese, Chinese, Thai, Arabic) were counted incorrectly, so the cart charged a different amount from the price shown
* Fix - Server-side validation now runs when an item is added to the cart. Validation rules were only ever enforced in the browser, so a customer bypassing the page's scripts could add a product with values that break the rules. Rules are now re-checked on the server, and anything the check cannot positively identify is allowed through so that valid purchases are never blocked
* Fix - Advanced Validation rules are now cleaned up when an addon is saved. Invalid entries such as a non-numeric character limit or a malformed pattern were stored exactly as typed instead of being corrected or discarded
* Fix - Validation character and word limits now count the same way the browser does, so a value accepted on the product page is no longer rejected at the cart for non-English text
* Fix - Per-character pricing now charges for the characters typed rather than the bytes they occupy. Accented, non-Latin and other non-ASCII text ("café", Japanese, Cyrillic) was counted by byte length on the server, so the cart charged more than the price shown on the product page. Server and product-page totals now always agree. Prices for plain English text are unchanged
* Fix - Product Group option settings (label, price, and the linked product) could be saved in an unusable form, so the field's product list did not work correctly after saving. Options are now always stored in the correct structure
* Fix - Per-option stock could drain faster than items were actually sold. When a multi-select or checkbox group submitted the same option more than once, each repeat was counted as a separate sale and deducted another unit from that option's stock
* Fix - Deleting a post or product that had no saved addon options could silently discard other database changes made in the same request. The plugin opened a database transaction to remove the addon's data, and when there was nothing to remove it returned without closing it, so anything saved afterwards in that request was rolled back when the page finished loading
* Fix - Deleting an addon now removes all of its stored layout data. One level of the layout structure was never cleaned up, so unused rows built up in the plugin's tables over time and were never removed
* Fix - Fields that disappeared from addons migrated from older versions are restored. The first field of every migrated legacy addon was hidden everywhere in the plugin — the builder, the product page and the cart — even though it was still stored safely in the database. Updating brings those fields back automatically, with their settings and prices intact. If you re-created a missing field by hand after the upgrade you may now see it twice, and can delete the duplicate
* Fix - Custom Price Formulas using powers (for example pow({value}, 2) or Math.pow({value}, 2)) were charged as 0.00 instead of the calculated amount, so products using them added nothing to the total
* Fix - Importing addons in "Update existing" mode failed immediately with a fatal error and imported nothing. Update-mode imports now complete normally
* Fix - Migration status and verification screens reported 0 fields for every addon, making a completed migration look like it had lost all data. The counters now report the real field count
* Fix - Separator and Product Group were missing from the field type list on the About page
* Fix - The Repeater field no longer shows an empty settings card in the builder on the free version
* Code - Test suite expanded to 782 automated tests covering pricing, storage, migration, import/export and the addon field types, and the suite now runs against its own isolated database so results are reproducible
* Fix - Product page addon totals no longer show duplicate option rows (and a wrong subtotal) for fields saved by old plugin versions with label-based input names containing unsafe characters (spaces, dots, slashes, parentheses). A one-time background migration normalizes those stored names to the canonical epofw_field_{id} format, and field rendering plus frontend JS now normalize such names defensively
* New - Documentation page redesign: Getting Started video hero, live doc search with All / General / Field Types / Pricing filter tabs, and a resources sidebar (Full Documentation, Video Tutorials, Support)
* New - Guided Tour: an end-to-end interactive spotlight walkthrough that follows the real build flow — from Add New on the addons list, through the addon configuration (Status, Name, Display Rules, Position, Section Layout), adding a section, dropping in a field, and every field-settings tab (General, Label, Options, Quantity, Pricing, Conditional Logic, WooCommerce, Container). It waits for you to perform each action, auto-switches tabs, resumes across the page change, and can be launched anytime from the "Take a Tour" buttons in Quick Actions, the builder and the Documentation page (also auto-shown once for new users)
* Fix - Elementor "Product Add to Cart" widget compatibility: addon fields no longer collapse into one row with the quantity box and Add to Cart button
* New - Quantity-Based (Volume / Tiered) Pricing: set price breaks per field where the matched tier prices all units; four tier types (Fixed or % of product price, each per unit or flat), by product or field quantity, with live preview and cart/shop support
* Fix - Tooltip help icon/text no longer leaks into the shop quick-view "Apply" options summary label
* Update - French (fr_FR) translation refreshed to 100% coverage (300 new/updated strings, including Volume Pricing, Guided Tour, Import/Export, Validation and Documentation screens)
* Fix - Product page price preview now always matches the cart: priced fields with pre-selected defaults on hidden wizard steps or collapsed accordion sections (default-checked options, slider at its minimum) are counted in the addon totals from page load, so customers are never charged more at checkout than the product page showed
* New - Discount Rules for WooCommerce (Flycart) compatibility: store discounts now apply to the product price only — addon prices keep their full configured amount instead of being discounted along with the product (applies only when a discount rule actually matches; flat-amount discounts and undiscounted items are untouched). The product-page addon totals preview also uses the discounted product price, so the preview always matches the cart
* Fix - Values placed by browser autofill are now priced in the addon totals as soon as the browser exposes them (at the customer's first interaction) instead of only when clicking Add to Cart
* Fix - Password fields no longer trigger the browser's saved-login autofill (autocomplete="new-password"), which could silently fill neighbouring priced text fields with the saved username
* Fix - Addon option prices now display in the Cart/Checkout block, not just the classic cart and mini-cart. The price is shown next to each selected option (e.g. "Choose Your Size: XS (99.00$)") consistently across all cart types
* Fix - Product Group no longer shows a Pricing Options tab. Each product is priced individually in the Product Group Options tab, so the field-level pricing tab (which was informational only, with no usable controls) has been removed
* Fix - The Pricing tab intro banner now shows an accurate message for option-based fields (Select, Radio, Checkbox, etc.): they are priced per option and use Price Rules / Volume pricing, instead of the generic "set the field price" text
* New - Redesigned Pricing Options tab: a clear Field Price → Price Rules → Volume calculation-order map at the top, each pricing system in its own collapsible card with an On/Off summary. Purely a UI change — saved data, input names, and how prices are calculated are all unchanged
* Fix - Added proper spacing above the Price Rules section in the Pricing tab so it is clearly separated from the field's own pricing controls (e.g. the Rating per-star rows and Add Row button)
* Fix - Conditional Logic (Visibility) rule value dropdown was empty when the trigger field was a Country or other option-based field (Select, Radio, Checkbox Group, Multiselect, colour/text/image switchers); it now correctly lists that field's options so a matching value can be chosen
* Fix - Volume / Tiered pricing "Tier basis" no longer offers "Field quantity" for field types that have no Quantity tab (Rating, and heading/paragraph/separator/hidden/password), where a field-quantity basis could never apply

= 4.4.8 - 2026-06-30 =
* New - Price Rules now work on option-based fields (Select, Radio, Checkbox, Checkbox Group, Multiselect, and Country) - adjust the selected option's price when another field has a specific value, with live product-page preview and cart/checkout support
* Fix - Tooltip / Help Icon redesigned (dark tooltip with a visible arrow and correct padding) and no longer clipped by theme or plugin styles
* Fix - Country field price is now consistent between the dropdown label, the product-page add-on details, and the cart
* Fix - "Migrate to Sections" button no longer shows misaligned loading text (now shows a clean spinner)
* Update - Added a loading indicator when adding a new Price Rule
* New - Import/Export addon configurations
* New - Tooltip / Help Icon feature
* New - Help Text input in General Settings
* New - Regex Pattern Validation for 8 field types (Text, Textarea, Email, Phone, URL, Password, Number, Hidden)
* New - Min/Max Length constraints validation
* New - Min/Max Words constraints validation
* New - Custom Validation Error Messages
* New - Persistent error display until requirements met
* New - Real-time validation feedback on blur and input
* New - Add-to-Cart button disabled until validation passes
* New - Country Selector field type with WooCommerce country dropdown
* New - Per-Country Pricing with dynamic price calculations
* New - Cross-Field Pricing Rules with 5 operators (Add, Subtract, Multiply, Percentage Add, Replace)
* Improved - Tooltip styling with arrow pointer and shadow
* Improved - Full accessibility support for tooltips
* Fixed - Tooltip overflow clipping
* Fixed - Disabled fields with empty field_status being displayed on shop page when they shouldn't be
* Fixed - Additional rules for addons not properly excluding products due to type mismatch in product/product_variation condition comparisons
* Fixed - Product Quantity condition in additional rules always evaluating to true instead of checking actual cart quantity
* Fixed - Missing class loads in plugin initialization (import-export and bulk-export-import classes)
* Fixed - Better error handling for failed exports and JSON parsing
* Security - Proper output escaping for nonce values
* Code - PHPCS compliance and code quality improvements
* Compatible with WooCommerce 10.9.x and WordPress 7.x

= 4.4.7 - 2026-04-23 =
* New - Product Group Fields
* New - Slider range
* Update - Unauthenticated AJAX allows arbitrary file deletion
* Compatible with WooCommerce 10.7.x

= 4.4.6 =
* New - Section Layout (Premium) - Organize addon sections using Accordion, Tabs, or Step Wizard layouts
* New - Section Layout Global Settings (Premium) - Set global defaults for all section layouts with per-addon override capability
* New - Accordion Layout options: Mode (Single/Multi Open), Default Expanded (All/First/None), Icon Style (Plus/Minus, Chevron Arrow, Caret Triangle)
* New - Tabs Layout options: Style (Horizontal, Vertical, Pills, Underline), Position (Left/Right for vertical tabs)
* New - Wizard Layout options: Progress Bar, Step Indicators with completed/error states, Navigation buttons
* New - General Behavior settings: Animation Speed (Fast/Normal/Slow), Remember User State, Deep Linking, Highlight Sections with Errors
* New - Smart validation for hidden fields - Automatically expands sections with errors, shows error indicators, and focuses on invalid fields
* New - Error indicators on tabs/accordion headers/wizard steps when sections contain validation errors
* New - Keyboard accessibility for all layouts (arrow keys, Enter/Space, Home/End navigation)
* New - Custom (User Entered) pricing type for number fields - Accept donations, tips, and custom amounts
* New - Dynamic (Per Unit) pricing type - Calculate price per 'n' number of units
* New - Dynamic - Exclude Base pricing type - Price per unit excluding base quantity
* Improved - Tax display on product page - Shows "Including € XX.XX Tax" matching cart display format
* Improved - Per-addon tax class support - Each addon can have its own tax class (standard, reduced-rate, zero-rate)
* New - Per-option stock management (Premium) - Set stock quantity per option for option-based fields (Select, Radio, Checkbox, Color/Image/Text Switcher)
* New - Stock validation before add-to-cart - Prevents adding to cart when selected options are out of stock
* New - Stock deduction at checkout - Option stock is reduced when order line items are created
* New - Stock restoration on order cancellation, refund, or failure
* Improved - Tax info updates dynamically when switching product variations
* Compatible with WooCommerce 10.5.x

= 4.4.5 =
* New - Repeater field type (Premium) - Allow customers to duplicate a group of fields on the product page
* New - Repeater features: select fields to repeat, configurable min/max instances, custom button labels
* New - Repeater pricing: child field prices accumulate across all instances with cart/order support
* New - AJAX server-side search for addons list page with pagination support in admin side
* New - Introduced new actions and filters for better developer extensibility
* New - Added documentation links in each field type tabs for quick reference
* New - Theme compatibility system for Elessi/Flavor and similar themes
* New - Global Settings section - Set global defaults for field labels that apply to all addon fields
* New - Auto (Smart Detection) option for Title Position - Automatically selects optimal label display based on field type
* New - Filters: epofw_before_render_addon_fields, epofw_cart_item_data_after_addon, epofw_before_save_addon_data, epofw_before_duplicate_addon_data
* New - Actions: epofw_before_addon_html, epofw_after_addon_html, epofw_after_add_cart_item_data, epofw_before_delete_addon, epofw_after_delete_addon, epofw_after_save_addon, epofw_after_duplicate_addon
* New - Actions: epofw_before_global_label_settings, epofw_after_global_label_settings, epofw_global_settings_sections
* Improved - Compatibility with Elessi/Flavor themes for addon positioning
* Performance - Added caching for general settings to reduce database queries
* Performance - Added static caching for product terms (categories/tags) in conditional logic evaluation
* Performance - Added object caching for addon post IDs list on frontend
* Performance - Added static caching for per-product addon match results
* Performance - Optimized WooCommerce tax display option calls in price functions
* Performance - Added object caching for global settings with 1-hour expiration
* Fixed - Currency display issues in addon price formatting
* Fixed - JavaScript errors in addon price calculation
* Fixed - Additional Rules flash/flicker on page load - addons now hide instantly via server-side pre-evaluation
* Fixed - Addons without Additional Rules no longer display on product pages - rules are now required for addon visibility
* Fixed - Column group drag-drop reorder not saving correctly after save

= 4.4.4 =
* New - Nested logic structure for Additional Rules (AND/OR groups)
* Improved - Additional Rules now support grouped conditions with AND/OR logic
* Improved - Better flexibility for complex conditional rules
* Improved - Cart item price calculation now includes addon prices on-the-fly for accurate display
* Fixed - AJAX add to cart not calculating addon prices correctly in cart and mini-cart
* Fixed - Addon prices being double-counted when "Based on product setting" tax option is selected
* Fixed - Mini-cart widget displaying incorrect prices after AJAX add to cart
* Fixed - Multiselect field values not displaying in cart
* Fixed - Multiselect field prices not calculating correctly
* Fixed - Two column fields css issue
* Fixed - Duplicate nonce issue

= 4.4.3 =
* Fixed - Additional Rules

= 4.4.2 =
* Fixed - Documentation

= 4.4.1 =
* New - Separator field type - Add horizontal divider lines to visually separate sections or fields
* New - Separator customization options: color, style (solid, dashed, dotted, double), width, and margin
* New - Email, URL, and Phone Number validation for Text field restrictions
* New - HTML5 input types (email, url, tel) with mobile keyboard optimization
* New - Pattern validation with helpful error messages for Email, URL, and Phone
* New - Tag conditions now available in Free version
* New - Select All/Clear All buttons for conditions now available in Free version
* New - Slider field now available in Free version
* Improved - Real-time addon price updates for email, url, and tel input types
* Fixed - Container query layout issue causing fields to not display on some themes
* Fixed - Added fallback media queries for better theme compatibility
* Fix datepicker advance pricing, readonly field, and date format issues
* Fixed - Datepicker Price not showing accurate in product page
* Fixed - Advance Datepicker Price rules not saved
* Remove custom price formula is unnecessary for datepicker field

= 4.4.0 =
* New - Complete UI redesign with modern, intuitive admin interface
* New - Section management system with comprehensive settings (title, description, styling, custom CSS)
* New - Row & Column layout system for organizing fields (single and two-column layouts)
* New - Custom database tables for improved performance and data structure
* New - Modular JavaScript architecture for better code organization
* Removed - Table structure option (Display Structure Format setting) - all addons now use div structure only
* Removed - Old CSS files (epofw-admin.css, epofw-public.css) replaced with new structure
* Deprecated - `epofw_html_table_field_label_td` - Use `epofw-field-label-html.php` template directly
* Deprecated - `epofw_html_table_field_input_td` - Use `epofw-field-input-html.php` template directly
* Deprecated - `epofw_field_title` - Use template system directly
* Deprecated - `epofw_field_subtitle` - Use template system directly
* Deprecated - `epofw_field_label_start_td` - Use template system directly
* Deprecated - `epofw_field_label_end_td` - Use template system directly
* Deprecated - `epofw_field_input_start_td` - Use template system directly
* Deprecated - `epofw_html_start_tr_display` - Use template system directly
* Deprecated - `epofw_html_end_tr_display` - Use template system directly
* Deprecated - `epofw_html_start_table_display` - Use template system directly
* Deprecated - `epofw_html_end_table_display` - Use template system directly
* Deprecated - `epofw_before_display_structure` (Premium) - Display Structure Format setting has been removed
* Deprecated - `epofw_after_display_structure` (Premium) - Display Structure Format setting has been removed
* Deprecated - `epofw_field_before_title` (Premium) - Use template system directly
* Deprecated - `epofw_field_after_subtitle` (Premium) - Use template system directly
* Compatible with WooCommerce 10.4.x
* Compatible with WordPress 6.9.x

= 4.3.5 =
* Compatibility update for WooCommerce 10.3.x
* Compatibility update for WordPress 6.9.x
* Fixed: Variation price not updating in the subtotal when switching variations
* Fixed: Logical field not displaying for the Textarea field
* Fixed: ImageSwitcher not uploading files

= 4.3.4 =
* Compatible with WooCommerce 10.1.x

= 4.3.3 =
* New – Configuration add-on options in a modal popup on the Shop page for simple products.
* Compatible with WooCommerce 10.0.x
* Fixed - Conditional logic issue with switch, slider and number field

= 4.3.2 =
* Fixed quantity issue with addon
* Fixed subtitle type selection issue
* Added nonce and validate nonce for epofw product adodns

= 4.3.1 =
* Compatible with WordPress 6.8.x
* Compatible with WooCommerce 9.8.x
* Code optimization
* Added new language file fr

= 4.3 =
* Compatible with WordPress 6.8.x
* Compatible with WooCommerce 9.8.x
* Fixed - PHP Notice: Function _load_textdomain_just_in_time was called <strong>incorrectly</strong>.

= 4.2 =
* Update - Fixed an issue with draggable for options.
* Compatible with WooCommerce 9.8.x
* Fixed - Sanitizing attribute for the field types

= 4.1 =
* New Field - Switch
* Update - Fixed an issue on the admin side where text couldn't be selected when opening the accordion due to movement. Now, drag and drop is restricted to the field header only.

= 4.0 =
* Update - Integration freemius

= 3.1.1 =
* Fixed fatal error
* Fixed - add cart item without product option

= 3.1.0 =
* Add nonce after add to cart button.
* Refactor code
* Compatible with WooCommerce 9.7.x

= 3.0.9 =
* New - Import Dummy Data
* Refactor code
* Compatible with WordPress 6.7.x
* Compatible with WooCommerce 9.6.x

= 3.0.8 =
* Compatible with WordPress 6.7.x
* Compatible with WooCommerce 8.9.x

= 3.0.7 =
* Refactor code

= 3.0.6 =
* Compatible with WordPress 6.5.x
* Compatible with WooCommerce 8.8.x
* Verified nonce when enable/disable option and change field type.

= 3.0.5 =
* Compatible with WordPress 6.5.x
* Compatible with WooCommerce 8.8.x
* Fixed - Cross site scripting

= 3.0.4 =
* Compatible with WordPress 6.4.x
* Compatible with WooCommerce 8.4.x
* Fixed - Scrambled CSS Class for options
* Fixed - Cross site scripting

= 3.0.3 =
* Compatible with WordPress 6.3.x
* Compatible with WooCommerce 8.0.x
* Update - Addon options can be drag and drop

= 3.0.2 =
* Compatible with WooCommerce 7.8.x
* Fixed - Duplicate addons on single product page

= 3.0.1 =
* Compatible with WooCommerce 7.7.x
* Compatible with WordPress 6.2.x
* Fixed - Multiple addons on single product page then subtotal count multiple times

= 3.0 =
* Compatible with WooCommerce 7.5.x
* New - General Settings - Addon Details Title
* New - General Settings - Subtotal Title
* New - Addon template can modified via theme
* Compatible Addon field with pro plugin
* Fixed - Minor issue

= 2.0.9.2 =
* Compatible with WooCommerce 7.3.x

= 2.0.9.1 =
* Compatible with WooCommerce 7.1.x
* Compatible with WordPress 6.1.x
* Fixed error with php8.1

= 2.0.9 =
* Compatible with WooCommerce 7.0.0
* Compatible with WordPress 6.0.x

= 2.0.8 =
* Fixed duplicate field issue

= 2.0.7 =
* Compatible with WooCommerce 6.7.x
* Compatible with WordPress 6.0.x

= 2.0.6 =
* Compatible with WooCommerce 6.5.x

= 2.0.5 =
* Compatible with WooCommerce 6.3.x
* Compatible with WordPress 5.9.x

= 2.0.4 =
* Fixed - Radio button issue
* Compatible with WooCommerce 6.2.x

= 2.0.3 =
* Fixed - Radio button issue
* Fixed - CSS Issue
* Fixed - Wrong price display if select another currency from wocommerce setting
* Compatible with WordPress 6.2.x

= 2.0.2 =
* Fixed - critical problem to save data

= 2.0.1 =
* Fixed - Remove comma after some enqueue script and style
* Compatible with WordPress 5.9.x

= 2.0 =
* New - Enable/Disable Field Options using checkbox
* Fixed - PHP Warning
* Update - Code, CSS and JS
* Compatible with WooCommerce 6.1.x
* Compatible with WordPress 5.8.x

= 1.9.8 =
* Fixed - When click on variable product from cart and back to product page then price calculation issue.
* Fixed - PHP Warning
* Compatible with WooCommerce 5.9.x
* Compatible with WordPress 5.8.x

= 1.9.7 =
* Fixed - Not working with greek/chinese characters
* Fixed - PHP Warning
* Compatible with WooCommerce 5.9.x
* Compatible with WordPress 5.8.x

= 1.9.6.4 =
* Fix - PHP Uncaught TypeError

= 1.9.6.3 =
* Fix - Greek character display issue

= 1.9.6.2 =
* Fix - PHP Warning

= 1.9.6.1 =
* Fix - PHP Warning

= 1.9.6 =
* Compatible with WooCommerce 5.8.x

= 1.9.5 =
* Currency position issue with subtotal on product detail page
* Compatible with WooCommerce 5.7.x
* Compatible with WordPress 5.8.x

= 1.9.4 =
* Addon price is not displaying properly in product detail page
* Compatible with WooCommerce 5.6.0
* Compatible with WordPress 5.8

= 1.9.3 =
* Remove action not working due to instance class
* Compatible with WooCommerce 5.5.2
* Compatible with WordPress 5.8

= 1.9.2 =
* Compatible with WooCommerce 5.5.x

= 1.9.1 =
* Fixed - Additional rule was not working when we add two addon forms for the same category.
* Compatible with WooCommerce 5.4.x

= 1.9.0 =
* Maintenance Release

= 1.8.9 =
* Fixed - Pricing sign issue
* Update - Compatible with WordPress 5.7.2
* Compatible with WooCommerce 5.3.0

= 1.8.8 =
* Fixed - Product search issue with cyrillic input

= 1.8.7 =
* Fixed - Variable price issue in cart
* Fixed - JS error in product page

= 1.8.6 =
* Fixed - Minor changes

= 1.8.5 =
* Price issue with variable product
* Compatible with WooCommerce 5.2.2
* Compatible with WordPress 5.7.1

= 1.8.4 =
* Compatible with WooCommerce 5.2.x

= 1.8.3 =
* Fixed - Colorpicker was not working.

= 1.8.2 =
* Compatible with WooCommerce 5.1.x

= 1.8.1 =
* Display currency position based on WooCommerce Settings.

= 1.8 =
* Compatible with WooCommerce 5.0.X
* Update strings for translation

= 1.7 =
* Compatible with WooCommerce 4.9.X
* Update language pot file

= 1.6 =
* Fixed - Missing Text Domain

= 1.5 =
* Fixed - Undefined index issue

= 1.4 =
* Compatible with WooCommerce 4.8
* Compatible with WordPress 5.6

= 1.3 =
* Maintenance Release - Update demo in readme.txt file

= 1.2 =
* Fixed - Addon field not showing in cart page.

= 1.1 =
* Compatible with WooCommerce 4.6.1

= 1.0 =
* Initial release
