Version2.5.4Updated16 Oct 2026WordPress5.8+, tested to 7.1WooCommerce5.0+, tested to 11.2PHP7.4+
2.5.47 better, 13 fixed
Better
Small grey words (hints, part names, placeholders, the range under a slider) are drawn in a lighter shade of the text colour, readable on white and on a theme's off-white page; the required star is a darker red.
A white or very light colour swatch now shows a faint edge, so it no longer disappears on a white card.
The Global Calculator choice no longer says "Available everywhere on your site via shortcode". A global calculator shows on every product that has no product or category calculator of its own; the shortcode is a separate way to place any calculator.
Shops updating from 2.5.2 or older keep the Add to Cart colour they had. It used to fall back to blue while the rest of the calculator was purple; a new install is purple throughout, and a shop that never saved a button colour keeps its blue button.
The Documentation buttons open the PriceWise help pages directly, and the readme lists all 15 field types, the real menu (Calculator Pro), the real hooks and what the plugin sends to devtonicstudios.com.
Ready for PHP 8.5: the calculator import frees its file check without the deprecated close call.
Tested with WordPress 7.1 and WooCommerce 11.2.
Fixed
Fields set to half or third width in the Layout tab were squeezed into the 400px card on a desktop, so option names broke one letter per line. A calculator that puts fields side by side now takes the width of the product column (unless you set a fixed width), and fields sit side by side only where there is room, one under the other on phones and in narrow columns.
Words stay readable whatever colours you pick. The Next and Previous buttons, a picked option, the price tags, the title, the step counter, the slider value and the footer used white or your own colour for their words without checking the colour behind them, so a light colour like yellow made them unreadable, and with StoreWise's starter colours the footer's progress words were dark on dark. Where a colour would not read, PriceWise now uses white or near-black, or a darker or lighter shade of your colour.
The Badge/Price Tag Text Color setting now reaches the price tags (they were always white).
In the Inline layout, picked options and the price followed the Header Background colour, which the Inline layout does not show. They now follow Selected Option Background and Price Display Color.
The Validation Message colours now colour the warning box the calculator shows (they did nothing before).
The date field has a box like the other fields in the step-by-step and all-in-one layouts.
A ticked option in a Checkboxes field showed its price instead of its name in the cart, at checkout and on the order ("Rush Order: 15" instead of "Rush Order: Yes, rush my order"). It now shows the name, like a dropdown or radio choice. The price is unchanged.
In the step-by-step layout, a Checkboxes step passed without a tick put an empty line ("Add Gift Packaging:") in the cart, at checkout and on the order. Empty answers now get no line.
With Calculator Width set to Full Width (or a fixed width), the calculator kept the narrow card's 10px left margin, so it sat off the product column and ran 10px past it. It now lines up with the column.
The price breakdown under the total (add-ons, minimum charge, setup fee) used fixed dark greys, so on a dark calculator footer, like the StoreWise starter colours, its lines could not be read. They now follow the Footer Text and Footer Price colours (the Inline layout keeps its own light box).
The line numbers beside the formula box showed two to a line (1 2, 3 4 ...). They now run one per line, level with the line they number, and the strip behind them no longer sticks out under the box.
The Contact Support button on the licence screen opened a website that does not exist. It now opens https://devtonicstudios.com/contact/, and the screen says a key works on as many sites as your plan allows (it said one site, but Business keys cover five).
Saving Settings > Design switched the hover animation and the card shadow off, because the Design tab has no box for either. A save now keeps them as they were.
Earlier versions
2.5.31 new, 2 better, 2 fixed, 1 for developers
New
Works with DiscountWise 1.0.1. A percentage, amount or bulk (quantity) discount comes off the finished calculated price, and the product page shows it as its own "Discount" line in the price breakdown with the price the basket will charge. The price follows the quantity box, so a bulk discount shows before Add to Cart. A DiscountWise trade price ("set price" rule) becomes the product price the calculator starts from. The order email and the printed quote show the calculated price crossed out next to the price paid.
Better
The discount line has its own text in Settings, Text & Labels, and a minus amount in the breakdown is written the way WooCommerce writes it: -$74.00.
One default colour. The Add to Cart button and the newer parts of the calculator fell back to blue while everything else was purple; they are now purple too. The quantity plus and minus are a tint of the button colour instead of a fixed light blue, and the button label is white or near-black, whichever reads on the button, so any colour a shop picks stays readable. Colours a shop has saved are kept.
Fixed
With DiscountWise running, a made-to-order item went into the basket at the product's own price instead of the calculator's price: a sign the calculator priced at $740 was charged $166.50, and a trade customer's $170 plaque $80. The calculator's price now always reaches the basket and the order, also next to DiscountWise 1.0.0.
Add to Quote works with QuoteWise again. PriceWise still looked for QuoteWise's old name (Quotly), so the button never showed. The configured product now goes into the quote basket with the calculator's price and the customer's answers, which QuoteWise 1.0.3 shows in the basket, on the quote, in the emails and on the order the quote becomes (QuoteWise Pro 1.0.5). The button follows QuoteWise's own quote setting and wording, it is the only quote button on a calculator product (QuoteWise's plain one would send the product without the answers), and "Request a quote" for a whole cart carries the configuration too. Add to Quote also sends the quantity from the quantity box in the calculator footer; it always sent 1.
For developers
Two filters for discount plugins: pwcp_base_price (the product price a calculator starts from) and pwcp_price_after_discounts (the calculated price after discounts, at a quantity).
2.5.24 fixed
Fixed
Pressing Enter in a number box hid that box when the calculator shows every field in one card or inline. The customer was left with fewer boxes and, if they were quick, a price for the digits typed before the last one. Enter now works the price out and every box stays on screen.
A required number box left on a value outside its own limits, like a default of 0 when the minimum is 1, counted as filled. The calculator said "All required fields filled", Add to Cart switched on, and the product went in priced at the minimum size. It now counts as empty, Add to Cart waits for a real size, and the server refuses it too.
Typing a number could turn it into a different one. With a minimum of 10, typing 50 gave 100, because the 5 was pulled up to 10 while it was still being typed. The minimum is now applied when the customer leaves the box.
When the price cannot be worked out, the last price no longer stays on screen.
2.5.12 better, 2 security fixes, 1 for developers
Better
PriceWise writes to the PHP error log only when WP_DEBUG is on, so a live shop's log stays clean.
Ready for PHP 8.5: the calculator import no longer calls finfo_close(), which PHP 8.5 deprecates.
Security
Every form field and admin screen address the plugin reads is now unslashed and sanitised before it is used, and the calculator import checks the uploaded file more strictly.
The bundled PDF library (Dompdf) is updated from 2.0.8 to 3.1.6, which fixes known issues in the older version. PDF quotes were re-tested with it.
For developers
Database queries, input handling and output escaping now pass the WordPress coding standards checks.
2.5.08 new, 1 fixed, 1 security fix
New
Charge by the letter or the word. A text field can price what the customer types, per letter or per word, with a set number free, and the count and price update live under the box. Leave it off and a text box behaves exactly as before.
Email and phone fields. Proper boxes that check what is typed and hold Add to Cart until an address or number looks right. They never add to the price, even when a phone number is all digits.
The date field can now ask for a time, a date and a time, or hours on one day. Hours on one day are worked out and can be priced per hour (for example bike or equipment hire), and a time past midnight is read as the next morning.
Fields for certain customer roles only. Tick the roles a field is for (for example a trade or wholesale price) and everyone else never sees it. The check runs on the server too, so a customer without the role cannot reach that price even with a hand-made request.
Works with currency switcher plugins. When a shop uses a currency switcher (CURCY or FOX are tested; WooPayments, WPML and Aelia are built to their published methods) and the visitor picks another currency, the calculator, its badges, the price breakdown, the price grid, the basket, the order email and the printed quote all show the same converted amount. A visitor in the store currency sees no change.
Multi-language shops (WPML and Polylang). A calculator is built once, in the main language, and a translated product shows the same calculator in the visitor's language at the same price. Every word (names, labels, help texts, option names, units, price-grid headings) is listed for translation in the plugin's own screen. Prices, option values and formulas are never translated, so every language is priced exactly the same.
Repeat a set of fields. One field the customer can add more than once, for example "add another window", each copy with its own inputs, each priced and all added into the total. Set the inner fields, the button text, an optional limit on how many, and an optional price for one row.
A file upload field can take more than one file (from 2.4.3): tick it on and set how many, from 2 to 20. Each file is listed on its own and arrives as its own link on the order, the order email and the printed quote.
Fixed
The size limit set on a file field is now the limit the server enforces (from 2.4.3), and moving to the next step of a multi-step calculator no longer replaces an uploaded file's link with its plain name.
Security
A hand-made request could add a product to the basket for less than the calculator's real price, or before the calculator was filled in. Anyone using the browser's developer tools could send a choice as a bare number, add a made-up field to take money off, send a negative or below-minimum number, force the base price in a formula, price one product with another product's calculator, or add the product with no answers at all at its placeholder price. The price is worked out on the server, so the browser was already never trusted, but the server now also prices a choice only when it is a real option, keeps a typed number inside the field's own limits and never below zero, ignores any answer that is not one of that calculator's own visible fields, and refuses Add to Cart unless the calculator has worked out a price, every required field the customer can see is filled, and the calculator belongs to that product. Add to Quote does the same. This also affects version 2.4.2, so every shop should update.
2.4.31 new, 2 fixed
New
A file upload field can now take more than one file. Tick "Let the customer upload more than one file" on the field and set how many it accepts, from 2 to 20. The customer picks or drags several at once, each file is listed on its own with its own remove button, and each one arrives as its own link on the order, in the order email and on the printed quote. Fields stay exactly as they were until you turn it on, so nothing changes on a shop that wants one file.
Fixed
The size limit you set on a file field is now the limit that is enforced. The field settings offered up to 50 MB while the server refused anything over 10 MB, so a customer sending large artwork was turned away with a message that did not match what the page had just promised them. The server now reads that field's own limit, held down to whatever this host actually accepts.
Moving to the next step after uploading a file replaced the file's address with its plain name, so the order could show "logo.png" with nothing to click. The uploaded file is now the only thing that sets that field's value.
2.4.21 fixed
Fixed
Pro is now confirmed against your licence key, with an answer signed by the licence server, instead of a setting stored on the site itself. Nothing changes for a paying site: it keeps every Pro feature if the licence server is slow, unreachable, or the answer cannot be read, and a warning always comes first.
2.4.11 new, 4 fixed
New
The field editor warns while you type when a dropdown, radio or tickbox option has no number after the | sign. An option written as "3000 mm" instead of "3000 mm|3000" counts as 0 in the price, which used to leave a whole calculator sitting at 0.00 with no warning anywhere.
Fixed
Add to Cart did nothing at all on shops that also run Flexible Product Fields. The calculator moves WooCommerce's own button into its footer and keeps it joined to the cart form by the form's id. Flexible Product Fields renames that form after the page loads, so from that moment our button pointed at a form that no longer existed and the click was swallowed in silence, with no message and nothing in the log. The button now looks the form up again at the moment it is clicked, which is the only moment that has to be right, so it survives any plugin that renames the form. The quantity box is re-joined at the same time, so quantities above 1 are no longer lost. Found on a live shop where nothing could be bought at all.
A formula the plugin could not read was still producing a price, and the price was wrong. When a formula failed, the plugin quietly added the field values together and sold at that number. On a real shop a panel worth 95.88 went into the basket at 3,000.00, with nothing said anywhere. A formula that cannot be read now produces no price at all, so the item cannot be bought until the formula is corrected, and a minimum charge or a setup fee can no longer be laid on top of a number nobody worked out. This applies to the price on the product page, the price in the basket and the price on a quote request.
Decimals written with a comma now work. Most of the world writes 0,8 rather than 0.8, and the editor was accepting it while the pricing engine refused it, so the calculator silently priced nothing. Outside brackets you can now write your numbers either way. Inside max(), min(), round() and if() a comma still separates the values, because 0,5 there means two values, so decimals need a dot in those brackets, and the editor now says so in words.
"Formula looks good" was worked out in the browser by a different rule from the one that prices the order, so it appeared over formulas that could not run at all. The message now comes from the pricing engine itself and says what is actually wrong with the formula.
2.4.03 new, 2 fixed
New
A starting price on the product page. A product with a calculator used to show no price at all until the customer chose their options, so anyone arriving from a search engine met a page with no price on it, while the related products underneath all had one. It now shows a starting price such as "From $18.40", which frames the calculator underneath rather than arguing with it. It follows the same "Price on Shop and Category Pages" setting as your shop tiles, so setting that to "Show no price at all" puts product pages back to showing nothing. Shops updating from an earlier version are pinned to the old behaviour and see no change until they choose otherwise.
Settings > General > "Price on Shop and Category Pages". A shop tile cannot show one exact price before the customer has chosen a size, so this decides what it shows instead: a starting price such as "From $18.40", the plain product price, or no price at all. Buyers who find no price tend to leave for a competitor, so a starting price is the new default on fresh installs. Existing shops keep exactly what they had.
Settings > General > "Starting Price Label". The word before the price, so you can use "From", "Starting at", or "ab" for German shops that are required to.
Fixed
Your customer's basket showed a number instead of the option they picked. A line that should have read "Edge banding: Oak banding, all four edges" read "Edge banding: 13". Dropdown fields were saving the price of the choice rather than the choice itself, so nothing further down the line could turn it back into words. It affected the basket, the checkout and the order in your admin, which meant your own paperwork was missing what the customer actually asked for. Radio and tickbox fields were always correct and are unchanged. Prices were never wrong, only the wording, and orders placed before this update keep what was stored at the time.
The quote button on shop and category tiles now matches your theme's own Add to Cart button beside it, instead of forcing its own padding and rounded corners. On a theme with square corners it was the only rounded button on the page.
2.1.21 new, 2 fixed
New
Settings > General > "Titles on Product Pages". A product page already shows the product name, and your calculator can carry its own title, so the two can look like a duplicate. You now choose which one to hide: show both (the new default), hide the calculator title, or hide the product title.
Fixed
Block themes: the page heading was disappearing from every page and post, not just product pages. A rule meant only for product pages had no limit on it, and the stylesheet holding it was loading on every page of the site. Both are fixed. That stylesheet now loads only on shop, product, cart, checkout and account pages.
A brand new install no longer hides every price in your shop. The example calculator created on activation was set to "all products", so PriceWise treated every product as a calculator product and replaced all prices with the quote button, even on products with no calculator. It is now created with nothing assigned to it, so it is still there to open and copy but changes nothing on your shop until you attach it to a product. Sites updating from an older version are not touched.
2.0.05 new, 1 better, 1 security fix
New
A big upgrade from 1.0.0. The highlights:
Real PDF quotes. Download a branded PDF from any order, and optionally auto-attach it to the order emails so customers get it without clicking.
Works in any country. The live price follows your store's currency format (symbol position, comma/dot separators), and every word a customer sees can be typed in your own language from Settings > Text & Labels - no translator plugin needed.
Many ways to price: by size, measurement (area, length, volume, weight), options, quantity price tables, size x quantity grids, typed add-ons, date/booking, per-field rates, or a custom formula - all with live pricing checked on the server.
Show/hide fields by rules, an itemized price breakdown for the customer, editable cart items, secure customer file uploads, order-detail emails, and a usage dashboard.
Better
Supports modern WooCommerce High-Performance Order Storage (HPOS) and block checkout.
Security
Prices are locked server-side (no cart tampering) and the customer file-upload folder is hardened.
1.4.381 new, 2 fixed
New
Order emails can auto-attach the quote PDF. When a customer orders a calculated item, the PDF quote is attached to the WooCommerce order emails, so the customer (and the store owner) get it without clicking anything. There's a new on/off switch under Settings > General ("Attach PDF Quote to Emails"), on by default.
Fixed
PDF rendering polish: the currency symbol now prints correctly (it showed as "?" before, because the built-in PDF font had no rupee glyph - the PDF now embeds a Unicode font), the purple header band is restored, and the header and total rows sit side-by-side like the web version.
The quote "Download PDF" / "View / Print" links are now scheme-relative, so they always match the page (http/https). This stops Chrome's "insecure download blocked" warning on sites viewed over HTTPS while WordPress still emits HTTP URLs (common behind a proxy or in local dev).
1.4.371 new
New
Real PDF quotes. The "Download PDF" button on the order page (and on the order admin screen) now generates and downloads an actual PDF file of the quote - not just a printable web page. It is built with the bundled Dompdf engine and renders your branded quote, including any currency symbol (₨, €, £, etc.). The print-friendly page is still there via the "View / Print" button. If the PDF engine is ever missing, it safely falls back to the printable page.
1.4.361 fixed
Fixed
In the calculator editor, reloading the page while on the Layout tab briefly showed the Basic Info tab before snapping back to Layout. The Layout tab was missing from the server-side list of known tabs, so the page rendered Basic first and the browser corrected it a moment later. Added Layout to that list, so the editor now opens straight to whichever tab you were on, with no flash.
1.4.351 new
New
"Text & Labels" settings tab. Every word your customers see on the calculator - the buttons (Next, Previous, Complete, Calculate), the step counter, the "Price" label, the progress and "fields remaining" messages, the live hints, and the file-upload notices - can now be typed in your own language right in Settings, with no separate translator plugin needed. Leave any box empty to keep the default. This lets the calculator read fully native in any country.
1.4.341 security fix
Security
Hardened the customer file-upload folder. Uploads were already restricted to safe types (images, PDF, Word) with a 10 MB cap, but the folder itself could be browsed. Added guard files (index.html + .htaccess) so the folder can no longer be listed and scripts cannot run from it - a stranger can no longer snoop on customers' uploaded files.
1.4.331 fixed
Fixed
The live total now shows money in your store's own style. Before, the big price that updates as you pick options was always written the US way (symbol on the left, a dot for the decimal, no thousands separator), even on stores set up differently. It now follows the same currency settings as the rest of the plugin - symbol position (left or right, with or without a space), decimal separator, and thousands separator - so the live total matches the option prices, cart, order, and quote in any country.
1.4.321 better, 1 fixed
Better
Reduced the empty space above and below the card on desktop (top from 40px to 20px, bottom from 50px to 24px), so it sits closer to the surrounding content.
Fixed
On phones the calculator card had a 10px margin on its left and right, which left it looking pushed to one side. Removed the left/right margin so the card now spans the full width and lines up with the rest of the page.
1.4.301 fixed
Fixed
Editing a configured item from the cart now restores every field correctly. The restore was matching the field-step wrapper as if it were the input, which overwrote every colour/option's value (so the wrong swatch came back) and, on file-upload fields, threw a browser error that silently aborted the whole restore - leaving the file box empty and the price showing 0. The restore now targets only the real inputs, so all saved choices, the uploaded file and the price come back exactly as they were.
1.4.281 fixed
Fixed
Clicking "Next" (or "Back") rapidly in the step-by-step layout no longer breaks the form. Fast clicks during a slide used to overlap and leave several steps showing at once; the buttons now ignore extra clicks until the current slide finishes. A safety timer also guarantees navigation can never get stuck.
1.4.271 change
Changes
Improvement - Redesigned the printable quote into a proper branded document: a full brand-colour header band with your business name, a "Quote" badge and the order number/date; a "Prepared for" customer card with the billing address; a clean striped item table; and a brand-colour total box. The header/accent colour follows your Settings > Design brand colour (the same one the calculator uses), so it stays on-brand and updates if you change it. The uploaded-file link, the print/save-as-PDF button and print-friendly styling (including printing the coloured band) are all kept.
1.4.261 fixed
Fixed
No more "7 then 6" flash on the step counter. When a step is hidden by a show/hide rule, the counter is kept hidden for the split second until the script has worked out the real visible count, then shown - so the shopper only ever sees the correct number (e.g. "1 of 6"), never the wrong one first.
1.4.251 fixed
Fixed
Step counter now skips hidden steps in the step-by-step layout. When a show/hide rule hides a step, the counter used to jump (e.g. "2 of 7" straight to "4 of 7"); it now renumbers to the visible steps only ("2 of 6" then "3 of 6"), and the progress bar, the Back/Next buttons and the final Calculate step all follow the visible steps too.
1.4.241 better
Better
More breathing room in the field editor popup. The "Required Field", "Show only if" and its help text were stacked too tightly; they now have clearer spacing and the help text is easier to read. Only the field editor popup is affected.
1.4.231 new, 1 fixed
New
The file upload box now shows a clear status while a file uploads: a spinner with "Uploading…", then a green "Uploaded" tick when it is safe to add to cart.
Fixed
Uploaded files are now openable from the cart and order. Before, a file field could save the file's name as plain text (so the merchant saw "design.jpg" but had no way to open it) - this happened when "Add to cart" was clicked before the upload finished. The file field now waits for the upload to finish before it counts as complete, always stores the real file, and shows it as a clickable link in the cart, the order (customer + admin), the order email and the printable quote.
1.4.221 fixed
Fixed
On the admin order screen, the calculator's internal values (calculator ID, the stored calculated price, and the calculation timestamp) no longer show as blank-label rows under the line item. They are now hidden there, the same way they already are on the customer's order page and the printable quote. The readable selections (Colour, Size, Extras, etc.) and the "Calculator Used" link are unchanged.
1.4.211 fixed
Fixed
The cart and the order now show readable choice labels instead of raw codes. A picked colour used to show as "Colour: 5" and an add-on as "Extras: opt_0"; they now show "Colour: Red" and "Extras: Gift wrap". Radio options now submit the same way checkboxes/add-ons do, and both the cart line and the saved order map the stored option back to its label. Pricing is unchanged.
1.4.201 new
New
Field spacing setting (Settings > Design). Choose how much vertical space sits between fields - a preset (Compact / Comfortable / Spacious) or an exact pixel value that overrides the preset. Applies to the all-in-one and inline layouts. Default "Comfortable" keeps the current spacing, so existing calculators are unchanged.
1.4.191 change
Changes
Improvement - The live price now updates faster. The new amount shows the moment the server replies instead of waiting for a fade animation, and the wait after you change a field was shortened from 200ms to 150ms.
1.4.181 fixed
Fixed
The size x quantity price grid now uses the plugin's own dropdowns instead of the browser's native ones. On some themes the native dropdown turned solid blue when opened (the theme was recolouring it); the custom dropdowns match the plugin's other dropdown fields and are not affected by theme/select styling on any site.
1.4.171 fixed
Fixed
Live readouts now slide into view instead of popping in and jumping the card's height. This covers the measurement readout ("= 450 m3"), the size x quantity grid price readout, and the date range "= 3 night(s)" readout. Only the first appearance animates; live updates as you change a value stay instant.
1.4.152 fixed
Fixed
The price breakdown now slides open smoothly instead of popping in. When the last field was filled and the breakdown appeared, the footer used to jump open in a single frame. It now eases open over about a quarter second.
Centred the white tick inside a selected add-on checkbox. It was sitting slightly high and to the right of the box; it now sits dead centre.
1.4.131 fixed, 2 changes
Fixed
Editing a configured item from the cart now re-ticks the chosen checkbox/radio options, not just the text/number/dropdown values. The pre-fill (and step-to-step restore) used to match the saved value only against an option's token, so options stored by price or label came back un-ticked. It now matches token, price, or label.
Changes
Improvement - Colour and image swatches now show as a clean grid of tiles - the colour/image fills the tile, with the name and price beneath and a ring + tick on the selected one. Before, they were large stacked cards with a small swatch that turned solid purple when picked (hiding the colour).
Improvement - Measurement fields now use tidy inline input boxes (e.g. [Width] x [Length] = result) with the dimension name as a placeholder, instead of bare unstyled numbers floating next to a stray x.
1.4.121 better
Better
Removed the floating grey tooltip ("Complete all N required fields to enable this") that popped over the Add to cart button and overlapped the footer text. It just repeated the footer's progress line, so the greyed-out button plus that line now carry the message on their own.
1.4.113 fixed
Fixed
Smoother step transitions. Moving between steps no longer clips ("cuts") the current field while the card resizes - the old field now fades out first, then the height changes, then the next field fades in. Short single-field steps also share a stable minimum height, so the card no longer jumps between steps like Size and Quantity.
The price chip on a selected radio/checkbox option now shows as a light pill instead of blending into the option's highlight colour, so the "+price" stays readable once the option is picked.
The Add to cart button no longer jumps on hover. The theme's hover "lift" was firing without easing (the button's transition didn't cover transform); the button now stays put and only its colour/shadow change smoothly.
1.4.101 better
Better
Removed the "We need this to calculate your price" prompt that used to sit under every required field. The required asterisk on the label, the "X of N required fields complete" progress line, and the disabled button already make it clear, so the extra red box was redundant (and looked like an error on a field you hadn't touched yet).
1.4.91 new
New
"Buy now" purchase button (per calculator). In a calculator's Settings tab, set Purchase button to "Buy now" and the button adds the configured item and sends the customer straight to checkout, skipping the cart - ideal for made-to-order products bought one at a time. Default stays "Add to cart", so existing calculators are unchanged. The price is still worked out and checked on the server, and it works on both simple and variable products and on the block or classic checkout.
1.4.81 fixed
Fixed
The "Edit options" link now shows on the block-based cart, not just the classic cart. WooCommerce's Cart block removes links from item details, so the old link was being silently dropped there. PriceWise now sends the edit URL through the Store API and a small script adds the clickable link to each configured line. The classic cart is unchanged.
1.4.71 fixed
Fixed
Required measurement, price-grid and date fields now count as "complete" as soon as the customer fills them in. Before, these field types updated the live price but never told the form they were done, so the progress meter could stick at "0 of 1" and the Add to cart button stayed disabled even though everything was filled. Affected any calculator whose required field was a measurement (area/length/volume/weight), a size x quantity grid, or a date range.
1.4.61 new
New
Date / booking field type. Choose "single date" (recorded with the order, no price) or "date range" (priced per night or per day). The customer picks the dates; the server works out the number of nights/days and the price. Price a range with "Price per unit" (e.g. 50 per night) or reference the field in a formula. Opens up rentals, hire and booking/deadline use cases.
1.4.51 new
New
"Price per unit" on number, slider and measurement fields. Enter a rate (e.g. 4.50 per m²) directly on the field and the price is worked out as the field's value x that rate - no formula needed. Applies only in the no-formula case (Formula tab left empty); a custom formula always takes over. A blank or zero rate means no rate (the field adds its plain value, as before), so existing calculators are unaffected.
1.4.41 new
New
Itemized price breakdown under the calculator price. Shows the base/configured price, each selected add-on, any minimum-charge top-up and setup fee, then the total. Appears automatically only when there is more than one line (i.e. when there are extras). The lines are computed on the server and always sum to the real total.
1.4.31 new
New
Guided setup on the Templates page. Answer a few simple questions (name, how it's priced, your rate and unit) and PriceWise builds a ready-to-edit calculator for you. Covers pricing by area, by length, by quantity (bulk price breaks), by a size x quantity grid, or by options. It seeds sensible example data you then fine-tune. No formula writing needed to get started.
1.4.21 new
New
Shipping by calculated weight/dimensions for made-to-order products. In a calculator's Settings tab you can set a "Shipping weight formula" (same formula style as pricing, e.g. area * 0.45) and/or a "Shipping dimensions from field" (a measurement field key). PriceWise then sets the cart line's weight and width/length/height so WooCommerce and weight/dimension-based shipping plugins price big items (banners, large prints) correctly. Both are optional; blank = use the product's normal weight/size. Uses the store's weight and dimension units.
1.4.11 new, 1 fixed
New
Show/hide field rules can now combine several conditions with && (and) and || (or). AND binds tighter than OR. Examples: "material == mesh && size > 10", "type == flyer || type == brochure".
Fixed
Rules that use "<" (less than) now save correctly. They were being mangled on save because the text sanitizer treated "<" like an HTML tag; show/hide rules now use a condition-aware sanitizer (output is still escaped).
1.4.01 new
New
"Price grid" field type (size x quantity). The customer picks a size and a quantity from two dropdowns and the exact total price is looked up from a grid you define in the field's Options box (first line = the quantity choices, each next line = a size then its price per quantity). This is the classic print-shop pricing table. The chosen size/quantity labels are submitted and the price is looked up on the server, so it can't be tampered with. Tip: turn the WooCommerce quantity selector off for these products, since the grid price already covers the chosen quantity.
1.3.02 new, 2 changes
New
Variable product pricing modes (Settings tab). Each calculator chooses how it combines with a variable product's own (per-variation) price: Replace (calculator is the whole price), Add on top (variation price + calculator), or expose the variation price to the formula as base_price (e.g. base_price + area * 10). The same rule drives the live price and the cart price, and the price is always recomputed on the server.
Colour and image swatches for radio and checkbox fields. Choose Option style = Text / Colour / Image, and add an optional 3rd part to each option line (Label|Price|Swatch) where Swatch is a hex colour (Red|5|#e23b3b) or an image URL (Oak|10|https://site.com/oak.jpg). For image swatches, a "Choose images from library" button lets you pick from the WordPress media library instead of pasting URLs. Customers see clickable colour circles or image tiles; the price logic is unchanged.
Changes
Improvement - The live price updates immediately when the customer switches a variable product's variation.
Improvement - Editing a variable product from the cart now pre-selects the chosen size/colour on the product page (passed as attribute_* query args), and the "Edit options" link now also appears on the block-based cart/checkout (via the Store API), not just the classic cart.
1.2.41 new
New
Optional Quotly integration. When the Quotly plugin is active, an "Add to Quote" button appears under the calculator. It pushes the configured product, with its server-checked price and the customer's chosen options, into the Quotly quote basket, and makes the configured price the quote line's starting price. Completely inert when Quotly is not installed. The price is always recomputed on the server, never trusted from the browser.
1.2.310 new, 3 changes
New
Measurement field: charge by area (width x length), a single length, volume (width x length x height), or weight. The size is computed on the server so it can't be changed in the browser.
Waste/overage percentage and round-up to whole units on measurement fields, so a fraction of a box or roll is never sold.
Quantity price breaks: a table where the per-unit price drops as the quantity rises. Type the rows in or import a CSV (min,max,price).
Add-ons field: a list of optional extras the customer ticks. Each adds a flat fee, a fee per unit, a fee per unit of size, or a percentage. Amounts and types live on the server, so the price stays tamper-proof. A negative percentage works as a discount.
Minimum charge and one-time setup fee, applied after the base price (Settings tab). The minimum only kicks in once there is a real price.
Edit a configured item from the cart: an "Edit options" link returns the customer to the product with every answer pre-filled. Saving replaces the original line instead of adding a duplicate. Works on the classic WooCommerce cart.
Layout tab: drag fields to reorder them, and set each field to full, half, or third width on a responsive grid.
Display style choice per calculator: step-by-step, all-in-one, or inline (no card).
The WooCommerce Add to Cart button and a styled quantity stepper now sit inside the calculator card, with no flash on load.
Two more one-click starter templates: banner printing and bulk printing.
Changes
Improvement - Field width and every other field setting now save reliably (fixed an ID-matching bug that dropped updates).
Improvement - Removed unused admin CSS/JS and corrected asset paths that logged 404s in the browser console.
Pricing order - The price is now worked out as: formula, then add-ons, then minimum charge and setup fee.
1.1.09 new, 2 fixed, 1 security fix
New
Formula functions: if, min, max, round, ceil, floor, abs, sqrt, pow, plus comparisons (> < >= <= == !=) and and/or/not. Set minimum charges, bulk discounts, and round up to whole units.
Price-by-size field type: charge by a size range (for example, curtains by drop length).
Show/hide fields based on another answer (conditional logic).
File uploads are now saved on the server and linked on the cart and order. Previously the uploaded file was not kept.
Order email alerts with the customer's choices and price (Settings > General).
Usage reports on the dashboard: quotes calculated, average quote, last 30 days, busiest calculators (opt-in recording).
Printable quote page (save as PDF) for the store owner and the customer.
Formula toolbar buttons for the new functions and comparisons.
Fixed
Checkbox options now add their price to the total (previously they added nothing).
Corrected the formula syntax note: field keys are used directly, with no braces.
Security
The line price is now always recalculated on the server at add-to-cart. The price sent by the browser is no longer trusted, so customers can't change it in dev tools.
1.0.0131 new, 45 better, 15 for developers
New
Initial release of PriceWise Calculator Pro
Tabbed calculator builder interface with four main sections: Basic, Formula, Fields, and Settings tabs
Basic Tab for calculator name, description, and assignment strategy configuration
Formula Tab for pricing formulas and calculation setup with custom formula engine
Fields Tab to add and configure input fields with 8 different field types
Settings Tab for publication status, priority, and display options
Modern slider-based frontend interface with step-by-step navigation
Progress tracking for multi-step calculators showing current step (e.g., "1 of 5")
Complete WooCommerce integration with seamless cart functionality
Text input fields for names, custom text, and string inputs
Number fields with min/max validation for quantities and measurements
Dropdown select fields for single-choice options
Checkbox fields for multiple selections and add-ons
Radio button fields for exclusive single choices
Slider fields for visual number selection
Textarea fields for longer text input and special instructions
File upload fields for customer file submissions
Custom formula engine supporting mathematical operators (+, -, *, /)
Formula variables using the field key directly (for example: length * width) for dynamic calculations
Parentheses support for complex order of operations in formulas
Multi-step calculator support with NEXT and PREV navigation buttons
Live price calculation with real-time updates as customers make selections
Persistent footer showing calculated price throughout the process
Global Calculator assignment strategy that automatically applies to all WooCommerce products
Product Calculator assignment strategy for specific individual products via Product Data tab
Category Calculator assignment strategy automatically applied to all products in selected categories
Priority system where Product Calculator > Category Calculator > Global Calculator
Export functionality for backing up calculator configurations
Import functionality for restoring or migrating calculators between sites
Calculator duplication feature for quickly creating similar calculators
Comprehensive settings panel with extensive customization options
15+ color customization controls for complete branding control
Enhanced color picker with both visual selection and hex code input options
Header background color customization
Title text color customization
Calculator background color customization
Button color customization with primary and hover states
Progress bar color customization
Input field color customization
Border and accent color customization
Layout options for optimal display across different themes
Calculation settings for precision and formatting control
Display preferences for hiding/showing various elements
Admin dashboard with calculator overview and quick statistics
Dashboard showing total calculators, active calculators, and recent activity
Quick action buttons for creating new calculators from dashboard
Field manager with comprehensive validation rules
Required/optional field settings for form validation
Minimum and maximum value validation for number fields
Character length validation for text fields
File type and size restrictions for upload fields
Custom validation error messages
Database optimization with efficient query structure
Prepared statements for all database queries to prevent SQL injection
Database indexing for improved query performance
Caching system for frequently accessed calculations
Nonce verification on all forms and AJAX requests
Capability checks ensuring only authorized users can manage calculators
Input sanitization using WordPress functions (sanitize_text_field, sanitize_textarea_field, etc.)
Output escaping with esc_html, esc_attr, esc_url for XSS prevention
SQL injection prevention using $wpdb->prepare() for all queries
CSRF protection on all form submissions
XSS prevention throughout the entire codebase
Translation ready with complete .pot file included in languages folder
All strings wrapped in translation functions (__(), _e(), esc_html__(), etc.)
Compatible with WPML, Polylang, Loco Translate and other translation plugins
RTL (Right-to-Left) language support for Arabic, Hebrew, and other RTL languages
Fully responsive design optimized for all devices and screen sizes
Mobile-first approach with touch-friendly interactions
Tested and optimized for iOS devices (iPhone, iPad)
Tested and optimized for Android devices (phones and tablets)
Tablet-optimized layouts for medium screen sizes
Desktop-optimized admin interface for efficient workflow
WooCommerce cart integration with custom pricing functionality
Custom price replaces product base price in cart
All calculator selections saved with order for reference
Customer selections visible in order details for admin review
Admin can view complete calculator data in order management screen
Calculation logging system for debugging and analytics purposes
Optional analytics tracking for calculator usage patterns
Conversion tracking for completed calculations
Popular field tracking to identify most-used options
Drop-off point identification to optimize calculator flow
Uninstall data management with user consent option
Clean removal option that deletes all plugin data from database
Option to preserve data for future reinstallation
Complete database cleanup on uninstall including custom tables
System requirements checker that runs on plugin activation
WordPress version compatibility check (5.8 or higher required)
PHP version compatibility check (7.4 or higher required)
WooCommerce installation and version check (5.0 or higher required)
MySQL version compatibility check (5.6 or higher required)
Admin notices system for important updates and information
Dismissible notices for non-critical messages
Persistent notices for critical requirements that must be addressed
Auto-save functionality to prevent data loss during calculator creation
Automatic saving of calculator progress in admin interface
Draft mode for work-in-progress calculators
Recovery of unsaved changes after browser crash or accidental close
Search functionality for finding calculators quickly by name or description
Filter calculators by status (Active, Inactive, All)
Filter calculators by assignment type (Global, Category, Product)
Sort calculators by name, date created, or last modified
Bulk actions support for efficient calculator management
Bulk activate multiple calculators at once
Bulk deactivate multiple calculators at once
Bulk delete selected calculators with confirmation
Bulk export selected calculators for backup
Grid view for visual calculator management with preview cards
List view for detailed table-based calculator management
Toggle between grid and list views with single click
View preference saved per user in WordPress user meta
Beautiful slider-based customer interface for smooth user experience
Step-by-step guided navigation system for complex calculators
Progress indicator showing current position in calculator flow
Real-time price updates in persistent footer display
Field validation with helpful inline error messages
Mobile-optimized touch interactions and gestures
Smooth CSS transitions between steps for better UX
Loading states and visual feedback during calculations
Clean tabbed admin interface for easy navigation
Intuitive "Add Field" button with instant field creation
Visual differentiation between required and optional fields
Formula validation with helpful error messages and syntax checking
Calculator status toggle (Active/Inactive) with visual indicator
Priority system (1-100) for controlling which calculator displays when multiple are assigned
Quick edit action for fast modifications without full page reload
Duplicate action for creating similar calculators quickly
Delete action with confirmation dialog to prevent accidents
Hide quantity selector option on product pages when calculator is active
Calculator displays in place of standard WooCommerce price display
Better
Compatible with popular WordPress themes (Astra, OceanWP, Storefront, GeneratePress, Neve, Kadence)
Compatible with popular page builders for basic integration (Elementor, Beaver Builder, Divi)
Works with standard WooCommerce product types (Simple, Variable)
Tested extensively with WordPress 5.8 through 6.7
Tested extensively with WooCommerce 5.0 through 10.0
Tested with PHP 7.4 through 8.2 for maximum compatibility
Zero PHP errors or warnings in production environment
Zero JavaScript console errors in all major browsers
Version2.5.0Updated18 Oct 2026WordPress5.8+, tested to 7.1WooCommerce6.0+, tested to 11.1PHP7.4+
2.5.03 new
New
Product for Several Products. Lemon Squeezy sells one product per payment, so an order with different products was sold as one of them at the order's total: Lemon Squeezy's email showed that product's picture at the price of all of them, its order page offered only that product's files, and its invoice listed only that product. Now you can choose your own product for these orders under WooCommerce, Settings, Payments, Lemon Squeezy, named "Order" with your logo and no files, and Lemon Squeezy's email, order page and invoice show that product with the order's total, while the receipt lists every item. Subscriptions are always sold as themselves. If Lemon Squeezy refuses the checkout with your product, the order is sold on its main product, so it never stops a payment. Asked for by a shop owner on 18 October.
For an order with different products, the button in Lemon Squeezy's receipt email reads "View your order" and opens the order in your shop, where every file downloads, instead of Lemon Squeezy's order page, which only has the files of one product.
For developers: wcls_order_variant filters the Lemon Squeezy variant an order of different products is sold on.
Earlier versions
2.4.21 new, 1 fixed
New
For developers: wcls_receipt_lists_items decides whether the items are listed (by default when the order holds more than one item), and wcls_receipt_note changes the whole note.
Fixed
Lemon Squeezy's receipt for an order with several items read like one item at the price of all of them. Lemon Squeezy has no cart, so the plugin sends the whole order as one payment, built on the main product at the order's total, and the receipt shows that one product. When an order holds more than one item, the thank you note on Lemon Squeezy's receipt email now lists every item with its quantity and price, plus any discount, shipping, fee or tax, so the buyer sees what the amount is for. An order of one item gets the same receipt as before. If Lemon Squeezy ever refuses the list, the checkout is made again without it, so it never stops a payment. Reported by a shop owner on 17 October.
2.4.15 fixed
Fixed
Licence key emails on every shop told the buyer "go to WooCommerce, then Lemon Squeezy, and paste this key into the License & Updates box". That line was written for buyers of this plugin and is wrong for everything else a shop sells. It is gone. A shop that wants a line under the key can set its own with the new wcls_license_email_note filter.
Clicking "Register Webhook on Lemon Squeezy" a second time made a second webhook, and two webhooks for one site send every event twice. The button now updates the webhook your store already has (its address, events and signing secret) and removes extra copies, so each event arrives once. A webhook still set to the free version's address is moved to the Pro one. After you click Regenerate on the signing secret, clicking Register sends the new secret to Lemon Squeezy too.
"Read Guide" on the Lemon Squeezy settings page opened a Lemon Squeezy page that no longer exists. It now opens this plugin's documentation.
"Contact Support" on the same page opened Lemon Squeezy's help center. It now opens this plugin's support page.
The "Documentation" link on the Plugins screen opened Lemon Squeezy's documentation. It now opens this plugin's.
2.4.04 new, 4 fixed, 1 change
New
WooCommerce Subscriptions. Sell WooCommerce Subscriptions products and take the payments with Lemon Squeezy. Lemon Squeezy charges every renewal by itself, and each one is recorded in WooCommerce Subscriptions as a renewal order, paid, so WooCommerce Subscriptions fires its usual hooks (woocommerce_subscription_renewal_payment_complete and the others). Licence plugins, memberships and anything else built on those hooks now work with Lemon Squeezy as with any other gateway. Asked for by a shop owner on 9 October.
Both ways round. A renewal that fails at Lemon Squeezy puts the subscription on hold with a failed renewal order, and a payment recovered later pays that same order and makes it active again. A pause, a cancellation, a cancellation taken back and the end of a subscription at Lemon Squeezy change the subscription in WooCommerce, and the next renewal date follows Lemon Squeezy. A subscription suspended, reactivated or cancelled in WooCommerce, by you or by the customer, is paused, resumed or cancelled at Lemon Squeezy. If Lemon Squeezy cannot be reached, the subscription gets a note saying what to do.
Sync Products also remembers each variant's billing schedule, so the checkout does not have to ask Lemon Squeezy again.
For developers: wcls_wcs_{event} actions run with the WooCommerce subscription for every Lemon Squeezy subscription event (the wcls_{event} actions still run with the parent order), and wcls_first_payment_discount filters the one-time discount sent to Lemon Squeezy.
Fixed
WooCommerce coupons on subscriptions came off every renewal. Lemon Squeezy keeps a checkout's price for all renewals, and the plugin sent the price after the coupon. A coupon now comes off the first payment only, like it does in WooCommerce: the checkout carries the full price and the coupon travels as a one-time Lemon Squeezy discount, used once and deleted after the payment. To keep a coupon on every renewal, choose "Every payment" under "WooCommerce Coupons on Subscriptions". Asked about by a shop owner on 11 October.
Refunds made in WooCommerce never reached Lemon Squeezy. The plugin sent them to an address Lemon Squeezy does not have, so they failed. They now go to the right one, and a WooCommerce Subscriptions renewal order refunds its own renewal payment. Amounts are rounded to the cent: 19.99 used to go out as 19.98.
A variation of a WooCommerce Subscriptions variable product now finds the Lemon Squeezy variant set on its product.
An answer from Lemon Squeezy with no content, as when something is deleted, was reported as an error.
Changes
Note - What can be sold this way: one subscription per order, linked to a Lemon Squeezy subscription variant that renews on the same schedule (yearly with yearly, monthly with monthly). Lemon Squeezy charges the same amount every time, so a sign-up fee, a free trial, a fixed renewal day or one-time products in the same order are not supported; a coupon on the first payment is. The checkout does not offer Lemon Squeezy for a cart it cannot charge the right way, and the product's edit screen says whether a subscription product is ready, or why not.
2.3.12 new, 1 fixed, 1 change
New
A buyer who pays an old link after the order was already paid, for example from a reminder, is not recorded as a second sale: the order stays as it is and gets a note naming the second Lemon Squeezy order, so you can refund it there. That refund is noted on the order without touching its own payment.
For developers: wcls_checkout_expiry_seconds now defaults to seven days and also receives the order.
Fixed
The button in Lemon Squeezy's cart reminder emails led to an error page. When a buyer leaves the checkout without paying, Lemon Squeezy sends up to three reminder emails over three days (Settings, Recovery in Lemon Squeezy), and their "Take me to my order" button opens the payment link the plugin made for the order. That link stopped working after 30 minutes, long before the first reminder arrived. It now works for seven days, so the reminders bring buyers back to their order. The overlay's Try Again uses the same link and keeps working too. Reported by a shop owner on 9 October.
Changes
Note - An unpaid order that WooCommerce cancelled in the meantime (it does this after the stock hold time when stock is managed) is marked paid as usual when the buyer pays from a reminder.
2.3.05 new, 2 fixed, 1 change
New
Skip the Checkout Page. For digital products the WooCommerce checkout page is a step without a purpose, because Lemon Squeezy asks for the email and card itself, and every extra step is a chance for a buyer to leave. Turn on "Skip the Checkout Page" under WooCommerce, Settings, Payments, Lemon Squeezy, and buyers go from the cart straight to Lemon Squeezy, or the overlay, through a short "Taking you to secure payment" page that needs no click. Every way into the checkout leads there: the cart button, a mini cart, a theme's own button. Asked for by a shop owner on 7 October.
The order is made from the cart the same way WooCommerce's checkout makes it, with coupons, fees and taxes, and the buyer's email and name come back from Lemon Squeezy with the payment and are written onto the order before it is marked paid, so WooCommerce's emails and downloads reach the buyer. A logged-in buyer's saved details are used straight away. A guest's country is not guessed: Lemon Squeezy works it out itself.
A buyer who leaves Lemon Squeezy without paying comes back to a full cart, Back from Lemon Squeezy returns to the cart instead of sending them on again, and paying again reuses the same order instead of making a new one.
The browser that paid sees its thank you page without being asked for the order's email, also after the ten minutes WooCommerce gives a guest, as buyers who used the checkout page do. Other browsers are still asked.
For developers: wcls_skip_checkout decides whether a cart skips the checkout page, and wcls_direct_checkout_order_data changes the order made from the cart.
Fixed
Overlay mode never opened the Lemon Squeezy checkout on block themes. When the checkout page uses WooCommerce's Checkout block on a block theme, the default for new shops, WordPress put the order payment page through its text formatting, which broke the page's script, and buyers saw "Opening secure payment form..." with nothing happening. The script is now a file WordPress leaves alone, and the overlay opens.
On the overlay, Cancel for an order sent from the cart goes back to the cart instead of the checkout page.
Changes
Note - A cart that needs shipping, a free cart, a guest when the shop needs an account to check out (guest checkout off, or a plugin such as a membership plugin asking for one), a guest whose coupon is limited to certain emails or to a number of uses per buyer, and a cart with no product linked to Lemon Squeezy keep the normal checkout page. Buyers who skip the page cannot pick another payment method on the way, and anything only the checkout page asks for, such as a terms checkbox or extra fields, is skipped with it.
2.2.04 new, 3 fixed, 1 change
New
An image for orders with several products. When one order held different products, the Lemon Squeezy checkout showed the image of only one of them, so the buyer saw one product while paying for several. Under WooCommerce, Settings, Payments, Lemon Squeezy, "Image for Several Products" now shows your Lemon Squeezy store logo, or the image of one of your Lemon Squeezy products, whenever one order holds different products. Two lines of the same product still count as one. Asked for by a shop owner on 5 October.
An image never stops a payment. If Lemon Squeezy refuses a checkout that carries an image, the plugin asks again without it and writes a note to the log.
Moving up from the free version is now safe. The free plugin steps aside when Pro runs, and until now Pro started empty: no API key or store, no product linked to Lemon Squeezy, and Lemon Squeezy kept sending payments to the free plugin's webhook address, which no longer answered, so paid orders stayed unpaid. Pro now brings the settings, every product link and the Lemon Squeezy order numbers over by itself on its first page load, answers the old webhook address with the same secret, and marks orders the free version sent to Lemon Squeezy as paid. A shop that had already set Pro up with its own API key keeps all its Pro settings.
For developers: the wcls_checkout_data filter listed in the readme now really runs, just before the checkout is sent to Lemon Squeezy. Two new filters: wcls_checkout_media changes the images sent, and wcls_checkout_media_hosts the servers whose images the checkout shows (only Lemon Squeezy's own by default).
Fixed
A payment Lemon Squeezy delivered twice, for example a retry, was recorded twice: a second "Payment completed" note on the order and the wcls_order_created hook running again. It is now recorded once.
A checkbox on the gateway settings screen looked empty right after you ticked it, until you clicked somewhere else.
On a phone, the setting names on the gateway settings screen were squeezed into a narrow column.
Changes
Note - Lemon Squeezy's checkout only shows images kept on Lemon Squeezy's own servers. An image from your own website would leave an empty space where the product image belongs, so the setting offers your store logo and your product images from Lemon Squeezy, and "Refresh from Lemon Squeezy" reads them again after you change them there.
2.1.54 fixed
Fixed
Subscription renewals never reached the order. The subscription_payment_success, subscription_payment_failed and subscription_payment_recovered events carry a Lemon Squeezy invoice, not the subscription, and the plugin looked the order up by the invoice ID. It never matched, so the renewal note, the order status and the wcls_subscription_payment_success, wcls_subscription_payment_failed and wcls_subscription_payment_recovered hooks never ran. The lookup now uses the subscription ID inside the invoice, so all three work on every renewal. Reported by a customer on 24 September.
A payment event could have replaced the saved subscription ID with an invoice ID, and blanked the plan, status and next renewal date shown on the order. A payment event now only updates the subscription ID and the card, and leaves the rest to subscription_updated.
The renewal order note showed the invoice ID as the subscription ID and "N/A" for the next renewal. It now shows the subscription ID, the invoice ID and the amount, says whether it was the first payment, a renewal or a plan change, and gives the next renewal date once Lemon Squeezy has sent it.
A recovered payment no longer moves a completed order back to processing. Only an order held for the failed payment is restored.
2.1.41 fixed
Fixed
Follow up to 2.1.3. If a payment ever arrived without the order key, 2.1.3 refused it, which would have left a real payment sitting unpaid. It now falls back to the amount instead: the payment is accepted when it matches the order total to the cent, and a note is written to the log. Nothing is lost by this, because paying somebody else's total in full gains an attacker nothing. Your shop keeps taking money in every case.
2.1.31 fixed, 1 change
Fixed
Security. When Lemon Squeezy told the plugin a payment had happened, the plugin trusted the order number inside that message and marked that order paid. The message signature was checked correctly, but a signature only proves the message came from Lemon Squeezy, not that the payment belongs to that order. Since Lemon Squeezy checkout links let anyone add their own custom data, someone could pay for a cheap item and have a different, larger order marked paid instead. The plugin already sent WooCommerce own secret order key with every checkout, it simply never read it back. It now checks that key before marking anything paid, and also refuses orders that were placed with a different payment method. Please update.
Changes
Note - Payments themselves are unaffected. The amount paid is compared with the order total and a difference is written to the log only, never blocked, because a discount code can explain it and a shop must never stop taking money.
2.1.22 fixed
Fixed
Sync Products stopped at 10 products. Lemon Squeezy sends its lists 10 rows at a time unless you ask for more, and the sync asked once and kept whatever came back, so a store with 11 products always lost the 11th and a store with 30 only ever saw 10. It now asks for 100 at a time and follows the page count Lemon Squeezy reports, so every product comes through however many you have. Reported by a customer on 19 August.
The same limit applied to variants. A product with more than 10 variants only synced the first 10 of them. It now pages through all of them.
2.1.12 new, 3 fixed, 1 change
New
The licence key field now also appears on the gateway settings screen, not only on the Lemon Squeezy settings page, so you meet it on whichever screen you open first.
A reminder with an "Activate Now" button until the licence is activated, and the plugin row now shows whether updates are switched on.
Fixed
Sync Products returned "0 products, 0 variants" even when the store had products. The store filter was being stripped out of the API request, so Lemon Squeezy was asked for products using a filter it did not recognise. Reported by a customer on 18 August.
The plugin row was showing "Settings" twice.
New checkout card icons. The old image was a JPEG, so every logo sat in a white box on dark checkouts. It is now a transparent SVG that stays sharp on any screen and any background.
Changes
Note - Payments never depend on the licence. The gateway keeps taking money whether or not a key is activated. The licence only controls one-click updates.
2.1.01 new
New
Licence keys and one-click updates. Activate your key and new versions arrive on the Plugins screen like any other plugin.
2.0.31 new
New
A "Checkout Language" setting, so you can force the Lemon Squeezy checkout to a language instead of letting it follow the customer's browser.
2.0.21 fixed
Fixed
An order bump or add-on placed first in the order could stop checkout. The gateway now anchors to the mapped item with the highest line total, so extra unmapped items never block a payment.
Version1.0.4Updated25 Sep 2026WordPress6.0+, tested to 7.1WooCommerce7.0+, tested to 11.1PHP7.4+
1.0.43 fixed, 1 change
Fixed
With the free plugin at 1.0.1 or later, most Pro features stayed off even with a valid licence. Your own form questions, the target price box, private quote links, PDF downloads, quote expiry and reminders, and the message thread did not show, and a Pro user still saw the "Get the Pro version" box on accepted quotes. The free plugin now finds every Pro feature.
An order made from a guest's quote was put under the account of the staff member who accepted it, so the guest was asked to log in before Pay Now worked. It stays a guest order now, and Pay Now works without an account.
Sending a message on a quote ended on an error page, and the other side was never emailed. Both work now.
Changes
Tested up to WordPress 7.1 and WooCommerce 11.1.
Earlier versions
1.0.32 better, 2 changes
Better
A role set to "quote only", or a role that hides prices while the quote button shows, can no longer buy the product by any route: not from the shop page, not with a direct add-to-cart link, not through the block cart's Store API.
Hidden prices are now also left out of the product data Google reads and out of WooCommerce's public Store API, not only off the page.
Changes
The shop page shows a link to the product's quote button instead of an empty space.
These need the free plugin at 1.0.2 or later. With an older free version, Pro works as before.
1.0.12 fixed, 1 change
Fixed
Typing a target price on a quote line ended the request with a fatal error. The setter called a basket class that does not exist; it now uses the free plugin's basket, which is also what "Request again" reads back.
The plugin header and readme asked for a free plugin slug that was never published, so WordPress refused to activate Pro after purchase. Both now name devtonic-quote-requests-for-woocommerce.
Changes
Tested up to WordPress 7.1 and WooCommerce 10.7.
1.0.0First release
Changes
Initial release.
Convert accepted quotes to paid WooCommerce orders with a Pay Now link.
Private share links for viewing and paying without an account.
PDF quotes attached to emails and downloadable.
Quote expiry dates, reminders, and automatic expiry.
Price negotiation with a customer message thread and suggested price.
Pro version1.0.1Updated16 Oct 2026WordPress5.8+, tested to 7.1WooCommerce5.0+, tested to 11.1PHP7.4+
1.0.11 new, 1 better, 1 fixed
New
Discounts on calculated prices, with PriceWise Pro 2.5.3 or later or the free PriceWise 2.0.5 or later. Percentage, amount and quantity-tier rules come off the finished calculated price at the basket quantity, a set-price rule sets the price the calculator starts from, and the quantity table on those products shows what comes off each item.
Better
Tested with WordPress 7.1 and WooCommerce 11.1.
Fixed
With PriceWise running, a rule set a made-to-order item back to the product's own price in the basket, so a sign the calculator priced at $740 was charged $166.50. DiscountWise Pro now keeps the calculated price.
Earlier versions
1.0.0First release
New
First release.
Everything in the free DiscountWise: percentage, amount and set-price discounts for products, categories or the whole shop; quantity tiers with a price table on the product page; cart subtotal discounts; role prices for wholesale and B2B, plus a guest price; buy X get X of the same product; start and end dates; rule priority (apply the biggest, apply the first, or stack them all); struck-out prices, a sale badge and "You saved"; the "Why this price?" tester; ready-made rule templates.
Buy X get Y across different products: buy one product, get another one free.
Free gifts: a gift product goes into the basket once the basket reaches an amount you set.
Bundles: a discount when the basket holds a whole set of products.
"Spend X more" messages in the basket, naming the discount or gift the customer is close to.
Rules for chosen customers or for email domains, for a price that only one customer or one company gets.
Usage limits: how many times a rule can be used in total ("the first 100 customers") and by each customer.
Activation codes: a rule switches on when the customer opens a special link (?dw_code=SUMMER) or applies a matching coupon.
Export your rules to a file and import them back, and bring rules over from Discount Rules for WooCommerce (Flycart). Imported rules arrive switched off, so you check them first.
The live chat console shows who you are talking to: the visitor's email and their answers to the start questions of the free SellSmith 1.2.0 (a customer with their order, or a new visitor), in the chat list and above the open chat. Click the email to write to them.
The Telegram and email alerts for a live chat say who is writing, and pressing Reply on the alert email writes straight to the visitor.
Better
When you answer chats alone (the "Talk to me" wording), the start questions ask for the email in the same first person: "What is your email? If I cannot reply right away, I will answer you there."
The chat list names a visitor by their email first, then by their city.
Fixed
The live chat console showed an owner who was offline as online, and locked the online switch as if business hours were on.
A chat opened from an alert link kept the "Pick a chat" hint above its messages and was not marked as open in the chat list.
Earlier versions
1.0.0First release
New
First release.
Live chat with a real person: a visitor switches from the AI to you, and you answer from the Inbox (Live now). It works on any host, with no extra service. An online and offline switch, business hours, and Telegram and email alerts for live messages.
Lead scoring: each chat is scored Hot, Warm or Cold with your own Gemini key, you get an email when a serious buyer shows up, and the Leads list gets a Score column.
Reply to a lead from your dashboard: the visitor gets your reply by email, with a link that reopens the same chat on your site.
Your own picture in the chat: a Gravatar or an uploaded image instead of the mascot.
Licence key on a License tab in the SellSmith settings.
Version1.0.1Updated18 Oct 2026WordPress6.7+, tested to 7.1PHP7.4+
1.0.13 fixed
Fixed
On the cart and checkout pages the header cart showed as a pale square over the cart icon. It now looks the same as on every other page, with the item count in its bubble.
Pointing at the account or cart icon in a dark header turned the icon the accent colour on its white disc, which on some looks could hardly be seen. Both now turn dark, the same as the cart does on every other page.
In the editor, the headline of the "Hero, stitched frame" section ran past the left edge of its frame on wide screens, while on the shop it stays inside. It stays inside in both now.