Easy Digital Downloads
  • Package
  • Function
  • Tree

Packages

  • EDD
    • Admin
      • Actions
      • Add-ons
      • Dashboard
      • Discounts
      • Downloads
      • Export
      • Notices
      • Pages
      • Payments
      • Reports
      • Settings
      • System
      • Upgrades
      • Upload
      • Welcome
    • Cart
    • Checkout
    • Classes
      • API
      • Fees
      • HTML
      • Roles
      • Session
    • Emails
    • Functions
      • AJAX
      • Compatibility
      • Errors
      • Formatting
      • Install
      • Login
      • Taxes
      • Templates
    • Gateways
    • Logging
    • Payments
    • Shortcodes
    • Widgets

Functions

  • edd_admin_email_notice
  • edd_apply_email_template
  • edd_default_email_styling
  • edd_default_email_template
  • edd_email_default_formatting
  • edd_email_preview_templage_tags
  • edd_email_purchase_receipt
  • edd_email_template_preview
  • edd_email_template_tags
  • edd_email_test_purchase_receipt
  • edd_get_admin_notice_emails
  • edd_get_email_body_content
  • edd_get_email_body_footer
  • edd_get_email_body_header
  • edd_get_email_templates
  • edd_render_receipt_in_browser
  • edd_resend_purchase_receipt
  • edd_send_test_email
  • edd_trigger_purchase_receipt
  1 <?php
  2 /**
  3  * Email Template
  4  *
  5  * @package     EDD
  6  * @subpackage  Emails
  7  * @copyright   Copyright (c) 2013, Pippin Williamson
  8  * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
  9  * @since       1.0
 10  */
 11 
 12 // Exit if accessed directly
 13 if ( !defined( 'ABSPATH' ) ) exit;
 14 
 15 /**
 16  * Gets all the email templates that have been registerd. The list is extendable
 17  * and more templates can be added.
 18  *
 19  * @since 1.0.8.2
 20  * @return array $templates All the registered email templates
 21  */
 22 function edd_get_email_templates() {
 23     $templates = array(
 24         'default' => __( 'Default Template', 'edd' ),
 25         'none'    => __( 'No template, plain text only', 'edd' )
 26     );
 27 
 28     return apply_filters( 'edd_email_templates', $templates );
 29 }
 30 
 31 /**
 32  * Email Template Tags
 33  *
 34  * @since 1.0
 35  *
 36  * @param string $message Message with the template tags
 37  * @param array $payment_data Payment Data
 38  * @param int $payment_id Payment ID
 39  *
 40  * @return string $message Fully formatted message
 41  */
 42 function edd_email_template_tags( $message, $payment_data, $payment_id ) {
 43     global $edd_options;
 44 
 45     $has_tags = ( strpos($message, '{' ) !== false );
 46     if ( ! $has_tags ) return $message;
 47 
 48     $user_info = maybe_unserialize( $payment_data['user_info'] );
 49 
 50     $fullname = '';
 51     if ( isset( $user_info['id'] ) && $user_info['id'] > 0 && isset( $user_info['first_name'] ) ) {
 52         $user_data = get_userdata( $user_info['id'] );
 53         $name      = $user_info['first_name'];
 54         $fullname  = $user_info['first_name'] . ' ' . $user_info['last_name'];
 55         $username  = $user_data->user_login;
 56     } elseif ( isset( $user_info['first_name'] ) ) {
 57         $name     = $user_info['first_name'];
 58         $fullname = $user_info['first_name'] . ' ' . $user_info['last_name'];
 59         $username = $user_info['first_name'];
 60     } else {
 61         $name     = $user_info['email'];
 62         $username = $user_info['email'];
 63     }
 64 
 65     $file_urls     = '';
 66     $download_list = '<ul>';
 67     $downloads     = edd_get_payment_meta_downloads( $payment_id );
 68 
 69     if ( $downloads ) {
 70         $show_names = apply_filters( 'edd_email_show_names', true );
 71 
 72         foreach ( $downloads as $download ) {
 73             $id = isset( $payment_data['cart_details'] ) ? $download['id'] : $download;
 74 
 75             if ( $show_names ) {
 76                 $download_list .= '<li>' . apply_filters( 'edd_email_receipt_download_title', get_the_title( $id ), $id ) . '<br/>';
 77                 $download_list .= '<ul>';
 78             }
 79 
 80             $price_id = isset( $download['options']['price_id'] ) ? $download['options']['price_id'] : null;
 81 
 82             $files = edd_get_download_files( $id, $price_id );
 83 
 84             if ( $files ) {
 85                 foreach ( $files as $filekey => $file ) {
 86                     $download_list .= '<li>';
 87                     $file_url = edd_get_download_file_url( $payment_data['key'], $payment_data['email'], $filekey, $id, $price_id );
 88                     $download_list .= '<a href="' . esc_url( $file_url ) . '">' . $file['name'] . '</a>';
 89 
 90                     $download_list .= '</li>';
 91 
 92                     $file_urls .= esc_html( $file_url ) . '<br/>';
 93                 }
 94             }
 95 
 96             if ( $show_names ) {
 97                 $download_list .= '</ul>';
 98             }
 99 
100             if ( '' != edd_get_product_notes( $id ) )
101                 $download_list .= ' &mdash; <small>' . edd_get_product_notes( $id ) . '</small>';
102 
103             if ( $show_names ) {
104                 $download_list .= '</li>';
105             }
106         }
107     }
108     $download_list .= '</ul>';
109 
110     $subtotal   = isset( $payment_data['subtotal'] ) ? $payment_data['subtotal'] : $payment_data['amount'];
111     $subtotal   = edd_currency_filter( edd_format_amount( $subtotal ) );
112     $tax        = isset( $payment_data['tax'] ) ? $payment_data['tax'] : 0;
113     $tax        = edd_currency_filter( edd_format_amount( $tax ) );
114     $price      = edd_currency_filter( edd_format_amount( $payment_data['amount'] ) );
115     $gateway    = edd_get_gateway_checkout_label( get_post_meta( $payment_id, '_edd_payment_gateway', true ) );
116     $receipt_id = $payment_data['key'];
117 
118     $message = str_replace( '{name}', $name, $message );
119     $message = str_replace( '{fullname}', $fullname, $message );
120     $message = str_replace( '{username}', $username, $message );
121     $message = str_replace( '{download_list}', $download_list, $message );
122     $message = str_replace( '{file_urls}', $file_urls, $message );
123     $message = str_replace( '{date}', date_i18n( get_option( 'date_format' ), strtotime( $payment_data['date'] ) ), $message );
124     $message = str_replace( '{sitename}', get_bloginfo( 'name' ), $message );
125     $message = str_replace( '{subtotal}', $subtotal, $message );
126     $message = str_replace( '{tax}', $tax, $message );
127     $message = str_replace( '{price}', $price, $message );
128     $message = str_replace( '{payment_method}', $gateway, $message );
129     $message = str_replace( '{receipt_id}', $receipt_id, $message );
130     $message = str_replace( '{payment_id}', $payment_id, $message );
131     $message = str_replace( '{receipt_link}', sprintf( __( '%1$sView it in your browser.%2$s', 'edd' ), '<a href="' . add_query_arg( array ( 'purchase_key' => $receipt_id, 'edd_action' => 'view_receipt' ), home_url() ) . '">', '</a>' ), $message );
132 
133     $message = apply_filters( 'edd_email_template_tags', $message, $payment_data, $payment_id );
134 
135     return $message;
136 }
137 
138 /**
139  * Email Preview Template Tags
140  *
141  * @since 1.0
142  * @global $edd_options Array of all the EDD Options
143  * @param string $message Email message with template tags
144  * @return string $message Fully formatted message
145  */
146 function edd_email_preview_templage_tags( $message ) {
147     global $edd_options;
148 
149     $download_list = '<ul>';
150     $download_list .= '<li>' . __( 'Sample Product Title', 'edd' ) . '<br />';
151     $download_list .= '<ul>';
152     $download_list .= '<li>';
153     $download_list .= '<a href="#">' . __( 'Sample Download File Name', 'edd' ) . '</a> - <small>' . __( 'Optional notes about this download.', 'edd' ) . '</small>';
154     $download_list .= '</li>';
155     $download_list .= '</ul></li>';
156     $download_list .= '</ul>';
157 
158     $file_urls = esc_html( trailingslashit( get_site_url() ) . 'test.zip?test=key&key=123' );
159 
160     $price = edd_currency_filter( edd_format_amount( 10.50 ) );
161 
162     $gateway = 'PayPal';
163 
164     $receipt_id = strtolower( md5( uniqid() ) );
165 
166     $notes = __( 'These are some sample notes added to a product.', 'edd' );
167 
168     $tax = edd_currency_filter( edd_format_amount( 1.00 ) );
169 
170     $sub_total = edd_currency_filter( edd_format_amount( 9.50 ) );
171 
172     $payment_id = rand(1, 100);
173 
174     $message = str_replace( '{download_list}', $download_list, $message );
175     $message = str_replace( '{file_urls}', $file_urls, $message );
176     $message = str_replace( '{name}', 'John', $message );
177     $message = str_replace( '{fullname}', 'John Doe', $message );
178     $message = str_replace( '{username}', 'john-doe', $message );
179     $message = str_replace( '{date}', date( get_option( 'date_format' ), time() ), $message );
180     $message = str_replace( '{subtotal}', $sub_total, $message );
181     $message = str_replace( '{tax}', $tax, $message );
182     $message = str_replace( '{price}', $price, $message );
183     $message = str_replace( '{receipt_id}', $receipt_id, $message );
184     $message = str_replace( '{payment_method}', $gateway, $message );
185     $message = str_replace( '{sitename}', get_bloginfo( 'name' ), $message );
186     $message = str_replace( '{product_notes}', $notes, $message );
187     $message = str_replace( '{payment_id}', $payment_id, $message );
188     $message = str_replace( '{receipt_link}', sprintf( __( '%1$sView it in your browser.%2$s', 'edd' ), '<a href="' . add_query_arg( array ( 'purchase_key' => $receipt_id, 'edd_action' => 'view_receipt' ), home_url() ) . '">', '</a>' ), $message );
189 
190     return wpautop( $message );
191 }
192 
193 /**
194  * Email Default Formatting
195  *
196  * @since 1.0
197  * @param string $message Message without <p> tags
198  * @return string $message Formatted message with <p> tags added
199  */
200 function edd_email_default_formatting( $message ) {
201     return wpautop( $message );
202 }
203 add_filter( 'edd_purchase_receipt', 'edd_email_default_formatting' );
204 
205 /**
206  * Email Template Preview
207  *
208  * @access private
209  * @global $edd_options Array of all the EDD Options
210  * @since 1.0.8.2
211  */
212 function edd_email_template_preview() {
213     global $edd_options;
214 
215     $default_email_body = __( "Dear", "edd" ) . " {name},\n\n";
216     $default_email_body .= __( "Thank you for your purchase. Please click on the link(s) below to download your files.", "edd" ) . "\n\n";
217     $default_email_body .= "{download_list}\n\n";
218     $default_email_body .= "{sitename}";
219 
220     $email_body = isset( $edd_options['purchase_receipt'] ) ? $edd_options['purchase_receipt'] : $default_email_body;
221     ob_start();
222     ?>
223     <a href="#email-preview" id="open-email-preview" class="button-secondary" title="<?php _e( 'Purchase Receipt Preview', 'edd' ); ?> "><?php _e( 'Preview Purchase Receipt', 'edd' ); ?></a>
224     <a href="<?php echo wp_nonce_url( add_query_arg( array( 'edd_action' => 'send_test_email' ) ), 'edd-test-email' ); ?>" title="<?php _e( 'This will send a demo purchase receipt to the emails listed below.', 'edd' ); ?>" class="button-secondary"><?php _e( 'Send Test Email', 'edd' ); ?></a>
225 
226     <div id="email-preview-wrap" style="display:none;">
227         <div id="email-preview">
228             <?php echo edd_apply_email_template( $email_body, null, null ); ?>
229         </div>
230     </div>
231     <?php
232     echo ob_get_clean();
233 }
234 add_action( 'edd_email_settings', 'edd_email_template_preview' );
235 
236 /**
237  * Email Template Header
238  *
239  * @access private
240  * @since 1.0.8.2
241  * @return string Email template header
242  */
243 function edd_get_email_body_header() {
244     ob_start();
245     ?>
246     <html>
247     <head>
248         <style type="text/css">#outlook a { padding: 0; }</style>
249     </head>
250     <body>
251     <?php
252     do_action( 'edd_email_body_header' );
253     return ob_get_clean();
254 }
255 
256 /**
257  * Email Template Body
258  *
259  * @since 1.0.8.2
260  * @param int $payment_id Payment ID
261  * @param array $payment_data Payment Data
262  * @return string $email_body Body of the email
263  */
264 function edd_get_email_body_content( $payment_id = 0, $payment_data = array() ) {
265     global $edd_options;
266 
267     $default_email_body = __( "Dear", "edd" ) . " {name},\n\n";
268     $default_email_body .= __( "Thank you for your purchase. Please click on the link(s) below to download your files.", "edd" ) . "\n\n";
269     $default_email_body .= "{download_list}\n\n";
270     $default_email_body .= "{sitename}";
271 
272     $email = isset( $edd_options['purchase_receipt'] ) ? $edd_options['purchase_receipt'] : $default_email_body;
273 
274     $email_body = edd_email_template_tags( $email, $payment_data, $payment_id );
275 
276     return apply_filters( 'edd_purchase_receipt', $email_body, $payment_id, $payment_data );
277 }
278 
279 /**
280  * Email Template Footer
281  *
282  * @since 1.0.8.2
283  * @return string Email template footer
284  */
285 function edd_get_email_body_footer() {
286     ob_start();
287     do_action( 'edd_email_body_footer' );
288     ?>
289     </body>
290     </html>
291     <?php
292     return ob_get_clean();
293 }
294 
295 /**
296  * Applies the Chosen Email Template
297  *
298  * @since 1.0.8.2
299  * @param string $body The contents of the receipt email
300  * @param int $payment_id The ID of the payment we are sending a receipt for
301  * @param array $payment_data An array of meta information for the payment
302  * @return string $email Formatted email with the template applied
303  */
304 function edd_apply_email_template( $body, $payment_id, $payment_data ) {
305     global $edd_options;
306 
307     $template_name = isset( $edd_options['email_template'] ) ? $edd_options['email_template'] : 'default';
308     $template_name = apply_filters( 'edd_email_template', $template_name, $payment_id );
309 
310     if ( $template_name == 'none' ) {
311         if ( is_admin() )
312             $body = edd_email_preview_templage_tags( $body );
313 
314         return $body; // Return the plain email with no template
315     }
316 
317     ob_start();
318 
319     do_action( 'edd_email_template_' . $template_name );
320 
321     $template = ob_get_clean();
322 
323     if ( is_admin() )
324         $body = edd_email_preview_templage_tags( $body );
325 
326     $body = apply_filters( 'edd_purchase_receipt_' . $template_name, $body );
327 
328     $email = str_replace( '{email}', $body, $template );
329 
330     return $email;
331 }
332 add_filter( 'edd_purchase_receipt', 'edd_apply_email_template', 20, 3 );
333 
334 /**
335  * Default Email Template
336  *
337  * @access private
338  * @since 1.0.8.2
339  */
340 function edd_default_email_template() {
341     echo '<div style="width: 550px; border: 1px solid #ccc; background: #f0f0f0; padding: 8px 10px; margin: 0 auto;">';
342     echo '<div id="edd-email-content" style="background: #fff; border: 1px solid #ccc; padding: 10px;">';
343     echo '{email}'; // This tag is required in order for the contents of the email to be shown
344     echo '</div>';
345     echo '</div>';
346 }
347 add_action( 'edd_email_template_default', 'edd_default_email_template' );
348 
349 /**
350  * Default Email Template Styling Extras
351  *
352  * @since 1.0.9.1
353  * @param string $email_body Email template without styling
354  * @return string $email_body Email template with styling
355  */
356 function edd_default_email_styling( $email_body ) {
357     $first_p    = strpos( $email_body, '<p>' );
358     $email_body = substr_replace( $email_body, '<p style="margin-top:0;">', $first_p, 3 );
359     $email_body = str_replace( '<ul>', '<ul style="margin:0 0 10px 0; padding: 0;">', $email_body );
360     $email_body = str_replace( '<li>', '<li style="display:block;margin:0 0 4px 0;">', $email_body );
361 
362     return $email_body;
363 }
364 add_filter( 'edd_purchase_receipt_default', 'edd_default_email_styling' );
365 
366 /**
367  * Render Receipt in the Browser
368  *
369  * A link is added to the Purchase Receipt to view the email in the browser and
370  * this function renders the Purchase Receipt in the browser. It overrides the 
371  * Purchase Receipt template and provides its only styling.
372  *
373  * @since 1.5
374  * @author Sunny Ratilal
375  */
376 function edd_render_receipt_in_browser() {
377     if ( ! isset( $_GET['purchase_key'] ) )
378         wp_die( __( 'Missing purchase key.', 'edd' ), __( 'Error', 'edd' ) );
379 
380     $key = urlencode( $_GET['purchase_key'] );
381 
382     ob_start();
383 ?>
384 <!DOCTYPE html>
385 <html lang="en">
386     <title><?php _e( 'Receipt', 'edd' ); ?></title>
387     <meta charset="utf-8" />
388     <?php wp_head(); ?>
389 </html>
390 <body class="<?php echo apply_filters('edd_receipt_page_body_class', 'edd_receipt_page' ); ?>">
391     <div id="edd_receipt_wrapper">
392         <?php do_action( 'edd_render_receipt_in_browser_before' ); ?>
393         <?php echo do_shortcode('[edd_receipt purchase_key='. $key .']'); ?>
394         <?php do_action( 'edd_render_receipt_in_browser_after' ); ?>
395     </div>
396 <?php wp_footer(); ?>
397 </body>
398 <?php
399     echo ob_get_clean();
400     die();
401 }
402 add_action( 'edd_view_receipt', 'edd_render_receipt_in_browser' );
Easy Digital Downloads API documentation generated by ApiGen 2.8.0