= 2.9.9 – 2026-06-03 =
- Fix: “Delete All Codes” returned a fatal error (HTTP 500) on every use. removeAllCodesFromList() called a non-existent DB method (_db_select) that was carried over from another plugin; it now uses the correct _db_datenholen() selector. The feature shipped broken in 2.9.8.
- Changed: “Delete All Codes” now deletes in batches (1000 codes per request) driven by a progress modal — like the code-import process — so large lists no longer hit the PHP execution-time limit. The dialog shows a live progress bar and a Cancel button; cancelling simply stops the next batch and keeps the remaining codes.
- Fix: Premium limits were wrongly applied to valid customers whose license serial does not match a fixed XXXX-XXXX-XXXX-XXXX pattern. The local serial check no longer assumes any serial format — the license server remains the single source of truth and the daily cron clears any serial it reports as invalid.
= 2.9.8 – 2026-06-01 =
- New: “Delete All Codes” button on each code list — removes all codes from the selected list with a two-step confirmation (confirm dialog + type DELETE). Mirrors the same feature in Event Tickets.
- Fix: WooCommerce order-item meta cleanup in removeCode() now runs before the DB row is deleted. Previously, the cleanup re-fetched the code after deletion (#204 code not found), leaving WC order-item meta dirty and causing a fatal-error response on every single-code delete.
- UI: Admin table action buttons (Codes / Edit / Delete All / Delete) are now lightweight ghost-style links grouped into button groups — less visual bulk, clearer hierarchy between neutral and destructive actions.
- UI: Toolbar buttons (Import, Export, Empty table) are grouped into inline button groups with a shared border. All admin buttons are slightly smaller (padding and font-size reduced) to feel lighter alongside the theme.
= 2.9.7 – 2026-05-05 =
- Fix: License-key modal no longer nags on every admin page load. Clicking “Later” now silences the prompt for 24 hours (per browser, via localStorage) instead of re-popping on the next click. Customers can still enter the key any time on the plugin’s Options page — the field is rendered there.
- i18n: 3 Premium-side license-expiry strings (“Your premium serial will expire in X days”, “Your premium serial has expired”, “Renew now”) now translated in all 23 languages. Previously these lived under the Premium plugin’s textdomain so customers saw English-only text on translated sites — strings consolidated to this plugin’s textdomain (see Premium 2.5.8).
Update your plugin from within your WordPress plugin area as usual.
In case you want to revert your update: Go to the advance tab of the plugin home.
There is the option to download an older version that can be installed via upload within your WordPress plugin area.