Dynamic QR Codes
Changelog
Every release of Dynamic QR Codes for WooCommerce, newest first. Features marked Pro are part of the paid add-on; everything else ships in the free plugin on WordPress.org.
2.0.0 — 5 November 2026
The big one: QR Coupon for WooCommerce is now Dynamic QR Codes for WooCommerce. Same plugin, same WordPress.org slug, same settings and data — your existing codes keep scanning. Requires WordPress 6.1+, WooCommerce 7.0+, and PHP 7.4+.
Highlights
- Dynamic codes — change a code’s coupon, label and caption after it’s printed, or retire it. Printed copies follow the change, codes printed with 1.x included. A retired code applies no coupon and sends scans to the product page (or the shop).
- Scan counts you can trust — bots, crawlers and link previews (WhatsApp, Telegram, Facebook and others) are no longer counted and never add to a cart. Unique scans show next to total scans.
- QR orders show their source in WooCommerce Order Attribution and Google Analytics — every scan carries UTM tags, so an order’s Origin reads “Source: qr” instead of “Direct”.
- One-step create with a live preview, and PNG and SVG downloads.
- Pro Print first, assign later with blank codes and the phone-friendly Scan a code screen; bundle codes, link codes, parcel inserts and bulk create.
New
- A new name and admin menu: QR Codes, with All QR Codes and a QR codes box on each product.
- Short, easier-to-scan addresses: new codes encode
yourstore.com/?qrcw=k7m2xa. - Short links (opt-in): new codes can use
yourstore.com/q/k7m2xafor an even less dense code. Needs any permalink setting except Plain; Settings → Permalinks shows a read-only QR code short links row so nobody breaks printed codes by accident. - Copy link: share a code’s link in a message or email. Clicks are counted apart from scans; lists show Visits (scans + link clicks).
- Tracking tags: UTM tags on every scan (
utm_source=qr,utm_medium=print, the campaign and the code), on by default, under Settings → Links & tracking. - Google Tag Manager / GA4: a scan pushes one
qr_scanevent to thedataLayer. The plugin never loads GTM or GA itself — your tag setup and consent decide what’s sent. - A Create QR code button on All QR Codes, and a Get started panel that walks a new store from its first code to its first phone scan.
- Images on demand: download PNG or SVG from any code’s row, or add it to the Media Library when you want a file.
- Restyle codes you already made: Use the current site design in the Edit dialog, or the Apply current site design bulk action. Printed copies keep working.
- Bulk Retire / Reactivate on All QR Codes.
- Documentation and Support links on the Plugins screen, plus “learn more” links next to the settings they explain.
- Pro Scan a code: point your phone at a printed code to find, edit, retire or assign it. Checking a code never counts as a scan.
- Pro Blank codes: print a batch of up to 500 codes first, stick them up, then assign each one with Scan a code.
- Pro Bundle codes: one scan puts up to 20 products in the cart and applies a coupon once. Create one from All QR Codes → Create QR code → Bundle.
- Pro Link codes to any page on your store or any website, with or without a campaign. Codes to other websites report scans only.
- Pro Parcel inserts: a QR codes for this order box on the order screen lists the codes to print and drop in the parcel.
- Pro Edit more after printing: product or variation, destination, fallback page for retired codes, campaign and the code’s own design.
- Pro Bulk create codes for many products at once from the WooCommerce Products list, and Print selected on All QR Codes.
- Pro UTM tags per campaign.
- Pro Print layouts replace print sheets: saved settings that reprint with each code’s current details, flagged Changed since saved when a code was edited since.
Improved
- Clearer, consistent screens: plain wording, British spelling, and renamed Settings tabs — QR design, Links & tracking, Cleanup. Every empty list says what it’s for.
- Simpler code rows: Edit, Download (PNG, SVG, Media Library), Copy link, Retire and Delete in one place, with a thumbnail for every code.
- All QR Codes has a separate Destination column showing where a scan goes today: the product, a link’s address, a bundle, or for a retired code its fallback page, product page or the shop.
- All QR Codes fits screens from 960 px without overflowing: the code address is cut at its start, so the identifier stays visible, and row actions no longer wrap.
- Dialogs and settings tabs with more content below show a fade and a small arrow, since macOS hides scrollbars.
- Admin notices from WordPress, WooCommerce and other plugins sit below the page title on every plugin screen, instead of inside the guide’s header card.
- Bundled Freemius SDK updated to 2.13.5, with security hardening.
- Keyboard-friendly dialogs and tabs, and layouts that no longer cut off dropdowns or clip the preview on narrow screens.
- The one-code-per-product notice only appears once a product has its code, instead of on every product.
- Users with
edit_products(e.g. a custom “product editor” role) now get the QR Codes menu and can create and edit codes there. - All QR Codes opens much faster with a long scan history, flags codes whose product is in the trash, and shows coupon codes in uppercase.
- The database update runs automatically on your first admin visit (or with
wp qrcw upgrade), never on a customer’s request, and never blocks scans. - Pro Analytics: bots and link previews left out of every report; unique scans and link clicks next to scans; clearer names; a helpful empty state before the first scan; faster Overview and Products pages; rates formatted for your locale.
- Pro Smaller print PDFs named after the code, with an option to print each code’s address under it.
- Pro Clear roles: product editors can scan, assign and link codes to store pages; external destinations, campaigns and Analytics stay with store managers.
- Pro The guide’s Pro tab is now More ways to use codes, and an inactive licence opens All QR Codes with a renewal link instead of an error — your codes keep working.
Fixed
- Page-cache plugins can no longer cache scan responses (which swallowed scans and skipped the add-to-cart); HEAD and prefetch requests no longer run it.
- A cached copy of the page a scan opens no longer drops the scan’s message or its
qr_scanevent: the landing URL gets a one-offqrcw_nparameter that the page removes from the address bar. - Coupon pickers no longer offer expired coupons or ones at their usage limit.
- A scan greets the customer once, and its message (out of stock, offer ended) now reaches first-time visitors.
- Variable products: codes show their variation, and a code without one keeps its coupon until the customer picks.
- A saved code keeps its gradient and own colours when printed; deleting its image outside the admin no longer breaks it.
- Settings show “Settings saved.”; clearing scan history updates counts at once; dialog buttons follow the site language; an expired session shows a clear message instead of failing silently.
- Activation and updates no longer rebuild the plugin’s table columns on every run; deactivation and uninstall leave nothing behind.
- Safe to roll back: a site that returns to 2.0 after a later update keeps scanning normally, and its newer database is never downgraded. Uninstall removes every option, table and meta the plugin added, including any a later version created.
- Pro Frame text is centred on downloads and printed PDFs; the print preview encodes your store’s address; failed campaign and layout actions say why.
- Pro Analytics tables no longer repeat or skip rows across pages; the funnel’s middle step is now “Reached product or page” and also counts scans whose coupon was refused.
Developers (breaking)
- Codes are identified by their code ID, not an attachment ID.
qrcw_cart_taggednow passes the code ID first;qrcw_delete_qris replaced byqrcw_delete_code;qrcw_intercept_scan,qrcw_resolve_attachment_idandqrcw_get_product_codesare removed. - REST:
GET qrcw/v1/products/{id}has a new response shape;GET qrcw/v1/urlis removed.QRCW_Tracker::count_by_attachment()is removed. - New: a documented PHP API (six functions), public lifecycle hooks, WP-CLI commands (
wp qrcw status,wp qrcw upgrade) and a deprecation policy. - Pro Analytics detail URLs use
?code=(was?qr=); print sheets saved as PDFs in 1.x are no longer listed (the files stay in the Media Library). - 2.0.0 is the last release that breaks without notice. Full details: Upgrading from 1.x.
Requirements
- WordPress 6.1 or newer (was 6.0). WooCommerce 7.0+ and PHP 7.4+ unchanged.
- Back up before updating. You can go back to 1.x with your data intact and 1.x codes keep scanning, but codes created in 2.0 don’t reach their product on 1.x: standard ones open your shop, short links show “page not found”.
1.0.0 — 24 June 2026
The first public release. Requires WordPress 6.0+, WooCommerce 7.0+, and PHP 7.4+.
- One-click QR code generation straight from the product edit screen.
- Coupon pre-selection — embed any existing WooCommerce coupon in the code.
- Save QR images to the Media Library or download them as PNG.
- Variable-product support — generate variation-specific codes.
- A scan counter on every QR code.
- An All QR Codes management screen with search, sort, and bulk delete.
- Privacy-respecting scan logging — IPs stored as an HMAC-SHA256 hash, never in the clear.
- Optional diagnostic logging (off by default) via WooCommerce’s logger — kept on your server, never transmitted.
- Stock-aware — a friendly notice for out-of-stock products.
- No external API — QR images are generated client-side in the browser.
The free version generates one QR code per product (one per variation for variable products). Pro lifts that limit and adds:
- Unlimited QR codes per product.
- Visual QR design — dot and corner styles, gradients, logos, and printable frames.
- Print sheets — arrange multiple codes on a page and export a print-ready PDF.
- Campaigns — group codes into campaigns, each with its own tracking link.
- Quick coupon creator — create a WooCommerce coupon without leaving the QR screen.
- Analytics — per-code performance, scan timelines, and order-level conversion and revenue attribution.
Following along? The free plugin’s release notes are also published on its WordPress.org page.
