Automattic\WooCommerce\Internal\Admin\EmailPreview
EmailPreviewRestController::send_email_preview
Handle the POST /settings/email/send-preview.
Method of the class: EmailPreviewRestController{}
No Hooks.
Returns
Array|WP_Error. Request response or an error.
Usage
$EmailPreviewRestController = new EmailPreviewRestController(); $EmailPreviewRestController->send_email_preview( $request );
- $request(WP_REST_Request) (required)
- The received request.
EmailPreviewRestController::send_email_preview() EmailPreviewRestController::send email preview code WC 10.9.1
public function send_email_preview( WP_REST_Request $request ) {
$email_address = $request->get_param( 'email' );
// Start output buffering to prevent partial renders with PHP notices or warnings.
ob_start();
try {
$email_content = $this->email_preview->render();
} catch ( \Throwable $e ) {
ob_end_clean();
return new WP_Error(
'woocommerce_rest_email_preview_not_rendered',
__( 'There was an error rendering an email preview.', 'woocommerce' ),
array( 'status' => 500 )
);
}
ob_end_clean();
$email_subject = $this->email_preview->get_subject();
// Clone so the recipient mutation below does not persist on the EmailPreview
// singleton: under long-lived runtimes (Roadrunner/FrankenPHP) the cached
// instance is reused across requests, which would leak the test admin's
// address into a later send for a different recipient.
$email = clone $this->email_preview->get_email();
// Set the recipient on the WC_Email instance so it is available to hooks
// (e.g. woocommerce_email_sent) and log entries when the test email is sent.
$email->recipient = $email_address;
$mark_as_test = function ( array $context ): array {
$context['is_test'] = true;
return $context;
};
add_filter( 'woocommerce_email_log_context', $mark_as_test );
try {
$sent = $email->send( $email_address, $email_subject, $email_content, $email->get_headers(), $email->get_attachments() );
} finally {
remove_filter( 'woocommerce_email_log_context', $mark_as_test );
}
if ( $sent ) {
return array(
// translators: %s: Email address.
'message' => sprintf( __( 'Test email sent to %s.', 'woocommerce' ), $email_address ),
);
}
return new WP_Error(
'woocommerce_rest_email_preview_not_sent',
__( 'Error sending test email. Please try again.', 'woocommerce' ),
array( 'status' => 500 )
);
}