PDF Invoice and Packing Slip for WooCommerce

Changelog

1.8.1 – 21/06/2026

  • Fix: Yearly invoice counter reset could race under concurrent Jan 1 requests, causing two invoices to receive the same number. The reset now runs inside the advisory lock alongside the counter increment.
  • Fix: When no prefix or suffix was configured, the literal text “prefix” or “suffix” appeared verbatim on invoices. These now fall back to an empty string.
  • Fix: When PDF generation failed, the upload directory itself could be added as an email attachment. The attachment is now skipped unless the document was saved successfully and has a valid file path.
  • Fix: Admin success and warning notices could be triggered by a crafted URL with no authentication check. Notices are now verified with a nonce before being displayed.
  • Fix: An unexpected error during auto-generation left an internal reentrancy guard permanently set, silently suppressing all further auto-generation for the rest of that request. The guard is now always reset even if an error occurs.
  • Fix: Viewing or emailing a PDF was vulnerable to directory traversal via a tampered file path stored in order meta; bulk-action result notices now require a nonce before rendering; PDF generation error messages are sanitised before being stored in admin notices.
  • Fix: Invoice table no longer crashes on orders with zero-quantity line items; shipping and fee rows now include the SKU column cell when SKU display is enabled; shipping tax is summed as a float rather than an integer; the Subtotal row shows product lines only and no longer double-counts fees and shipping; zero-cost shipping lines are suppressed; empty product SKUs fall back to “-“.
  • Fix: The HTML preview endpoint always resets its document global after rendering, even if an error occurs mid-template; bulk generation count now reflects only orders where the PDF was actually saved; PDF open/download behaviour is now resolved per document type; payment due date field description clarifies it is calculated from order creation date; logo URL field is no longer read-only.

1.8.0 – 14/06/2026

  • New: Added a payment due date to invoices – configure the offset in days from General Settings.
  • New: Added an HTML preview button in the order metabox – check the invoice or packing slip layout without generating a PDF.
  • Fix: Downloaded PDFs no longer include stray HTML content after the file data, which could corrupt the download on some browsers.
  • Fix: Creating an invoice or packing slip from a draft or incomplete order no longer causes a fatal error.
  • Fix: When generating multiple PDFs in bulk or via email attachments, templates no longer bleed into each other from leftover hooks of a previous generation.
  • Fix: If PDF generation fails partway through, the invoice number is now held in reserve and reused on the next attempt – no more gaps in your invoice sequence from a failed save.
  • Fix: Accessing invoice details on an order that could not be loaded no longer causes a fatal error.

1.7.0 – 07/06/2026

  • New: Added an option to show the customer’s note (entered at checkout) on the invoice.
  • New: Added an option to control tax display in invoice totals – show each tax class as a separate line, or collapse them into a single tax total.
  • New: Added a Documentation page accessible directly from the Plugins list.
  • Improvement: Auto-generate status and email attachment settings now use checkboxes instead of a multi-select list – much easier to pick and toggle options.
  • Fix: When a PDF fails to generate, an admin notice now appears so you always know something went wrong.

1.6.0 – 30/05/2026

  • New: Live invoice preview panel – see exactly how your invoice looks while you’re adjusting settings, without saving first.
  • New: Smarter invoice numbering – use simple tokens like {number}, {year}, and {month} to build your own format (e.g. INV-{number}/{year}{month}). Existing formats are upgraded automatically.
  • Fix: PDFs no longer crash on orders that were created without a date (e.g. via import or migration tools).
  • Fix: Packing slip incorrectly showed “Invoice Date” — now correctly shows “Packing Date”.
  • Fix: Company logo is now properly sized and right-aligned on both invoice and packing slip templates.
  • Fix: Long addresses and notes no longer cause unwanted scrollbars inside the invoice preview.
  • Improvement: The invoice preview panel stays hidden until you need it, keeping the settings page clean.
  • Compatibility: Tested and confirmed working with WooCommerce 10.8.1.

1.5.1 – 22/05/2026

  • Compatibility: Tested and confirmed working with WordPress 7.0.
  • Improved plugin description for clarity.
  • Dev: Renamed all internal hooks, filters, and constants from wpwing_wcpi_ to wpwing_wcpdf_ for better long-term naming. Existing data is migrated automatically — no action needed.

1.5.0 – 18/05/2026

  • New: Auto-generate invoice and packing slip on configurable order status change.
  • New: Attach invoice and packing slip PDF to any WooCommerce transactional email.
  • New: Bulk generate invoices and packing slips from the WooCommerce orders list.
  • New: Invoice and packing slip status column on the orders list.
  • New: Structured company information fields — address, city, ZIP, country, phone, email, and VAT/tax ID.
  • New: Paper size selection (A4 or Letter).
  • New: Option to show shipping address on invoice.
  • New: Option to show product SKU column on invoice.
  • New: Yearly invoice number reset option.
  • New: Option to skip invoice generation for free (zero-total) orders.
  • New: Multiple template selection — Default and Modern templates included.
  • New: Live invoice and packing slip preview in Template settings.
  • New: High-Performance Order Storage (HPOS) compatibility.
  • Security: All document actions (create, view, cancel) are now CSRF-protected with nonces.
  • Update: My Account invoice button uses WooCommerce native action — no longer breaks flex layout.
  • Update: Cancel invoice/packing slip now shows a confirmation dialog before proceeding.
  • Update: Admin notices confirm success or failure after every document action.
  • Compatibility check with WordPress v6.9 and WooCommerce v10.7.0.
  • Few minor improvements.

1.4.3 – 22/04/2024

  • Compatibility check with WordPress v6.5 and WooCommerce v8.8.
  • Few minor improvements.

1.4.2 – 17/02/2024

  • Compatibility check with WC’s latest version.
  • Few minor improvements.

1.4.1 – 20/01/2024

  • Update: DOM PDF version 2.0.4
  • Compatibility check with WP’s latest version.
  • Compatibility check with WC’s latest version.
  • Few minor improvements.

1.4.0 – 17/06/2023

  • Update: Remove WPWing prefix from the plugin name
  • Update: Invoice and Packing slip open in new tab
  • Few minor improvements.

1.3.4 – 17/04/2023

  • Fix: Refactor and update the DOMPDF library.

1.3.3 – 12/07/2022

  • Fix: Refactor and update code.

1.3.2 – 17/06/2022

  • Fix: Deactive if the dependent WooCommerce plugin is not activated.
  • Few minor improvements.

1.3.1 – 08/06/2022

  • Update: Add download invoice feature in customer “My Account > Orders” section.
  • Few minor improvements.

1.3.0 – 08/05/2022

  • Update: Invoice settings template UI/UX.
  • Update: DOMPDF version updated to 1.2.2
  • Few minor improvements.

1.2.0 – 04/02/2022

  • Update: Add global condition for sending email to the customer billing address.
  • Update: DOMPDF version updated to 1.1.1
  • Fix: Appropriate text for Invoice Settings checkbox.
  • Few minor improvements.

1.1.0 – 25/12/2021

  • Update: Send PDF Invoice attached with email when admin creates an invoice.
  • Few minor bug fixes and improvements.

1.0.1 – 15/10/2021

  • Update: Settings text.
  • Update: Set the default invoice number if empty in the settings section.

1.0.0 – 14/10/2021

  • initial release.

Plugin Website
Visit website

Author
WPWing
Version:
1.8.1
Last Updated
June 20, 2026
Requires
WordPress 4.8
Tested Up To
WordPress 7.0
Requires PHP
7.1

Share Post

Join our newsletter.

Get insights into what’s happening at ChangelogWP right in your inbox. We don’t believe in spam.