Changelog
All notable changes to KSeF Pro for WooCommerce are documented here. The format follows Keep a Changelog.
[2.1.0] — March 2026
Added
FA(2) schema 2.0 support
Mandatory from April 2026 per Ministry of Finance decree. Schema 2.0 revises the <Podmiot1> and <Podmiot2> block structure, updates VAT rate code handling for edge cases, and adds new OSS annotation elements. KSeF Pro 2.1.0 generates schema 2.0 exclusively. No configuration changes are required — the schema version is selected automatically.
Stores on schema 1.x that have not upgraded before April 2026 will see FA(2) submissions rejected by the MF API. Update before the April 2026 deadline.
WP-CLI command suite
A new set of WP-CLI subcommands for queue management without browser access:
wp ksefpl submit <order-id> # Submit a specific order to KSeF immediately
wp ksefpl status <order-id> # Show the KSeF submission status for an order
wp ksefpl retry-failed # Batch-retry all eligible FAILED queue entries
wp ksefpl queue --format=table # Display the current queue with status countsThese commands are particularly useful for headless setups (Adobe Commerce Cloud, containerized deployments) where browser access to the WP admin is inconvenient. The retry-failed command respects the configured maximum retry limit and skips entries that have already exceeded it.
Audit log in WooCommerce Analytics
The KSeF audit log is now accessible from the WooCommerce Analytics menu (alongside Orders, Revenue, and other standard reports). This provides a unified compliance view without navigating to a separate admin section. The WooCommerce Analytics version of the log is read-only — use the full audit log under WooCommerce → KSeF Pro → Audit Log for retry and export actions.
KSEFPL_FORCE_DB_TRANSIENTS constant
Forces KSeF Pro's scheduling transients to use the WordPress database instead of the object cache (Redis/Memcached). This resolves a specific issue where aggressive cache flushing policies (e.g., flush on every deploy in CI/CD pipelines) reset the cron scheduling transients, causing the four KSeF cron events to become unscheduled. Define in wp-config.php:
define( 'KSEFPL_FORCE_DB_TRANSIENTS', true );Fixed
- WP-Cron schedule not re-registering after plugin update — After an automatic plugin update from 2.0.x to 2.1.0, the four
ksefpl_*cron events were unscheduled and not re-added until deactivate/reactivate. Fixed: an upgrade hook now re-registers cron events immediately after the update completes. - HPOS order meta box rendering failure on WooCommerce 9.0 — The
woocommerce_order_get_metafilter signature changed in WooCommerce 9.0 under HPOS. The KSeF meta box failed to render KSeF-ID and status for affected orders. Fixed with a WooCommerce version check that uses the correct meta retrieval path for each version. - JPY decimal precision error — Japanese yen has zero decimal places. KSeF Pro was generating
<KursWaluty>values with a trailing.00for JPY amounts (e.g.,155.00instead of155), causing FA(2) schema validation failure. Fixed: decimal precision is now determined per currency from WooCommerce currency settings.
After Upgrading to 2.1.0
No manual steps required. The schema version switches automatically. The upgrade hook re-registers cron events, so no deactivate/reactivate cycle is needed.
If you use the KSEFPL_ENCRYPTION_KEY constant (introduced in 2.0.0): verify it is still present in wp-config.php after upgrading. Losing this constant after upgrade causes encrypted token decryption failure and requires re-entering your KSeF token.
[2.0.0] — January 2026
Breaking Changes
Minimum PHP version raised to 8.1
PHP 8.0 reached end-of-life in November 2023. Update to PHP 8.1 or 8.2 before upgrading to 2.0.0.
XML storage directory changed
FA(2) XML files moved from wp-content/ksefpl/ to wp-content/uploads/ksefpl-xml/. Automatic migration runs on the first page load after upgrade — existing XML files are moved to the new location. The old directory is not deleted automatically; remove it manually after confirming the migration completed:
# Verify files exist in new location
ls wp-content/uploads/ksefpl-xml/
# Remove old directory only after confirming migration
rm -rf wp-content/ksefpl/Token storage encrypted
KSeF tokens previously stored as plaintext in wp_options are now AES-256 encrypted. The migration runs automatically on first load. Important: ensure your AUTH_KEY in wp-config.php does not change between the upgrade and the first page load. If AUTH_KEY changes after encryption but before the first load, the token cannot be decrypted and must be re-entered in the KSeF Pro settings.
For environments where wp-config.php keys rotate (staging environments, some hosting providers), set a dedicated stable key using the KSEFPL_ENCRYPTION_KEY constant instead:
define( 'KSEFPL_ENCRYPTION_KEY', 'your-stable-64-char-hex-key' );Added
- Paired Mode with Fakturownia Pro for WooCommerce — Dual-channel invoicing from a single order trigger. KSeF-ID written to Fakturownia invoice
numer_kseffield. See Paired Mode. - Shared rule engine — Unified trigger, condition, and VAT mapping configuration when Paired Mode is active.
- Simultaneous trigger option — Paired Mode can fire both channels in parallel with KSeF-ID backfill.
- Per-order "Submit to KSeF now" button — Manual immediate submission from the WooCommerce order detail meta box.
- Correction invoice UI — "Issue correction" button for generating
KORFA(2) documents referencing the original KSeF-ID.
Fixed
- Cron poll interval not honoured with Redis object cache — WP transients used for cron scheduling were being served from Redis cache and not reflecting interval changes. Added cache bypass for scheduling transients.
- Session token transient not cleared on token revocation — A revoked KSeF token caused repeated
10000errors because the cached session token (25-min transient) was still being used. Fixed: auth failure now clears the session transient immediately.
[1.3.1] — November 2025
Fixed
- PHP 8.4 deprecation notices —
preg_replace()withnullarguments deprecated in PHP 8.4. Fixed in the FA(2) XML builder and NIP sanitiser. - UPO download failure with custom
upload_dir— Sites with a customupload_dirWordPress filter (e.g., multisite or offloaded uploads to S3) failed UPO download because the path was constructed fromWP_CONTENT_DIRdirectly. Fixed to usewp_upload_dir(). This fix is important for WooCommerce stores using WP Offload Media or similar S3 plugins — update immediately if UPO downloads are failing on your store.
[1.3.0] — September 2025
Added
- Full HPOS support — Order meta stored in
wc_orders_metaunder HPOS. KSeF-ID column in HPOS orders list. All WP meta functions replaced with HPOS-compatible$order->get_meta()/$order->update_meta_data(). KSEFPL_ENCRYPTION_KEYconstant — Initial implementation (before full encrypted storage in 2.0.0).- Audit log shortcut in WooCommerce admin bar — Quick link to the KSeF audit log from the WooCommerce admin menu.
[1.2.0] — July 2025
Initial public release.
Included at Launch
- KSeF session management (open, submit, close, terminate, poll)
- FA(2) XML generation from WooCommerce order data
- XAdES-BES digital signing via PHP OpenSSL
- UPO download and local storage
- WordPress cron-based asynchronous processing (4 scheduled events)
- WooCommerce order meta integration (KSeF-ID, status, UPO path)
- Admin meta box in order detail with XML preview and manual submission
- Audit log with CSV export
- HPOS and legacy order storage support (legacy only at launch — HPOS added in 1.3.0)
Compatibility at 1.2.0
| Component | Supported | |---|---| | WordPress | 6.3 – 6.5 | | WooCommerce | 8.0 – 8.9 | | PHP | 8.1 – 8.2 | | MySQL | 5.7, 8.0 | | KSeF schema | FA(2) 1.x |