2011-12-10 17:28:32 +00:00
< ? php
/**
2012-01-30 19:24:52 +00:00
* Email
*
* WooCommerce Emails Class which handles the sending on transactional emails and email templates
2011-12-10 17:28:32 +00:00
*
2012-01-27 16:38:39 +00:00
* @ class WC_Email
2011-12-10 17:28:32 +00:00
* @ package WooCommerce
* @ category Class
* @ author WooThemes
*/
2012-01-27 16:38:39 +00:00
class WC_Email {
2011-12-10 17:28:32 +00:00
private $_from_address ;
private $_from_name ;
/** constructor */
function __construct () {
$this -> _from_name = get_option ( 'woocommerce_email_from_name' );
$this -> _from_address = get_option ( 'woocommerce_email_from_address' );
/**
* Email Header + Footer
**/
add_action ( 'woocommerce_email_header' , array ( & $this , 'email_header' ));
add_action ( 'woocommerce_email_footer' , array ( & $this , 'email_footer' ));
/**
* Add order meta to email templates
**/
add_action ( 'woocommerce_email_after_order_table' , array ( & $this , 'order_meta' ), 10 , 2 );
/**
* Hooks for sending emails during store events
**/
add_action ( 'woocommerce_low_stock_notification' , array ( & $this , 'low_stock' ));
add_action ( 'woocommerce_no_stock_notification' , array ( & $this , 'no_stock' ));
add_action ( 'woocommerce_product_on_backorder_notification' , array ( & $this , 'backorder' ));
add_action ( 'woocommerce_order_status_pending_to_processing_notification' , array ( & $this , 'new_order' ));
add_action ( 'woocommerce_order_status_pending_to_completed_notification' , array ( & $this , 'new_order' ));
add_action ( 'woocommerce_order_status_pending_to_on-hold_notification' , array ( & $this , 'new_order' ));
add_action ( 'woocommerce_order_status_failed_to_processing_notification' , array ( & $this , 'new_order' ));
add_action ( 'woocommerce_order_status_failed_to_completed_notification' , array ( & $this , 'new_order' ));
add_action ( 'woocommerce_order_status_pending_to_processing_notification' , array ( & $this , 'customer_processing_order' ));
add_action ( 'woocommerce_order_status_pending_to_on-hold_notification' , array ( & $this , 'customer_processing_order' ));
add_action ( 'woocommerce_order_status_completed_notification' , array ( & $this , 'customer_completed_order' ));
add_action ( 'woocommerce_new_customer_note_notification' , array ( & $this , 'customer_note' ));
// Let 3rd parties unhook the above via this hook
do_action ( 'woocommerce_email' , $this );
}
function get_from_name () {
return $this -> _from_name ;
}
function get_from_address () {
return $this -> _from_address ;
}
function get_content_type () {
return 'text/html' ;
}
2012-02-03 16:17:35 +00:00
function email_header ( $email_heading ) {
woocommerce_get_template ( 'emails/email-header.php' , array ( 'email_heading' => $email_heading ));
2011-12-10 17:28:32 +00:00
}
function email_footer () {
2012-02-03 16:17:35 +00:00
woocommerce_get_template ( 'emails/email-footer.php' );
2011-12-10 17:28:32 +00:00
}
/**
* Wraps a message in the woocommerce mail template
**/
2012-01-13 00:46:56 +00:00
function wrap_message ( $email_heading , $message ) {
2011-12-10 17:28:32 +00:00
// Buffer
ob_start ();
2012-02-03 16:17:35 +00:00
do_action ( 'woocommerce_email_header' , $email_heading );
2011-12-10 17:28:32 +00:00
echo wpautop ( wptexturize ( $message ));
do_action ( 'woocommerce_email_footer' );
// Get contents
2012-01-13 11:58:35 +00:00
$message = ob_get_clean ();
2011-12-10 17:28:32 +00:00
return $message ;
}
2012-02-15 18:49:27 +00:00
function send ( $to , $subject , $message , $headers = " Content-Type: text/html \r \n " , $attachments = " " ) {
2011-12-10 17:28:32 +00:00
add_filter ( 'wp_mail_from' , array ( & $this , 'get_from_address' ) );
add_filter ( 'wp_mail_from_name' , array ( & $this , 'get_from_name' ) );
add_filter ( 'wp_mail_content_type' , array ( & $this , 'get_content_type' ) );
2012-01-17 17:31:42 +00:00
ob_start ();
2012-01-13 11:58:35 +00:00
wp_mail ( $to , $subject , $message , $headers , $attachments );
2011-12-10 17:28:32 +00:00
2012-01-17 17:31:42 +00:00
ob_end_clean ();
2011-12-10 17:28:32 +00:00
// Unhook
remove_filter ( 'wp_mail_from' , array ( & $this , 'get_from_address' ) );
remove_filter ( 'wp_mail_from_name' , array ( & $this , 'get_from_name' ) );
remove_filter ( 'wp_mail_content_type' , array ( & $this , 'get_content_type' ) );
}
/**
* New order
**/
function new_order ( $order_id ) {
2012-01-27 16:38:39 +00:00
$order = new WC_Order ( $order_id );
2011-12-10 18:40:51 +00:00
2012-01-05 11:31:22 +00:00
$email_heading = __ ( 'New Customer Order' , 'woocommerce' );
2011-12-10 17:28:32 +00:00
2012-02-02 11:53:44 +00:00
$blogname = wp_specialchars_decode ( get_option ( 'blogname' ), ENT_QUOTES );
$subject = apply_filters ( 'woocommerce_email_subject_new_order' , sprintf ( __ ( '[%s] New Customer Order (# %s)' , 'woocommerce' ), $blogname , $order_id ), $order );
2011-12-10 17:28:32 +00:00
// Buffer
ob_start ();
// Get mail template
2012-02-03 16:17:35 +00:00
woocommerce_get_template ( 'emails/admin-new-order.php' , array (
'order' => $order ,
'email_heading' => $email_heading
));
2011-12-10 17:28:32 +00:00
// Get contents
$message = ob_get_clean ();
2012-03-03 11:34:49 +00:00
// CC, BCC, additional headers
2012-03-05 09:44:22 +00:00
$headers = apply_filters ( 'woocommerce_email_headers' , '' , 'new_order' );
2012-03-03 11:34:49 +00:00
// Attachments
2012-03-05 09:44:22 +00:00
$attachments = apply_filters ( 'woocommerce_email_attachments' , '' , 'new_order' );
2012-03-03 11:34:49 +00:00
2011-12-10 17:28:32 +00:00
// Send the mail
2012-03-03 11:34:49 +00:00
$this -> send ( get_option ( 'woocommerce_new_order_email_recipient' ), $subject , $message , $headers , $attachments );
2011-12-10 17:28:32 +00:00
}
/**
* Processing Order
**/
function customer_processing_order ( $order_id ) {
2012-01-27 16:38:39 +00:00
$order = new WC_Order ( $order_id );
2011-12-10 17:28:32 +00:00
2012-01-05 11:31:22 +00:00
$email_heading = __ ( 'Order Received' , 'woocommerce' );
2011-12-10 17:28:32 +00:00
2012-02-02 11:53:44 +00:00
$blogname = wp_specialchars_decode ( get_option ( 'blogname' ), ENT_QUOTES );
$subject = apply_filters ( 'woocommerce_email_subject_customer_procesing_order' , sprintf ( __ ( '[%s] Order Received' , 'woocommerce' ), $blogname ), $order );
2011-12-10 17:28:32 +00:00
// Buffer
ob_start ();
// Get mail template
2012-02-03 16:17:35 +00:00
woocommerce_get_template ( 'emails/customer-processing-order.php' , array (
'order' => $order ,
'email_heading' => $email_heading
));
2011-12-10 17:28:32 +00:00
// Get contents
$message = ob_get_clean ();
2011-12-12 17:59:39 +00:00
2012-03-03 11:34:49 +00:00
// CC, BCC, additional headers
2012-03-05 09:44:22 +00:00
$headers = apply_filters ( 'woocommerce_email_headers' , '' , 'customer_processing_order' );
2012-03-03 11:34:49 +00:00
2011-12-12 17:59:39 +00:00
// Attachments
2012-03-05 09:44:22 +00:00
$attachments = apply_filters ( 'woocommerce_email_attachments' , '' , 'customer_processing_order' );
2011-12-10 17:28:32 +00:00
// Send the mail
2012-03-03 11:34:49 +00:00
$this -> send ( $order -> billing_email , $subject , $message , $headers , $attachments );
2011-12-10 17:28:32 +00:00
}
/**
* Completed Order
**/
function customer_completed_order ( $order_id ) {
2012-01-27 16:38:39 +00:00
$order = new WC_Order ( $order_id );
2011-12-10 17:28:32 +00:00
2012-01-17 17:01:30 +00:00
if ( $order -> has_downloadable_item ()) :
2012-01-05 11:31:22 +00:00
$subject = __ ( '[%s] Order Complete/Download Links' , 'woocommerce' );
$email_heading = __ ( 'Order Complete/Download Links' , 'woocommerce' );
2011-12-10 17:28:32 +00:00
else :
2012-01-05 11:31:22 +00:00
$subject = __ ( '[%s] Order Complete' , 'woocommerce' );
$email_heading = __ ( 'Order Complete' , 'woocommerce' );
2011-12-10 17:28:32 +00:00
endif ;
2011-12-22 19:59:59 +00:00
$email_heading = apply_filters ( 'woocommerce_completed_order_customer_notification_subject' , $email_heading );
2012-02-02 11:53:44 +00:00
$blogname = wp_specialchars_decode ( get_option ( 'blogname' ), ENT_QUOTES );
$subject = apply_filters ( 'woocommerce_email_subject_customer_completed_order' , sprintf ( $subject , $blogname ), $order );
2011-12-10 17:28:32 +00:00
// Buffer
ob_start ();
// Get mail template
2012-02-03 16:17:35 +00:00
woocommerce_get_template ( 'emails/customer-completed-order.php' , array (
'order' => $order ,
'email_heading' => $email_heading
));
2011-12-10 17:28:32 +00:00
// Get contents
$message = ob_get_clean ();
2011-12-12 17:59:39 +00:00
2012-03-03 11:34:49 +00:00
// CC, BCC, additional headers
2012-03-05 09:44:22 +00:00
$headers = apply_filters ( 'woocommerce_email_headers' , '' , 'customer_completed_order' );
2012-03-03 11:34:49 +00:00
2011-12-12 17:59:39 +00:00
// Attachments
2012-03-05 09:44:22 +00:00
$attachments = apply_filters ( 'woocommerce_email_attachments' , '' , 'customer_completed_order' );
2011-12-10 17:28:32 +00:00
// Send the mail
2012-03-03 11:34:49 +00:00
$this -> send ( $order -> billing_email , $subject , $message , $headers , $attachments );
2011-12-10 17:28:32 +00:00
}
/**
2012-01-29 13:36:33 +00:00
* Pay for order - invoice
2011-12-10 17:28:32 +00:00
**/
2012-01-29 13:36:33 +00:00
function customer_invoice ( $pay_for_order ) {
2011-12-10 17:28:32 +00:00
$order = $pay_for_order ;
2012-02-02 11:53:44 +00:00
$blogname = wp_specialchars_decode ( get_option ( 'blogname' ), ENT_QUOTES );
2012-03-26 20:11:39 +00:00
if ( $order -> status == 'processing' || $order -> status == 'completed' ) {
$email_heading = sprintf ( __ ( 'Your order on %s' , 'woocommerce' ), $blogname );
$subject = apply_filters ( 'woocommerce_email_subject_customer_invoice_paid' , sprintf ( __ ( '[%s] Your order' , 'woocommerce' ), $blogname ), $order );
} else {
$email_heading = sprintf ( __ ( 'Invoice for Order %s' , 'woocommerce' ), $order -> get_order_number () );
$subject = apply_filters ( 'woocommerce_email_subject_customer_invoice' , sprintf ( __ ( '[%s] Pay for Order' , 'woocommerce' ), $blogname ), $order );
}
2011-12-10 17:28:32 +00:00
// Buffer
ob_start ();
// Get mail template
2012-02-03 16:17:35 +00:00
woocommerce_get_template ( 'emails/customer-invoice.php' , array (
'order' => $order ,
'email_heading' => $email_heading
));
2011-12-10 17:28:32 +00:00
// Get contents
$message = ob_get_clean ();
2011-12-12 17:59:39 +00:00
2012-03-03 11:34:49 +00:00
// CC, BCC, additional headers
2012-03-05 09:44:22 +00:00
$headers = apply_filters ( 'woocommerce_email_headers' , '' , 'customer_invoice' );
2012-03-03 11:34:49 +00:00
2011-12-12 17:59:39 +00:00
// Attachments
2012-03-05 09:44:22 +00:00
$attachments = apply_filters ( 'woocommerce_email_attachments' , '' , 'customer_invoice' );
2011-12-12 17:59:39 +00:00
2011-12-10 17:28:32 +00:00
// Send the mail
2012-03-05 09:44:22 +00:00
$this -> send ( $order -> billing_email , $subject , $message , $headers , $attachments );
2011-12-10 17:28:32 +00:00
}
/**
* Customer notes
**/
function customer_note ( $args ) {
$defaults = array (
'order_id' => '' ,
'customer_note' => ''
);
$args = wp_parse_args ( $args , $defaults );
2011-12-11 14:40:25 +00:00
extract ( $args );
2011-12-10 17:28:32 +00:00
if ( ! $order_id || ! $customer_note ) return ;
2012-01-27 16:38:39 +00:00
$order = new WC_Order ( $order_id );
2011-12-10 17:28:32 +00:00
2012-01-05 11:31:22 +00:00
$email_heading = __ ( 'A note has been added to your order' , 'woocommerce' );
2011-12-10 17:28:32 +00:00
2012-02-02 11:53:44 +00:00
$blogname = wp_specialchars_decode ( get_option ( 'blogname' ), ENT_QUOTES );
$subject = apply_filters ( 'woocommerce_email_subject_customer_note' , sprintf ( __ ( '[%s] A note has been added to your order' , 'woocommerce' ), $blogname ), $order );
2011-12-10 17:28:32 +00:00
// Buffer
ob_start ();
// Get mail template
2012-02-03 16:17:35 +00:00
woocommerce_get_template ( 'emails/customer-note.php' , array (
'order' => $order ,
'email_heading' => $email_heading ,
'customer_note' => $customer_note
));
2011-12-10 17:28:32 +00:00
// Get contents
$message = ob_get_clean ();
2012-03-03 11:34:49 +00:00
// CC, BCC, additional headers
2012-03-05 09:44:22 +00:00
$headers = apply_filters ( 'woocommerce_email_headers' , '' , 'customer_note' );
2012-03-03 11:34:49 +00:00
// Attachments
2012-03-05 09:44:22 +00:00
$attachments = apply_filters ( 'woocommerce_email_attachments' , '' , 'customer_note' );
2011-12-10 17:28:32 +00:00
// Send the mail
2012-03-03 11:34:49 +00:00
$this -> send ( $order -> billing_email , $subject , $message , $headers , $attachments );
2011-12-10 17:28:32 +00:00
}
/**
* Low stock notification email
**/
function low_stock ( $product ) {
2012-02-02 11:53:44 +00:00
$blogname = wp_specialchars_decode ( get_option ( 'blogname' ), ENT_QUOTES );
$subject = apply_filters ( 'woocommerce_email_subject_low_stock' , sprintf ( '[%s] %s' , $blogname , __ ( 'Product low in stock' , 'woocommerce' ) ), $product );
2011-12-10 17:28:32 +00:00
2012-03-07 13:38:51 +00:00
$sku = ( $product -> sku ) ? '(' . $product -> sku . ') ' : '' ;
2012-03-27 16:50:08 +00:00
if ( ! empty ( $product -> variation_id ) )
2012-03-07 13:38:51 +00:00
$title = sprintf ( __ ( 'Variation #%s of %s' , 'woocommerce' ), $product -> variation_id , get_the_title ( $product -> id )) . ' ' . $sku ;
else
$title = sprintf ( __ ( 'Product #%s - %s' , 'woocommerce' ), $product -> id , get_the_title ( $product -> id )) . ' ' . $sku ;
$message = $title . __ ( 'is low in stock.' , 'woocommerce' );
2011-12-10 17:28:32 +00:00
2012-03-03 11:34:49 +00:00
// CC, BCC, additional headers
2012-03-05 09:44:22 +00:00
$headers = apply_filters ( 'woocommerce_email_headers' , '' , 'low_stock' );
2012-03-03 11:34:49 +00:00
// Attachments
2012-03-05 09:44:22 +00:00
$attachments = apply_filters ( 'woocommerce_email_attachments' , '' , 'low_stock' );
2012-03-03 11:34:49 +00:00
2011-12-10 17:28:32 +00:00
// Send the mail
2012-03-03 11:34:49 +00:00
wp_mail ( get_option ( 'woocommerce_stock_email_recipient' ), $subject , $message , $headers , $attachments );
2011-12-10 17:28:32 +00:00
}
/**
* No stock notification email
**/
function no_stock ( $product ) {
2012-02-02 11:53:44 +00:00
$blogname = wp_specialchars_decode ( get_option ( 'blogname' ), ENT_QUOTES );
$subject = apply_filters ( 'woocommerce_email_subject_no_stock' , sprintf ( '[%s] %s' , $blogname , __ ( 'Product out of stock' , 'woocommerce' ) ), $product );
2012-03-07 13:38:51 +00:00
$sku = ( $product -> sku ) ? '(' . $product -> sku . ') ' : '' ;
2012-03-27 16:50:08 +00:00
if ( ! empty ( $product -> variation_id ) )
2012-03-07 13:38:51 +00:00
$title = sprintf ( __ ( 'Variation #%s of %s' , 'woocommerce' ), $product -> variation_id , get_the_title ( $product -> id )) . ' ' . $sku ;
else
$title = sprintf ( __ ( 'Product #%s - %s' , 'woocommerce' ), $product -> id , get_the_title ( $product -> id )) . ' ' . $sku ;
$message = $title . __ ( 'is out of stock.' , 'woocommerce' );
2011-12-10 17:28:32 +00:00
2012-03-03 11:34:49 +00:00
// CC, BCC, additional headers
2012-03-05 09:44:22 +00:00
$headers = apply_filters ( 'woocommerce_email_headers' , '' , 'no_stock' );
2012-03-03 11:34:49 +00:00
// Attachments
2012-03-05 09:44:22 +00:00
$attachments = apply_filters ( 'woocommerce_email_attachments' , '' , 'no_stock' );
2012-03-03 11:34:49 +00:00
2011-12-10 17:28:32 +00:00
// Send the mail
2012-03-03 11:34:49 +00:00
wp_mail ( get_option ( 'woocommerce_stock_email_recipient' ), $subject , $message , $headers , $attachments );
2011-12-10 17:28:32 +00:00
}
/**
* Backorder notification email
**/
function backorder ( $args ) {
$defaults = array (
'product' => '' ,
2011-12-23 19:46:27 +00:00
'quantity' => '' ,
'order_id' => ''
2011-12-10 17:28:32 +00:00
);
$args = wp_parse_args ( $args , $defaults );
2011-12-11 14:40:25 +00:00
extract ( $args );
2011-12-10 17:28:32 +00:00
if ( ! $product || ! $quantity ) return ;
2012-02-02 11:53:44 +00:00
$blogname = wp_specialchars_decode ( get_option ( 'blogname' ), ENT_QUOTES );
$subject = apply_filters ( 'woocommerce_email_subject_backorder' , sprintf ( '[%s] %s' , $blogname , __ ( 'Product Backorder' , 'woocommerce' ) ), $product );
2012-03-07 13:38:51 +00:00
$sku = ( $product -> sku ) ? ' (' . $product -> sku . ')' : '' ;
2012-03-27 16:50:08 +00:00
if ( ! empty ( $product -> variation_id ) )
2012-03-07 13:38:51 +00:00
$title = sprintf ( __ ( 'Variation #%s of %s' , 'woocommerce' ), $product -> variation_id , get_the_title ( $product -> id )) . $sku ;
else
$title = sprintf ( __ ( 'Product #%s - %s' , 'woocommerce' ), $product -> id , get_the_title ( $product -> id )) . $sku ;
2011-12-10 17:28:32 +00:00
2012-03-07 13:38:51 +00:00
$message = sprintf ( __ ( '%s units of %s have been backordered in order #%s.' , 'woocommerce' ), $quantity , $title , $order_id );
2011-12-10 17:28:32 +00:00
2012-03-03 11:34:49 +00:00
// CC, BCC, additional headers
2012-03-05 09:44:22 +00:00
$headers = apply_filters ( 'woocommerce_email_headers' , '' , 'backorder' );
2012-03-03 11:34:49 +00:00
// Attachments
2012-03-05 09:44:22 +00:00
$attachments = apply_filters ( 'woocommerce_email_attachments' , '' , 'backorder' );
2012-03-03 11:34:49 +00:00
2011-12-10 17:28:32 +00:00
// Send the mail
2012-03-03 11:34:49 +00:00
wp_mail ( get_option ( 'woocommerce_stock_email_recipient' ), $subject , $message , $headers , $attachments );
2011-12-10 17:28:32 +00:00
}
/**
* Add order meta to email templates
**/
function order_meta ( $order , $sent_to_admin ) {
$meta = array ();
$show_fields = apply_filters ( 'woocommerce_email_order_meta_keys' , array ( 'coupons' ), $sent_to_admin );
if ( $order -> customer_note ) :
2012-03-09 16:12:36 +00:00
$meta [ __ ( 'Note' , 'woocommerce' )] = wptexturize ( $order -> customer_note );
2011-12-10 17:28:32 +00:00
endif ;
if ( $show_fields ) foreach ( $show_fields as $field ) :
$value = get_post_meta ( $order -> id , $field , true );
if ( $value ) $meta [ ucwords ( esc_attr ( $field ))] = wptexturize ( $value );
endforeach ;
if ( sizeof ( $meta ) > 0 ) :
2012-01-05 11:31:22 +00:00
echo '<h2>' . __ ( 'Order information' , 'woocommerce' ) . '</h2>' ;
2011-12-10 17:28:32 +00:00
foreach ( $meta as $key => $value ) :
echo '<p><strong>' . $key . ':</strong> ' . $value . '</p>' ;
endforeach ;
endif ;
}
/**
* Customer new account welcome email
**/
function customer_new_account ( $user_id , $plaintext_pass ) {
if ( ! $user_id || ! $plaintext_pass ) return ;
$user = new WP_User ( $user_id );
$user_login = stripslashes ( $user -> user_login );
$user_email = stripslashes ( $user -> user_email );
$user_pass = $plaintext_pass ;
$blogname = wp_specialchars_decode ( get_option ( 'blogname' ), ENT_QUOTES );
2012-01-05 11:31:22 +00:00
$subject = apply_filters ( 'woocommerce_email_subject_customer_new_account' , sprintf ( __ ( 'Your account on %s' , 'woocommerce' ), $blogname ), $user );
$email_heading = __ ( 'Your account details' , 'woocommerce' );
2011-12-10 17:28:32 +00:00
// Buffer
ob_start ();
// Get mail template
2012-02-03 16:17:35 +00:00
woocommerce_get_template ( 'emails/customer-new-account.php' , array (
'user_login' => $user_login ,
'user_pass' => $user_pass ,
'blogname' => $blogname ,
'email_heading' => $email_heading
));
2011-12-10 17:28:32 +00:00
// Get contents
$message = ob_get_clean ();
2012-03-03 11:34:49 +00:00
// CC, BCC, additional headers
2012-03-05 09:44:22 +00:00
$headers = apply_filters ( 'woocommerce_email_headers' , '' , 'customer_new_account' );
2012-03-03 11:34:49 +00:00
// Attachments
2012-03-05 09:44:22 +00:00
$attachments = apply_filters ( 'woocommerce_email_attachments' , '' , 'customer_new_account' );
2012-03-03 11:34:49 +00:00
2011-12-10 17:28:32 +00:00
// Send the mail
2012-03-03 11:34:49 +00:00
$this -> send ( $user_email , $subject , $message , $headers , $attachments );
2011-12-10 17:28:32 +00:00
}
2012-01-27 16:38:39 +00:00
}
/** Depreciated */
class woocommerce_email extends WC_Email {
public function __construct () {
_deprecated_function ( 'woocommerce_email' , '1.4' , 'WC_Email()' );
parent :: __construct ();
}
2012-03-03 11:34:49 +00:00
}