Settings
Settings Reference
Every setting in Easy PDF Invoices for WooCommerce, organised by tab. The settings live under WooCommerce > Settings > Invoices and use native WooCommerce field types (SelectWoo, the WP color picker, the WordPress media library).
All settings are stored in a single consolidated epdi_settings option. Sequential counters live in their own option rows for atomic updates.
General tab
Enable PDF generation
Master switch. Disable to stop the plugin from generating PDFs without deactivating it.
- Default: Enabled
Document type mode
Controls how the plugin decides Invoice vs Receipt vs Credit Note.
- Auto (recommended) — uses order status: refunded → credit note, paid → receipt, otherwise invoice.
- Always Invoice — every order generates an Invoice regardless of payment status.
- Always Receipt — every order generates a Receipt with PAID badge.
- Default: Auto
Paper size
PDF paper size for non-thermal templates.
- A4 — 210 × 297 mm.
- Letter — 8.5 × 11 inches.
- Auto-detect from store country — Letter for US/CA, A4 elsewhere.
- Default: Auto-detect
Date format
How dates render in PDF documents.
- WordPress default — uses
get_option('date_format'). - Custom — pick from a date format picker (e.g.,
j F Y,Y-m-d,n/j/Y). - Default: WordPress default
Language
PDF language source.
- Inherit from WordPress — uses the site language at the time of generation.
- Override — pick a specific locale.
- Default: Inherit
Branding tab
Company logo
Click Upload logo to open the WordPress media library.
- Recommended: 600 × 200 px PNG or JPG at 72 dpi.
- Appears on every document except Minimal (text-only by design).
- Default: empty (uses WooCommerce store logo if set, otherwise the site logo).
Template variant
Pick from four bundled variants.
- Modern — Stripe-inspired, clean, sans-serif. Default.
- Classic — formal serif, centred title.
- Minimal — accountant-friendly, monospace numbers.
- Thermal — 80mm POS receipt printer layout.
Accent colour
Used for document title underline, grand total row, and PAID badge background.
- Default:
#2c3338
Footer text
Free-text footer that appears at the bottom of every document. Plain text only — line breaks are preserved, HTML is stripped.
- Default: empty
QR code on packing slips
Off by default. When enabled, a QR code image is fetched from the QR Server API and embedded in every packing slip. The encoded payload is the order edit URL (admin-side) for warehouse scanning.
- Cached locally for 12 hours per order.
- See Compatibility > External services for privacy details.
- Default: Disabled
Legal tab
Tax/VAT number
Your store's VAT or sales tax registration number. Appears on every document.
- Default: empty
Company registration number
Companies House number, EIN, IRD, or whatever your jurisdiction requires.
- Default: empty
Registered name
If different from the company name on the Branding tab.
- Default: empty (uses Company name from Branding)
Registered address
If different from the company address.
- Default: empty (uses WooCommerce store address)
Terms and conditions
Free-text terms that appear on invoices only (not receipts or credit notes). Use this for payment terms, late fees, or any contractual language.
Plain text. Line breaks preserved.
- Default: empty
Numbering tab
Invoice numbering
Format preview
A live preview of the next invoice number, updating as you change the fields below.
Prefix
Free text before the number. Date placeholders supported: {YYYY}, {YY}, {MM}, {DD}.
- Default:
INV-
Suffix
Free text after the number.
- Default: empty
Padding digits
Number of digits to pad the sequential number with leading zeros (1–10).
- Default:
6(e.g.,000042)
Start number
The first number to use.
- Default:
1
Annual reset
When on, the counter resets to Start number on the first order of each calendar year. Combined with the {YYYY} placeholder, this produces year-scoped sequences.
- Default: Off
Next number display + manual override
Shows the number that will be assigned to the next invoice. Click Override to set a specific value with a confirmation dialog.
The override has a uniqueness check — you can't set it to a number already in use by an existing order. Use carefully; setting the next number lower than already-issued numbers can break tax compliance.
Credit note numbering
Same fields as invoice numbering, but for credit notes. Independent counter so credit note numbers don't collide with invoice numbers.
- Default prefix:
CN-
Emails tab
Per-email toggles
Toggle attachment on or off for each WooCommerce email type:
| Default | |
|---|---|
| Customer Processing Order | On |
| Customer Completed Order | On |
| Customer Refunded Order | On |
| Customer Partially Refunded Order | On |
| Customer Invoice / Order Details | Off |
| New Order (admin) | On |
Attachment method
Controls how the PDF gets to the customer.
- Attachment — file attached to the email.
- Link — download link in the email body, no attachment.
- Both — file attached and link in the body.
- None — neither.
- Default: Attachment
Download link position
When the attachment method is link or both, controls where the link appears in the email body.
- Before order table — top of the body.
- After order table — bottom of the body.
- Default: After order table
Advanced tab
PDF storage directory
Filesystem path where generated PDFs are stored.
- Default:
wp-content/uploads/easy-pdf-invoices/ - Each PDF lives in a year/month subdirectory:
easy-pdf-invoices/2026/04/. - Filenames include a random hash to defeat URL guessing.
- Directory is created on activation with
.htaccess,web.config, andindex.phpto block direct access.
epdi_storage_dir filter, but this is rarely needed.
Auto-cleanup old PDFs
Delete PDF files older than X days. The plugin can regenerate them on demand if a customer downloads later.
0= never (default).- Useful for stores with strict storage budgets and high order volume.
Enable REST API
Off by default. When on, three endpoints become available under /wp-json/epdi/v1/documents/:
GET /documents/{order_id}— invoice metadata.GET /documents/{order_id}/pdf— PDF binary.POST /documents/{order_id}/regenerate— force regeneration.
manage_woocommerce capability. See REST API for the full spec.
- Default: Disabled
Debug mode
When on, the plugin logs info events to WooCommerce > Status > Logs under the easy-pdf-invoices source: number assignments, PDF generation, attachments, downloads.
By default, only errors are logged.
- Default: Disabled
Uninstall behaviour
What happens when the plugin is deleted from the Plugins screen.
- Keep data — counters, settings, order meta, and PDF files are preserved. Reinstalling restores everything.
- Delete everything — counters, settings, order meta, and PDF files are removed.
uninstall.php script honours this setting.
- Default: Keep data
Tools panel
The Advanced tab also exposes admin tools as form embeds:
CSV export
Filter by date range and document type, then download as CSV with UTF-8 BOM (Excel-friendly).
Backfill past orders
Generate PDFs for past orders within a date range. Optional Force checkbox regenerates existing PDFs too.
Backfill queues each order via Action Scheduler. Monitor progress under Tools > Scheduled Actions.
See Admin Tools for full documentation on these tools.
Programmatic access
Read settings:
$settings = get_option( 'epdi_settings', array() );
$prefix = $settings['numbering']['invoice_prefix'] ?? 'INV-';
Or use the SettingsRepository facade for typed access:
$repo = \EasyPDFInvoices\Settings\SettingsRepository::instance();
$prefix = $repo->get( 'numbering.invoice_prefix', 'INV-' );
$enabled = $repo->is_enabled( 'enable_pdf_generation' );
Update settings (use sparingly — prefer the settings UI):
$repo->update( 'branding.accent_color', '#0073aa' );
Defaults summary
The full default settings array on a fresh install:
array(
'enable_pdf_generation' => 'yes',
'document_type_mode' => 'auto',
'paper_size' => 'auto',
'date_format' => 'wordpress',
'language' => 'inherit',
'branding' => array(
'logo_id' => 0,
'company_name' => '', // falls back to WC store name
'company_address' => '', // falls back to WC store address
'template_variant' => 'modern',
'accent_color' => '#2c3338',
'footer_text' => '',
'qr_on_packing' => 'no',
),
'legal' => array(
'tax_number' => '',
'registration_number'=> '',
'registered_name' => '',
'registered_address' => '',
'terms_text' => '',
),
'numbering' => array(
'invoice_prefix' => 'INV-',
'invoice_suffix' => '',
'invoice_padding' => 6,
'invoice_start' => 1,
'invoice_annual_reset' => 'no',
'credit_prefix' => 'CN-',
'credit_suffix' => '',
'credit_padding' => 6,
'credit_start' => 1,
'credit_annual_reset' => 'no',
),
'emails' => array(
'attach_to_new_order' => 'yes',
'attach_to_processing' => 'yes',
'attach_to_completed' => 'yes',
'attach_to_refunded' => 'yes',
'attach_to_partially_refunded'=> 'yes',
'attach_to_customer_invoice' => 'no',
'attachment_method' => 'attachment',
'download_link_pos' => 'after',
),
'advanced' => array(
'storage_dir' => '', // computed at runtime
'auto_cleanup_days' => 0,
'rest_api_enabled' => 'no',
'debug_mode' => 'no',
'uninstall_behaviour' => 'keep',
),
);