Email Preview Integration
Overview
WooCommerce’s Email Preview feature allows you to preview email templates using dummy data (i.e., it doesn’t use the actual data from the database). This means that extensions registering new email types need to integrate with the email preview system to properly showcase their emails.
Integration Hooks
The following hooks allow extensions to take full control of email preview:
Style and Content Settings
These hooks allow extensions to add new style and content settings that the email preview listens for changes, and updates the preview when changes are made.
woocommerce_email_preview_email_style_setting_ids
Add new email style settings that the email preview listens for changes.
add_filter( 'woocommerce_email_preview_email_style_setting_ids', function( $setting_ids ) {
$setting_ids[] = 'my_extension_email_style';
return $setting_ids;
} );
woocommerce_email_preview_email_content_setting_ids
Add new email content settings that the email preview listens for changes.
add_filter( 'woocommerce_email_preview_email_content_setting_ids', function( $setting_ids ) {
$setting_ids[] = 'my_extension_email_content';
return $setting_ids;
} );
Dummy Data Modification
woocommerce_email_preview_dummy_order
Modify the dummy WC_Order
object used in preview.
add_filter( 'woocommerce_email_preview_dummy_order', function( $order ) {
// Modify the dummy order object
$order->set_currency( 'EUR' );
return $order;
} );
woocommerce_email_preview_dummy_product
Modify the dummy product used in preview.
add_filter( 'woocommerce_email_preview_dummy_product', function( $product ) {
// Modify the dummy product object
$product->set_name( 'My Product' );
return $product;
} );
woocommerce_email_preview_dummy_product_variation
Modify the dummy product variation used in preview.
add_filter( 'woocommerce_email_preview_dummy_product_variation', function( $variation ) {
// Modify the dummy variation object
$variation->set_name( 'My Variation' );
return $variation;
} );
woocommerce_email_preview_dummy_address
Modify the dummy address used in preview.
add_filter( 'woocommerce_email_preview_dummy_address', function( $address ) {
// Modify the dummy address array
$address['first_name'] = 'Preview';
$address['last_name'] = 'Customer';
return $address;
} );
Placeholders and Email Object
woocommerce_email_preview_placeholders
Modify placeholders to be replaced in the email.
add_filter( 'woocommerce_email_preview_placeholders', function( $placeholders ) {
// Add custom placeholders
$placeholders['{custom_placeholder}'] = 'Custom Value';
return $placeholders;
} );
woocommerce_prepare_email_for_preview
Modify the WC_Email
object used in preview.
add_filter( 'woocommerce_prepare_email_for_preview', function( $email ) {
// Modify the email object, e.g. to replace WC_Order
$email->set_object( $custom_object );
return $email;
} );
Best Practices
When integrating with email preview:
-
Use Appropriate Object Types
- Use the correct object type for your extension (e.g.,
WC_Subscription
instead ofWC_Order
for WooCommerce Subscriptions) - Ensure all required properties are set on dummy objects
- Use the correct object type for your extension (e.g.,
-
Handle Placeholders
- Add all custom placeholders your extension uses
- Provide realistic preview values for placeholders
-
Style and Content Settings
- Register all custom settings that affect email appearance or content
-
Testing
- Test preview with different email types
- Verify all custom content appears correctly
- Check responsive design
Troubleshooting
Common issues and solutions:
-
I see “There was an error rendering an email preview.” error
- There is a PHP error in your code that is causing the email preview to fail. Check your error log for more details.
- Alternatively, you can modify
class-wc-admin.php
and removetry/catch
block around rendering the email preview to see the error message.
-
Style or Content Settings Changes Not Reflecting
- Ensure the style settings are registered using the
woocommerce_email_preview_email_style_setting_ids
filter - Ensure the content settings are registered using the
woocommerce_email_preview_email_content_setting_ids
filter
- Ensure the style settings are registered using the
-
I don’t see my extension’s emails
- Ensure the email is registered using the
woocommerce_email_classes
filter
- Ensure the email is registered using the
Last updated: March 13, 2025