Sending the invoice as a separate step — or asking customers to log in and download it — is friction nobody wants. The right behavior is simple: when an order reaches Processing or Completed, WooCommerce sends its email and the PDF invoice is already attached. Here is how that works, and how to set it up without code.
Which email should carry the invoice?
WooCommerce sends different emails at different order statuses. For most stores the invoice belongs on the Processing order email (payment received) or the Completed order email (fulfilled). Pick one so the customer isn’t sent two copies. B2B and invoice-terms stores often prefer Processing; physical-goods stores often prefer Completed.
Setting it up (no code)
- Install an invoice plugin that supports email attachment, and set your business details, logo and tax info once in its settings.
- Choose the trigger email (Processing or Completed). The plugin hooks WooCommerce’s
woocommerce_email_attachmentsfilter and adds the generated PDF to that message. - Place a test order and move it to that status. The email arrives with
invoice-1234.pdfattached — no manual step.
The details that trip people up
Invoice numbers must be stable. The number assigned when the invoice is first generated has to be stored on the order, so that a reprint or a resend never produces a different number. Accountants and tax authorities require sequential, non-changing invoice numbers. A plugin that regenerates the number on every render is a compliance problem.
The PDF engine must not break the email. If the invoice can’t generate (a host missing a PHP extension, say), the order email must still send. Good plugins degrade gracefully to a printable HTML document instead of throwing a fatal error that stops the email entirely.
Language and currency have to render. The attached PDF should show the customer’s name, address and your currency symbol correctly in any language — see our guide on fixing invoices that don’t render Arabic or RTL text.
What should be free vs. paid
Automatic email attachment, the invoice itself, packing slips, delivery notes, taxes, totals and sequential numbering are table stakes — they should be in the free plugin. Reserve payment for genuine power features: bulk-printing invoices for many orders at once, custom document templates, and credit notes.
The plugin built for this exact problem
Invoices, Packing Slips & Delivery Notes for WooCommerce renders every language — Arabic, Hebrew and Persian right-to-left, plus every accented and non-Latin script — because it ships a full Unicode font and proper text shaping instead of subsetting Latin-only glyphs. The invoice, packing slip and delivery note are free, it attaches the PDF to your order emails automatically, and it works with the block checkout and HPOS.
Related reading: why invoice PDFs don’t render Arabic / RTL text , sequential invoice numbering, and how freemium WordPress plugins work.