PluginProbe
WCPOS – Point of Sale (POS) plugin for WooCommerce / 1.10.24
WCPOS – Point of Sale (POS) plugin for WooCommerce v1.10.24
1.10.25 1.10.24 1.10.23 1.10.22 1.10.21 1.10.20 1.10.19 1.10.18 1.10.17 1.10.16 1.10.15 1.10.13 1.10.14 1.10.12 1.10.11 1.10.10 1.10.9 1.10.8 untagged-3d9b7ccddc54df87c672 1.10.7 1.10.6 1.10.5 1.10.3 1.10.4 1.10.2 All 169 releases
← All changes | readme.txt +111 -143 1.10.2 → 1.10.24 View file →
@@ -2,9 +2,9 @@
2 2 Contributors: kilbot
3 3 Tags: ecommerce, point-of-sale, pos, inventory, woocommerce
4 4 Requires at least: 5.6
5 5 Tested up to: 7.1
6 -Stable tag: 1.10.2
6 +Stable tag: 1.10.24
7 7 License: GPL-3.0
8 8 License URI: http://www.gnu.org/licenses/gpl-3.0.html
9 9
10 10 Turn any device into a register for your WooCommerce store — same catalog, stock and prices, online or off.
@@ -112,10 +112,17 @@
112 112 = Where do I get help? =
113 113 Browse the documentation at [docs.wcpos.com](https://docs.wcpos.com), or reach the community and Pro priority support on [Discord](https://wcpos.com/discord).
114 114
115 115 = What data does WCPOS send outside my site? =
116 -WCPOS keeps your data in your own WooCommerce database, unless you turn on a feature that relies on an outside service. It contacts outside services to: load the POS web bundle, other interface assets, and translations from a CDN (jsDelivr); send anonymous usage analytics to wcpos.com **if you opt in** (withdraw any time in settings); validate your license key, site identifier (`site_uuid`), and anonymous identifier (`anon_id`) with wcpos.com when you activate Pro; and relay cloud print jobs through the WCPOS Cloud Print relay at cloudprint.wcpos.com **if you use cloud printing** — your site registers with the relay automatically when you open the Cloud Print settings, and each print job for a relay-addressed printer is then passed through the relay to your configured cloud printer, so the receipt contents (which include order details) leave your site (developers can opt out with the `woocommerce_pos_cloud_print_relay_enabled` filter). Full details are in our [privacy policy](https://wcpos.com/privacy).
116 +Your products, orders and customers stay in your own WooCommerce database. WCPOS only talks to outside services for a few specific reasons:
117 117
118 +* **To load the app.** The POS interface, its assets and translations are served from a CDN (jsDelivr), like any web app.
119 +* **To find and fix bugs — only if you opt in.** With your permission, WCPOS sends us anonymous usage data (which features are used, on what kind of setup) and anonymous error reports from the POS and from the WCPOS plugin on your server (what went wrong, on which version and platform). This is how we spot problems before you have to write in, fix them faster, and decide what to build next. It never includes customer details, order contents, prices or your site address, and you can change your mind any time in POS > Settings > General.
120 +* **To activate Pro.** Your license key, site identifier (`site_uuid`) and anonymous identifier (`anon_id`) are validated with wcpos.com.
121 +* **To print through the WCPOS Cloud Print relay — only if you use cloud printing.** Your site registers with the relay at cloudprint.wcpos.com when you open the Cloud Print settings, and print jobs for relay-addressed printers are passed through it to your printer, so those receipt contents (which include order details) leave your site. Developers can opt out with the `woocommerce_pos_cloud_print_relay_enabled` filter.
122 +
123 +Full details are in our [privacy policy](https://wcpos.com/privacy).
124 +
118 125 == Screenshots ==
119 126
120 127 1. WCPOS main screen
121 128
@@ -120,175 +127,136 @@
120 127 1. WCPOS main screen
121 128
122 129 == Changelog ==
123 130
124 -= 1.10.2 - 2026/08/26 =
125 -- **Fixed a regression in order save speed for CPT orders** -- HPOS orders are not affected.
131 += 1.10.24 - 2026/10/08 =
126 132
127 -= 1.10.1 - 2026/08/26 =
133 +- **Removing a coupon from a cart that had already been saved no longer makes Checkout fail.** Until now the next Checkout or Save was refused with "Coupon code is required" and the sale could not be completed until the coupon was put back or the cart rebuilt. This has been the case since coupons arrived in 1.9.0.
128 134
129 -**A fix for product variations.** In 1.10.0 the POS asked WooCommerce for variations the wrong way, and got back data shaped like a product instead of a variation. If you sell variable products, this release matters.
135 += 1.10.23 - 2026/10/07 =
130 136
131 -- **Variation names are readable again.** On a product with three or more attributes -- say Colour, Size and Fabric -- every variation row showed the same text, so there was no way to tell them apart at the till. They now read as their own attributes, like "Blue, Large, Cotton".
132 -- **Variation images are back.** Variation thumbnails were blank in the product list, and a variation added to the cart carried its parent's picture onto the order and the printed receipt. Orders already saved with the wrong picture are left alone -- reaching into completed orders to correct a thumbnail is riskier than the wrong thumbnail.
133 -- **Disabled variations are no longer for sale in the POS.** If you untick "Enabled" on a variation in WooCommerce, it now disappears from the POS the same way it disappears from your storefront. Previously it stayed on sale at the till.
134 -- **Variations you have hidden from the POS no longer count.** The variation list showed "Showing 2 of 3" for a product with a hidden variation, with no way to reach the third. Hidden and disabled variations are now left out of the list, the count, and the totals on Store Health.
135 -- **Hiding or showing a product now reaches the tills.** Changing POS visibility did not always tell the app anything had changed, so a hidden product could linger on a device. It is announced properly now, and un-hiding brings the product back.
136 -- **"Records need attention" clears when it should.** The repair checks looked at products the POS is never allowed to see, so a store with hidden products could show a warning that never went away no matter how many times it synced.
137 +- **Paying with a hosted gateway such as Dintero, Mollie, PayPal or Klarna no longer jumps the till to the receipt before the payment.** The order is left open and settles from the gateway's callback, as before 1.10.20; merchants on 1.10.20–1.10.22 with such a gateway should update.
138 +- **"Checkout failed" no longer appears for a sale the store did accept** on a slow connection. The till now waits up to 45 seconds for the store's answer.
139 +- **Sales waiting behind an expired login are now announced.** A banner in the header shows how many sales are waiting, with a Log in button.
140 +- **A delete at the till is only dropped from the queue once the store confirms it.**
141 +- **Opening an order's refunds while offline, or after the app was in the background, shows an offline card instead of "Couldn't load refunds"**.
142 +- **A corrupt entry in the diagnostic log no longer crashes the Logs screen on iPhone, iPad and Android.**
143 +- Developers: a failed POS session revoke now returns its intended HTTP status (400, 404 or 500) instead of 200. Details on GitHub.
137 144
138 -**Please update.** If you sell variable products, 1.10.0 is showing your cashiers the wrong information. After updating, the POS re-syncs your variations once on its own -- no action needed.
145 += 1.10.22 - 2026/10/06 =
139 146
140 -**Note for developers:** `wcpos/v2` variations are now served by WooCommerce's own `WC_REST_Product_Variations_Controller`, so a variation document is the wc/v3 variation shape -- a singular `image`, `wc_get_formatted_variation()` for `name`, and none of the product-only fields 1.10.0 included. `GET wcpos/v2/variations` also accepts a plain collection request and returns `X-WP-Total`.
147 +- **Cashiers can no longer change a customer's role.** Only the Customer role can be assigned from a cashier account; staff roles are reserved for store managers and administrators.
141 148
142 -= 1.10.0 - 2026/08/25 =
149 += 1.10.21 - 2026/10/06 =
143 150
144 -**A new sync engine.** The biggest update since we rebuilt WCPOS in React Native back in 2023. Your store now syncs through a change log -- the POS asks what changed since it last checked, instead of re-downloading your catalogue every time. It is the foundation the offline queue and Store Health below are built on.
151 +- **Till totals now match your store to the cent** on stores that round tax at subtotal level.
152 +- **Adding a Bluetooth printer no longer crashes the app** on iPad and iPhone.
153 +- **Cashiers can only edit customer accounts**, never staff accounts.
154 +- **Changing a user's password signs them out of the POS on every device.**
155 +- **Cashiers can edit and delete their own sales again** when their role lacks "edit others' orders".
156 +- **Payment gateways with no customer-facing title now show a name** in POS settings and at the till.
157 +- **Fixes for stores using High-Performance Order Storage:** cash tendered and change, tax-ID suggestions and fiscal submission status now read correctly.
158 +- **Connecting the app to a store with no REST link on its front page works again.**
159 +- **A staging copy of your store no longer overwrites the live store in the app's site list.** A store moved to a new domain appears as a new site and needs connecting once more.
160 +- Developers: a faster product-ID listing on `wcpos/v2`, advertised as a capability on `GET /wcpos/v2/status`. Details on GitHub.
145 161
146 -- **Prevent overselling (new, optional).** Turn it on in Checkout settings: the POS stops you adding more than you have, and the server refuses the order too, so a stale device can't oversell either. Backorders are respected.
147 -- **Built to survive a dropped connection.** Browsing, cart building and saving orders keep working offline, and the new sync engine queues the changes you make and replays them when you reconnect -- receipt emails, and customer, coupon and stock edits on Pro. Anything the server rejects is listed with the reason so you can fix and resend it, instead of disappearing silently. Taking payment is the one step that still needs a connection -- offline checkout, starting with cash, is the focus of 1.11.
148 -- **Barcode scanning, rebuilt.** Scan with the device camera on any platform. Support for USB, serial, Bluetooth and Bluetooth LE scanners alongside keyboard-wedge. A setup wizard and a test panel that measures your scanner and tells you what to fix. Optional scan sounds.
149 -- **Store Health.** New screens showing what's on the device versus the server, real storage usage, sync performance over time, and a searchable log where every warning links to an explanation.
150 -- **Search that finds what WooCommerce finds.** Product search now matches inside words, so compound words work (searching "saippua" finds "Kuorintasaippua"). Customer search matches full names.
151 -- **Printing.** Star cloud printers negotiate their format properly, receipts can be rendered server-side as an image for printers that need it, and auto-print rules can fire on order creation or only once paid. Offline receipts print in the right language.
152 -- **Settings redesigned.** A calmer, row-based layout with shorter labels. Settings and Store Health now open as panels rather than modals.
153 -- **Cashiers can create and edit products by default.** Deleting stays opt-in, and catalogue edits are checked against real WordPress permissions -- a rejected edit is reverted with the server's reason shown.
154 -- **Fixed dropdowns not opening on iPad**, and language changes not reaching every part of the app.
162 += 1.10.20 - 2026/09/23 =
155 163
156 -**Note for developers:** 1.10.0 introduces the `wcpos/v2` REST namespace. The POS now uses it for syncing and for the shared POS services that were previously served from `wcpos/v1`. The `wcpos/v1` routes still register but are frozen, and some legacy `API\Settings` controller methods have been removed. See the full release notes for the complete list of breaking changes.
164 +- **Checkout no longer reports "Checkout failed" for a sale that reached the store.** If the till was busy sending another change, or an earlier attempt had failed, the checkout screen could give up waiting even though the order had been saved. It now hears back as soon as the order is saved, and pressing Checkout again after a failure tries straight away.
165 +- **Search repairs a damaged search index instead of failing at every launch.** When the saved search index could not be read, search stayed broken with "Failed to initialize search". The index is now discarded and rebuilt from the till's records.
166 +- **Gateways that take no payment at the till — quotes, invoices, purchase orders — now close the order with the Order Status you set for them.** The checkout used to succeed but leave the order at POS - Open. Only gateways with an Order Status saved in POS > Settings > Checkout are affected, and the order is not marked paid.
167 +- **Refunds that arrive from a payment gateway now respect your POS customer-email settings.** A refund recorded by a gateway's webhook could email the customer even with POS customer emails switched off; refunds made in wp-admin or at the till were not affected.
157 168
158 -**Please don't update lightly.** This is a major update -- update when your store is quiet and you have time to check everything over.
169 += 1.10.19 - 2026/09/19 =
159 170
160 -= 1.9.17 - 2026/08/07 =
161 -- **Smaller plugin package** -- the download is around 2.4 MB smaller (optimized template gallery images, removed unused bundled files). This also shrinks the Pro package and resolves installation failures on hosts with restrictive upload or disk limits.
162 -- **Fixed Pro update downloads using a stale licence key** -- changing or re-activating a WCPOS Pro licence now clears WordPress's cached update information, so the next update download always uses the current licence key.
163 -- **Fixed duplicate cashier identity on multisite** -- on multisite networks a cashier could be assigned two different internal IDs depending on which endpoint served them, splitting one user into two identities in the POS. All endpoints now serve a single ID per user.
164 -- **Hardened the orders API against malformed metadata** -- a malformed metadata entry in a batch create/update could cause a server error partway through the batch, risking duplicate orders on retry. Malformed entries are now safely skipped and invalid IDs rejected up front.
165 -- **POS audit metadata is now server-authoritative** -- order metadata recording which cashier and store created an order is now stamped by the server and can no longer be altered by the client. Cash amounts are also validated more strictly.
166 -- **Internal cloud print improvements** -- consolidated printer-provider handling and the server now reports which template engines each print provider supports.
171 +- **A till no longer loses live records during its startup tidy-up.** With the POS open twice on the same device, the tidy-up could mistake live records — including the sign-in row — for damaged ones and remove them. It now leaves alone anything it cannot fully account for. Web merchants receive this through WCPOS plugin 1.10.19, which serves the storage worker; desktop and phone apps carry it in this release.
172 +- **A sale that could not be sent because the till was signed out now waits for sign-in instead of being given up on.** The cashier is told as soon as it happens, and the sale sends itself once the session is back.
173 +- **A refused POS request now says why it was refused.** A 401 from the POS routes names the reason in the response and in Health > Logs, instead of only reporting that the request failed.
167 174
168 -= 1.9.16 - 2026/08/05 =
169 -- **Fixed stale price ranges on variable products** -- the POS product grid could show an outdated price or price range for a variable product even after variation prices changed, and clearing local data did not help, because the freshly recomputed range was discarded in favour of an old stored value when building the server response. Responses now always serve the current values, so the displayed range matches the live variation prices. The price charged at checkout was always correct -- this fixes what the grid displays. Server-side fix; no app update needed.
175 += 1.10.18 - 2026/09/18 =
170 176
171 -= 1.9.15 - 2026/08/04 =
172 -- **Security: custom thermal receipt templates can no longer run PHP** -- a user with POS management access (eg: a shop manager) could embed PHP in a custom thermal receipt template and have it execute when a receipt was rendered, because the thermal engine fell through to the legacy PHP renderer. Thermal templates now render exclusively through the safe Mustache/XML pipeline, which discards embedded PHP; malformed markup fails closed. **If you use custom receipt templates, please update.**
173 -- **More reliable thermal receipt rendering** -- thermal render failures are now logged so a broken template is diagnosable, and browser-printed HTML receipts are constrained to the configured paper width so wide rows no longer overflow the roll.
177 +- **A web till with the POS open in more than one tab repairs its local database again.** Since the 1.10 storage repairs shipped, every repair on web was refused whenever another tab of the same store could be open, so a damaged record stayed damaged and the same storage errors repeated on every sync. The tab that leads the store now owns the repair and the other tabs follow it. Web merchants receive this through WCPOS plugin 1.10.18, which serves the storage worker; desktop and phone apps carry it in this release.
178 +- **Voiding an order the server had refused no longer fails silently.** When an order could not be created on the server (for example while the till was signed out) and the cashier then voided it, the void raised an error nothing caught and the order stayed in the cart. The till now removes the order and its failed request locally and confirms the removal; any other failure to void shows an error instead of nothing.
179 +- **A till opened from WordPress admin no longer sends an invalid sign-in token on its first requests.** A request made before a token was stored carried the word "undefined" as its credential, which the server rejected as an invalid token instead of falling back to the WordPress login session. Such requests now carry no token, and a retry after a token refresh no longer keeps the old token in the request address.
180 +- **A plugin update no longer restores cashier permissions the merchant had removed.** Every update re-granted every default capability, so a store that had turned off product or coupon editing for cashiers saw it come back after each release. Updates now grant only capabilities that are new since the last update; a deleted cashier role is still recreated whole.
181 +- **Product search on the older `wcpos/v1` routes splits the typed text the same way as the rest of the POS.** Punctuation stays literal and single letters and common words count, so "IT 5012" no longer searches as "5012" and "0,4" is one term.
182 +- **An order digest write no longer fails on a busy MariaDB.** The checkout-lane digest write now retries once on lock contention, as the product and customer digests already did.
183 +- **The older order-update route checks order ownership the same way as the current one under HPOS.** A role that can edit its own orders but not other people's is treated the same on both routes. Cashiers are unaffected.
174 184
175 -= 1.9.14 - 2026/07/31 =
176 -- **Receipt timestamps now respect your WordPress time format** -- receipts could force 12-hour AM/PM times even when your site is set to a 24-hour clock. The receipt date formatter now follows the time format configured under Settings > General, while the store locale continues to control the date language.
177 -- **Hardened cloud-print job handling** -- bulk-cancelling print jobs now verifies it is acting on actual print jobs (a POS-level user could previously trigger status changes on unrelated posts), and cancelling is refused for jobs that are not waiting (so a failed job keeps its payload and stays retryable). Also adds regression coverage proving receipt text cannot inject printer control bytes into thermal output -- a protection already shipped in earlier releases.
178 -- **PHP 8.4+ build hardening** -- the plugin's bundled PDF engine now calls PHP 8.4's new functions directly instead of relying on runtime compatibility shims. Installs that loaded the shims were already protected, but a bootstrap that missed them (eg: a partial plugin update) could still hit a fatal error when rendering PDF receipts -- that failure class is now gone entirely. The same issue broke PDF receipts on WCPOS Pro on PHP 8.4+, fixed separately in Pro 1.9.14.
179 -- **Updated translations.**
185 += 1.10.17 - 2026/09/17 =
180 186
181 -= 1.9.13 - 2026/07/26 =
182 -- **Fixed garbled prints on Star CloudPRNT printers** -- after 1.9.12, receipts sent to Star CloudPRNT printers (the TSP100 line) could print the plain text lines followed by a metre of garbage characters, because cashier-initiated prints were still rendered as ESC/POS, which no Star CloudPRNT printer can decode. WCPOS now serves these printers native StarPRNT for cashier prints too, and automatically corrects the stored printer language on existing installs on the next settings sync -- no reconfiguration needed. Other cloud printers are unaffected.
187 +- **A till no longer gets stuck at login on "Something went wrong: useStoreSession must be called within an active store session".** A damaged range in the till's local database made the login write fail and left the cashier on a red banner. The write is now repaired and retried, and if the saved session still cannot be honoured the till returns to the store list with a message instead of the banner. If the site has to be added again, it opens a fresh local database and does not pick up sales still waiting to sync in the old one. Web merchants receive the storage repair through WCPOS plugin 1.10.17, which serves the storage worker; desktop and phone apps carry it in this release.
188 +- **A newly connected till no longer misses a stock change made in its first minute.** A product set out of stock on the server shortly after a new device, login or reset stayed "in stock" on the till indefinitely. The till now records the server's position before the first browse, so the change arrives with the next sync.
189 +- **A variation whose stock is managed at product level shows the right stock in the variation picker.** When the parent product sold out, the picker's badge and Add to Cart button kept saying "in stock" for up to five minutes. They now read the parent's stock, the same way the cart does.
190 +- **Switching stores no longer carries the previous store into the first requests of the new one.** Requests made while a switch was still completing used the outgoing store, so the first products or barcodes could belong to it until the next sync. Pro multi-store only.
191 +- **Health > Logs records a screen error the app catches** as "Part of the screen failed to load", and reports it when you have allowed error reporting.
183 192
184 -= 1.9.12 - 2026/07/24 =
185 -- **Fixed cloud printing to Star TSP100 printers** -- StarPRNT-native Star printers (the TSP100/TSP100IV line) rejected Cloud Print jobs with a "510 Incompatible Media Type" error and never printed, because WCPOS sent them ESC/POS. WCPOS now serves these printers native StarPRNT, so Cloud Print works on the whole TSP100 family. Other cloud printers are unaffected.
186 -- **Customer receipt downloads are now opt-in** -- the Receipt button on My Account > Orders (added in 1.9.11) is now off by default and turned on under Settings > General > Customers, with an optional picker to choose which template customers get. Stores that want it must enable it; the [wcpos_receipt] shortcode is unaffected.
187 -- **Fixed the Cloud Print printer name being squeezed** -- a long or translated status label (eg: French "En attente de l'imprimante") no longer shrinks the editable printer-name field to a few characters; the status now sits on its own row.
188 -- **Fixed receipt template selection for downloaded receipts** -- gallery templates now resolve correctly for customer receipt links, and the storefront receipt uses the template you selected.
189 -- **Updated translations.**
193 += 1.10.16 - 2026/09/16 =
190 194
191 -= 1.9.11 - 2026/07/24 =
192 -- **New: WCPOS Cloud Print relay** -- if your hosting or firewall blocks a cloud printer's direct connection (a permanent "Waiting for printer"), WCPOS now routes Star CloudPRNT and Epson Server Direct Print polling through the WCPOS Cloud Print relay automatically, and print jobs start on the printer's next poll instead of waiting for the next heartbeat. Printer cards tell you when a security layer is blocking cloud print. When the relay is used, print jobs (receipt contents) pass through cloudprint.wcpos.com -- see the privacy FAQ. Site owners can opt out in code.
193 -- **New: Cloud Print queue** -- the Cloud Print settings screen now shows a live queue of your print jobs and their status, so you can see what has printed, retry a failed job, and clear the backlog. Completed job payloads are stripped and old jobs are purged automatically.
194 -- **New: receipts on your online store** -- customers can download their order receipt as a PDF, rendered with your WCPOS receipt template, from a new Receipt button on My Account > Orders. A [wcpos_receipt] shortcode is also available for the order-received or custom pages.
195 -- **Fixed cloud printers that mangle the poll URL** -- printer credentials now travel in the URL path, so printer firmware that URL-encodes the query string (eg: Star TSP100IV) can authenticate. Existing configured printer URLs keep working.
196 -- **Fixed the WCPOS Pro license image** -- the Pro panel now loads its image correctly.
197 -- **Updated translations.**
195 +- **Cashiers can sell an out-of-stock variation again when "Avoid overselling" is off.** The variation picker's Add to Cart button disabled on stock alone and ignored the store setting, so an out-of-stock simple product could be sold but an out-of-stock variation could not. The button now follows the same rule as the cart: it disables only while the setting is on and the variation is unsellable.
196 +- **An idle web POS no longer sits at 30% CPU after the cashier stops.** Local database cleanup compacted storage fifty records at a time and rewrote every index between batches, so a till with a large backlog of deleted records churned for minutes. Cleanup now compacts in one batch and rewrites the indexes once. The web app loads its storage worker from this plugin, so web merchants receive this fix through this update.
197 +- **Health > Database no longer shows "checking…" forever on a server that reports high load.** A host that stamps every response as under high load while answering in a tenth of a second kept the till backed off, and the backed-off checks always started with the same three record types, so the other six never got a turn. Checks now rotate fairly, all record types are probed on each backed-off tick, and a "high load" header on a fast reply no longer counts against the server.
198 +- **Health > Performance says what pace the till is keeping with the server, and why.** One line at the top of "Your server, over time" reads Normal pace, Easing off (with the factor and the reason), or Paused until a given time.
199 +- **Tills stop showing products the store has hidden from the POS.** Between 1.10.1 and 1.10.14 the POS product search could return a hidden product (fixed in 1.10.15), and a till that searched during that window kept a copy. Upgrading now writes a fresh removal notice for every hidden product and variation, and every till drops its stale copies on its next ordinary sync, with no reset or manual sync needed.
200 +- **The POS Only and Online Only counts above the WooCommerce products list are accurate.** They counted trashed and auto-draft products that the view never lists; they now count the same statuses as WordPress's own "All" view.
201 +- **The server no longer reports high load from a guessed CPU count.** On hosts that hide `/proc/cpuinfo`, the load average was divided by one CPU, so any load above 1.8 read as "high" forever and every till slowed its sync. When the CPU count is unknown, no load is reported.
202 +- **The connection check can no longer be served from a page cache.** The public ping was answered before the cache-control headers were set, so a cached "ok" could mask an outage for the cache's lifetime. It now sends the same no-store headers as every other POS response.
198 203
199 -= 1.9.10 - 2026/07/22 =
200 -- **Fixed stale prices on products converted from simple to variable** -- variable products now show the lowest price of their current visible variations in the POS, instead of a leftover price left behind by the conversion.
201 -- **Fixed a fatal error in the receipt template editor on translated stores** -- receipt previews no longer crash when a translated label contains a literal percent sign (reported on Czech stores).
202 -- **Fixed cloud printer polling** -- Star CloudPRNT and Epson Server Direct Print polling URLs now include the marker WCPOS requires, so the URL you copy from the settings screen works as-is. Star results in the 2xx family (eg: 211 Paper Low) now count as printed rather than failed, and polling problems are recorded in the WCPOS logs with enough detail to act on.
203 -- **Refresh button on the Extensions screen** -- re-check the extensions catalogue on demand instead of waiting for the hourly cache to expire.
204 -- **Fixed the missing POS favicon** -- POS browser tabs and home-screen shortcuts show the WCPOS icon again.
205 -- **Updated translations.**
204 += 1.10.15 - 2026/09/15 =
206 205
207 -= 1.9.9 - 2026/07/18 =
208 -- **Security: hardened receipt/report template file resolution** -- the templates REST endpoint now strictly validates the requested template type and confirms that resolved template files stay inside the plugin's trusted template directories, closing a path-traversal issue. All stores should update.
209 -- **Fixed payment links blocked by trailing-slash rewrite rules** -- POS checkout, receipt and login URLs now follow your site's permalink trailing-slash style, so rewrite rules that force a trailing slash no longer redirect these links to an http target and get blocked as mixed content.
210 -- **Updated translations.**
206 +- **Tills no longer grow to gigabytes of memory over a long shift.** The product search index was keeping up to a hundred complete copies of itself in memory as it updated. Measured on a test store, memory after cleanup grew from 46 MB to 404 MB in an hour before the fix and from 47 MB to 160 MB after it; this is what took one merchant's till to 3.2 GB over an eleven-hour shift.
207 +- **The Logs screen no longer freezes the app.**
208 +- **Product search finds a product however you order the words.** Searching "blue shirt" and "shirt blue" now return the same results.
209 +- **Start-up repair of a damaged local database is safer.** Oversized internal change logs are now bounded and recovered without unbounded reads, and the app no longer rewrites bookkeeping records that have not changed. The web app loads its storage worker from this plugin, so web merchants receive this fix through this update rather than through the app bundle.
210 +- **A sync refresh that returns the same record twice is rejected** instead of being applied against an incomplete snapshot, which could previously prune records that were still present on the server.
211 +- **Product search shows every match again.** When a search matched more products than fit on the first page, the Products page stopped at that page and scrolling to the end loaded nothing more.
212 +- **The product search index repairs itself again.** When the app detected that the index had drifted from the product data, the rebuild silently did nothing, so stale or missing search results stayed that way until the app was reinstalled.
211 213
212 -= 1.9.8 - 2026/07/17 =
213 -- **Fixed blocked payment and receipt links on https stores** -- checkout payment, receipt and login links now respect the Force SSL setting, so the order-pay popup is no longer blocked as mixed content on stores served over https while the WordPress home URL is still http (eg: behind Cloudflare Flexible SSL or other SSL-terminating proxies).
214 -- **Force SSL toggle restored** -- the Force SSL setting is back in the WCPOS settings under a new Advanced section, so stores that intentionally run over http can turn it off.
214 += 1.10.14 - 2026/09/14 =
215 215
216 -= 1.9.7 - 2026/07/15 =
217 -- **Receipts can now show savings** -- receipt templates can display regular prices, per-line savings and a Total Saved line, with correct right-to-left (RTL) previews and localized labels.
218 -- **Better black & white printing** -- gallery receipt templates now print safely on B&W receipt printers, while PDF receipts keep their colours.
219 -- **Resizable template editor panel** -- drag to resize the fields panel in the receipt template editor.
220 -- **Improved welcome-screen analytics** -- consented admin landing payloads now include hostname-only site and admin domains so WCPOS can understand where opted-in stores come from without sending full URLs or paths.
221 -- **Fixes** -- order version stamping now only happens when the POS creates an order; safer file-permission fallback when WCPOS writes files.
222 -- **Updated translations.**
216 +- **Product search matches what you type as one phrase, in the order you typed it.** Searching for two words no longer also returns products with those words reversed, separated, or split between the title and the SKU. Partial and exact SKU and barcode matches work as before, and one- and two-character searches now match anywhere in a word.
217 +- **The receipt template dropdown now lists templates in the order you set them**, for global templates and Pro per-store templates alike.
218 +- **Switching the app language repeatedly no longer holds every previous product search index in memory.**
219 +- **The WCPOS REST API index no longer errors when a client asks it for route help.** Only developers and integrations reading the API index were affected.
223 220
224 -= 1.9.6 - 2026/06/17 =
225 -- **Cash drawer support** -- open a connected cash drawer automatically after payment or on demand with a new Open Drawer button. Choose a drawer connector per printer, with support for thermal/ESC-POS printers, Epson, PrintNode, and cloud/remote print jobs.
226 -- **Fixed an analytics event firing too often** -- the upgrade prompt "viewed" event no longer fires on every admin page load.
227 -- **Updated translations.**
221 += 1.10.13 - 2026/09/13 =
228 222
229 -= 1.9.5 - 2026/06/15 =
230 -- **Fixed a payment gateways API crash** -- the POS payment-gateways endpoint no longer initialises every gateway's admin settings, which could cause a fatal error (HTTP 500) on stores using certain third-party payment gateways (e.g. ToyyibPay) that only register their settings in the WordPress admin.
223 +- **Web: start-up repair of a damaged local database now applies each pending change to the row it belongs to**, rather than to that row's position, and refuses a stale change for a row already holding a newer entry. The desktop and mobile apps received this in 1.10.12; the web app loads its storage worker from this plugin, which still carried the previous copy.
231 224
232 -= 1.9.4 - 2026/06/13 =
233 -- **Redesigned Bluetooth printer setup** -- a managed Bluetooth chooser with connection timeouts, paired-device discovery on macOS and Linux, clearer scan feedback, and guidance to add a printer manually when none are found.
234 -- **Added serial printing** -- OS-paired Bluetooth Classic printers can now print over a serial connection.
235 -- **Improved Windows printing** -- raw printing routes through the Windows print spooler, with a dedicated installed-printers section for Windows.
236 -- **Improved USB printer flow** -- the USB printer list loads automatically when you open the tab, and the Scan button becomes Refresh.
237 -- **Clearer network printer scans** -- empty network scans now explain how to add a printer by manual IP entry, and a crash when closing network printer connections was fixed.
238 -- **Improved PDF receipts for legacy templates** -- the legacy receipt template renders through the PDF preprocessor with inline layout styles so downloaded PDFs match previews, and the receipt logo uses the correct image type.
239 -- **Fixed template syncing** -- stopped an infinite sync loop affecting receipt templates.
240 -- **Added an anonymous analytics identifier** -- a random, consent-gated identifier (`wcpos_anon_id`) used only on the plugin's admin welcome screen to keep its first-party analytics consistent; it contains no store data, can be rotated or removed via WP-CLI, and is deleted on uninstall (see the Privacy section).
241 -- **Updated translations** -- latest POT and translation metadata through 2026.6.4.
225 += 1.10.12 - 2026/09/13 =
242 226
243 -= 1.9.3 - 2026/06/12 =
244 -- **Improved web printer setup** -- network printer scans now explain browser limitations, show structured connection diagnostics, and give protocol-aware error guidance for web printing.
245 -- **Added Local Network Access support** -- web print requests and printer probes opt into Chrome's Local Network Access permission so printers on your LAN keep working in newer browsers.
246 -- **Fixed Star WebPRNT connections** -- the print protocol is now derived from the printer port instead of the page origin, and scanned printer ports are preserved when switching vendors.
247 -- **Improved product sorting settings** -- expanded sort options with a more compact sort settings row in POS product settings.
248 -- **Fixed stale variation images** -- product variations no longer briefly show a previous variation's image.
249 -- **Fixed receipt tax breakdown** -- client-rendered receipts keep the tax breakdown, and the tax summary stays hidden when taxes are hidden.
250 -- **Fixed PDF receipt rendering** -- receipt markup rewritten for Dompdf so downloaded PDFs match previews, with fixed image and column rendering and aligned status-chip dots.
251 -- **Fixed order date syncing** -- bare GMT order creation dates are accepted and legacy order date validation retries, fixing failed order syncs for some stores.
252 -- **Added WooCommerce 10.9 compatibility** -- accepts the new variation gallery field in the WooCommerce 10.9 REST API.
253 -- **Updated translations** -- includes the latest POT and translation metadata through 2026.6.2.
227 +- **Cloud print and template reprints: a heading asked to be double-wide printed double-high.** The size command carried width and height the wrong way round. Square sizes are unaffected, which is why it went unseen for so long.
228 +- **Cloud print: centred headings no longer overrun the paper.** Padding on a scaled heading was counted in characters rather than printed columns, so a centred double-width title was pushed right and wrapped onto a second line.
229 +- **A product or order carrying an enormous meta value no longer takes down the request.** One store was losing about 22 requests an hour to a single record whose meta value serialised to roughly 1.25 GB. The value is now withheld rather than re-encoded, so the record loads instead of the till retrying it all day.
230 +- **Star printers: centred headings print centred, and the time prints correctly.** Centring padding was emitted as spaces inside a magnified run, so each pad space was as wide as each glyph and a centred double-width heading wrapped. The narrow space in a short time no longer prints as a question mark.
231 +- **Switching stores no longer tells the cashier to sign in again for the store they just opened.** A sign-in retry still in flight from the previous store could raise the message against the new one.
232 +- **A store whose session has expired no longer records an error every minute.** The same failure was reported on every check because it was filed under a name the de-duplication never matched.
233 +- **Start-up repair of a damaged local database matches each pending change to the row it belongs to**, rather than to that row's position, and refuses a stale change for a row already holding a newer entry.
234 +- **Creating a virtual printer no longer fails intermittently with a certificate error.**
254 235
255 -= 1.9.2 - 2026/06/09 =
256 -- **Added Star Online cloud printing support** -- connect Star Online printers, fetch registered devices, validate printer settings, and submit cloud print jobs from WCPOS.
257 -- **Redesigned printer settings** -- refreshed the printer setup screens with shared tabs, clearer printer profile fields, improved select styling, and better vendor/provider handling.
258 -- **Improved responsive controls** -- tabs can collapse into a select control on smaller screens, and native comboboxes scroll and search more reliably on Android and other native layouts.
259 -- **Improved printer discovery UI** -- network scans show progress, collapse candidate printer lists, and keep web network scanning focused on the Add Printer flow.
260 -- **Added product sorting controls** -- POS product grid and list views now support Sort By controls and Meta Data Key selection for custom catalog ordering.
261 -- **Improved cloud print setup** -- the Add Printer wizard no longer pre-selects a provider, shows clearer Star Online permission messages, and supports explicit encoding settings.
262 -- **Added server-side PDF receipt downloads** -- receipt PDFs now use native WP Overnight PDF bytes where available and render flex/grid layouts and barcodes more reliably.
263 -- **Fixed cloud printer access** -- POS clients can read configured cloud printers without requiring broader admin permissions.
264 -- **Fixed blank template titles** -- POS templates now get fallback names when the saved title is empty.
265 -- **Updated translations** -- includes the latest POT and translation metadata through 2026.6.0.
236 += 1.10.11 - 2026/09/11 =
266 237
267 -= 1.9.1 - 2026/05/19 =
268 -- **Improved session recovery** -- expired POS sessions now refresh or ask for login correctly, while real permission errors no longer look like login problems.
269 -- **Fixed theme display issues** -- web navigation backgrounds now update correctly after changing themes.
270 -- **Fixed printer setup navigation** -- printer vendor tabs now respond correctly after the 1.9.0 printer flow changes.
271 -- **Updated translations** -- includes the latest translation metadata for improved app language support.
238 +- **The web app's local database can shrink again after it has grown large.** The clean-up that reclaims space failed on every attempt once the file was very large, so it only ever grew and the till could fail to start on it.
239 +- **Rows zeroed by a power cut or an unfinished write no longer stop local database clean-up**; they are recognised as empty and dropped.
240 +- **Stores behind Cloudflare: a security check during connection now reports HOST121 with a link to the Cloudflare guide**, instead of "Site does not seem to be a WordPress site".
241 +- **Stores behind Cloudflare see a notice on the POS General settings screen** explaining which firewall rule to add so the POS is not blocked.
242 +- **Firefox and Safari: cancelling a product search no longer records a SYNC321 error.**
243 +- **A new order sent to WooCommerce no longer carries stale line ids**, which WooCommerce rejected with "invalid item id" when the order had already been acknowledged once.
244 +- **Product search no longer loops or crawls on large catalogues.** A search with more than 100 matching products could re-request the same pages until the page was reloaded, and every scroll re-fetched the results from the start.
245 +- **Search results are no longer capped at 100 products**; scrolling loads the rest, one page at a time.
246 +- **Product search fills the grid faster on slow hosting**: one request per page replaces the previous escalating sequence of four.
272 247
273 -= 1.9.0 - 2026/05/15 =
274 -Almost three months of work — here are the highlights:
248 += 1.10.10 - 2026/09/09 =
275 249
276 -- **New receipt template gallery** — pick from ready-made receipt, invoice, quote, packing slip, gift receipt, kitchen ticket, and right-to-left templates, and switch between them in settings.
277 -- **Multiple receipt templates** — install and enable several templates side by side instead of being stuck with one.
278 -- **Thermal printer support** — print receipts directly to thermal printers (58mm and 80mm) over network, Bluetooth, or USB, with a guided setup wizard in the WCPOS apps.
279 -- **Customer Tax IDs** — a new Tax ID field on the customer form, ready for VAT, ABN, GST, and other regional tax numbers.
280 -- **Pro: Coupons at the POS** — search for and apply coupons at checkout, with coupon pills in the cart and support for sequential discounts.
281 -- **Pro: Refunds at the POS** — refund POS orders directly from the till, with a full audit trail.
282 -- **Pro: Per-store receipt templates** — assign different templates to different stores, and drag-and-drop to reorder them.
283 -- Plus lots of smaller fixes — tax and coupon calculations, third-party plugin compatibility, faster syncs, and better translations.
250 +- **Security: cashiers can no longer change the email or password of administrator or other staff accounts** through the POS. POS users can only edit customer accounts.
251 +- **Users with more than one role (for example administrator plus customer through the Members plugin) no longer get "forbidden" on every product load and sale**, and when access really is denied the error names the missing capability.
252 +- **Stores using WooCommerce Tax (TaxJar) keep stable tax-rate IDs on POS saves**, so county and city rates no longer swap places on the order.
253 +- **Stores using WooCommerce Tax with tax based on the store address send the store's street to TaxJar**, not the customer's, when a customer shares the store's location.
254 +- **An installed Windows printer no longer hides behind the "no printers yet" screen**, and generic Bluetooth printer profiles set up correctly on iOS and Android.
255 +- **Tapping the cart quantity on iOS and Android selects the number so typing replaces it**, and two-digit quantities no longer clip.
256 +- **Fewer stalls on iPad while the till is idle**: the background variation check runs as one query instead of one per product.
257 +- **The web app repairs a damaged local bookkeeping file** instead of logging the same storage error on every sync.
258 +- **Faster, safer local saves on iOS and Android**: the storage swap file is copied natively and an interrupted write is recovered on the next open.
259 +- **The iOS and Android apps report crashes when telemetry is enabled.**
260 +- Updated translations.
284 261
285 -== Upgrade Notice ==
286 -
287 -= 1.10.1 =
288 -Fixes variations: readable names on products with three or more attributes, variation images on orders and receipts, and disabled variations no longer for sale at the till. Recommended for anyone selling variable products.
289 -
290 -= 1.10.0 =
291 -This is a major update. Please don't update while your store is busy -- pick a time when you have some free time to check everything over, and be ready to roll back if you run into a problem. Don't update lightly.
292 -
293 -= 1.9.0 =
294 -This is a big update with breaking changes. If you're busy, please wait — there's nothing urgent in 1.9.0, and it's safer to give any early bugs a few days to be worked out. Update during quiet time, and always make a backup first.
262 +Earlier releases (1.10.0 – 1.10.9 and the 1.9 series) are listed at https://github.com/wcpos/woocommerce-pos/releases