Developer reference
Customise customer email templates safely
Override WooCommerce-style PressFlow emails while preserving private access and current event data.
Guide source reviewed for PressFlow 1.25.1.
Start with WooCommerce → Settings → Emails for subjects, headings, enablement and additional content. Use a template override only when the shop needs a deeper layout change.
Email IDs
Print-job IDs are pfw_customer_action, pfw_customer_production, pfw_customer_date, pfw_customer_dispatch and pfw_customer_message. Quote IDs are pfw_quote_received and pfw_quote_offer.
Print-job subject/heading placeholders include {site_title}, {order_number} and {job_id}. Quote templates use {site_title} and the applicable {quote_number}. Do not assume a job-only placeholder works in a quote email.
Override paths
Copy the relevant current plugin template into your child theme, retaining its relative path under woocommerce:
your-child-theme/woocommerce/emails/customer-print-job.php
your-child-theme/woocommerce/emails/plain/customer-print-job.php
your-child-theme/woocommerce/emails/customer-quote.php
your-child-theme/woocommerce/emails/plain/customer-quote.php
These templates are loaded with wc_get_template() and the plugin template directory as the fallback. This override mechanism applies to these emails; it is not a generic override loader for the directly included configurator template.
Available template context
Job templates receive $email, $order, $item, $event, $email_heading, $additional_content, $sent_to_admin and $plain_text. Quote templates receive $email, $quote, $type and the normal heading/content/plain flags. Copy the exact current template rather than constructing an email from unrestricted item metadata.
The HTML job template uses PFW_Customer_Email::lines($order, $item, $event) for a small allowlisted public payload, and the guarded workspace URL. Preserve this distinction: internal flags, staff notes, artwork bytes, activation records and arbitrary snapshot fields should not be exposed in customer emails.
Keep woocommerce_email_header / woocommerce_email_footer where appropriate, escape text and URLs, retain current-proof/workspace access links and test both HTML and plain output. Private guest links are deliberate access credentials; do not add them to unrelated recipients or public tracking URLs.
Queue behavior
Notifications follow committed changes and can coalesce/supersede older events. Demo orders are suppressed. Disabled messages are not retry failures. The classes keep their per-job template content even when WooCommerce's global email block editor is enabled; do not assume a new global block email design replaces this payload automatically.
After customising, test each event type against an account job and a guest job, current/changed proof, date, delivery/collection, message and revised quote. Verify retries do not issue duplicate decisions/offers. Keep mail-provider credentials outside templates.
Related: Printer email guide, Data/security, Testing.
Example files
Reference examples for adapting to your shop. PHP examples are not plugin installers; review the guide and replace sample IDs before using them.
Need a hand?
Contact the PressFlow team with details of what you are trying to do.