| @@ -3,8 +3,20 @@ | ||
| 3 | 3 | > **The biggest WCPOS release ever.** Almost three months of work, ~330 substantive PRs. Highlights below. |
| 4 | 4 | |
| 5 | 5 | ## Unreleased |
| 6 | 6 | |
| 7 | +- Added (developers): `GET /wcpos/v2/products?per_page=-1&_fields=id,date_modified_gmt,stock_quantity,stock_status` answers every published product the listing would return (products hidden from the POS excluded; `include`, `exclude`, `modified_after` and `dates_are_gmt` honoured) from one database query instead of hydrating each product. Stock values are read from each product's own stock fields, exactly as the product reports them. `GET /wcpos/v2/status` now lists `capabilities`, starting with `products_id_fast_path`. (#2113) | |
| 8 | +- Fixed: Changing or resetting a user's password signs that user out of the POS on every device. Logging out of WordPress in a browser ends the POS session in that browser only; the user's other tills stay signed in. (#2102) | |
| 9 | +- Fixed: Cashiers can only edit customer accounts. Any account with a staff role, other cashiers included, is out of their reach through the POS and through WordPress's own user screens and API. A cashier who also holds the Shop manager role keeps that role's rights. (#2104) | |
| 10 | +- Fixed: a payment gateway that never sets a customer-facing title showed a blank name in **POS → Settings → Checkout** and at the till. WCPOS now falls back to the name WooCommerce shows on its own Payments screen, and then to the gateway ID, and does the same for the description. A title you have set for the POS still wins. (#2122) | |
| 11 | +- Fixed: a cashier whose role lacks `edit_others_shop_orders` (or `delete_others_shop_orders`) could not edit or delete their **own** sales. "Own" was decided from the order's WordPress post author, which WooCommerce sets to user #1 on classic order storage and to whoever was logged in when the row was created on HPOS — neither is the cashier. The POS now treats the cashier an order is assigned to (the one shown on the order in WooCommerce admin) as its owner, on both storage modes; web orders belong to no cashier and still need the `others` capability. Stores using the default Cashier role, which holds `edit_others_shop_orders`, see no change. | |
| 12 | + | |
| 13 | +- Changed: the `wcpos/v2` service map is now derived from the v1 controller map, so a plugin replacing a v1 service through `woocommerce_pos_rest_api_controllers` answers under `wcpos/v2` as well without registering a v2 twin. The fifteen `WCPOS\WooCommercePOS\API\V2\*` pass-through classes are gone and their names alias the v1 classes; a class registered through `woocommerce_pos_rest_api_v2_controllers` no longer needs its own `$namespace`. Outside the registry, subclasses of those aliases inherit the v1 namespace and must set their own. | |
| 14 | + | |
| 15 | +- Fixed: tills could keep showing **Online Only** products that the store had hidden from the POS. From 1.10.1 to 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 stored it locally; the one-time removal notice that 1.10.1 wrote for hidden products predates those copies, and the catalogue change stream never mentions a hidden record again, so the copies stayed on the till until the client's own existence audit reached them — which on a host reporting sustained load runs only a little at a time. 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, no reset or manual sync needed. | |
| 16 | +- Fixed: the **POS Only** and **Online Only** counts above the WooCommerce products list counted trashed and auto-draft products, so the count could exceed the rows the view opens to. They now count the same statuses as WordPress's own "All" view. Note that, like "All", these counts include private, draft and scheduled products, so an Online Only count is expected to be larger than the published Online Only products the POS excludes; add `&post_status=publish` to the view's URL to see the published subset. | |
| 17 | +- Changed: v2 product search requires every typed word to match in any order across title, SKU and barcode; variations search SKU and barcode only. This change pairs with the client release. | |
| 18 | + | |
| 7 | 19 | - Fixed: removing a **variation** from a cart that had already been saved to the server did not stick — the next save brought the variation back, with the store's totals jumping to match. A 1.10.0 regression: the `wcpos/v2` order forward drops the product identity from a variation line whose binding has not changed, so WooCommerce does not duplicate its attribute meta on every re-save, but the till's remove-this-line marker (`product_id: null` on the full settled line) was mistaken for such an unchanged binding and the marker was stripped along with it. Removed variation lines are now forwarded with their marker intact and WooCommerce removes them. Simple products were never affected. |
| 8 | 20 | - Added: receipt discount rows now expose `discount_type`, the WooCommerce coupon type behind each row (`fixed_cart`, `percent`, `fixed_product`, or a type registered by another plugin), so templates and extensions can tell different kinds of coupon apart. Receipt Data schema version is now 1.2.0. Fiscal snapshots captured before this version do not carry the field. |
| 9 | 21 | - Added: `woocommerce_pos_receipt_data` filter on the canonical receipt payload, applied for live receipts, fiscal snapshots, PDF downloads and legacy PHP templates alike. Extensions can add their own keys to any section or adjust labels — the way WooCommerce lets plugins filter order item totals — instead of WCPOS carrying vendor-specific fields. The filter receives the payload, the order and the receipt mode. |
| 10 | 22 | - Fixed: exact SKU and configured-barcode matches now rank ahead of partial matches in POS product search. |