Add column to WooCommerce order email - Add an extra column to the WooCommerce order email. https://www.damiencarbery.com/2020/10/add-column-to-woocommerce-order-email/
<?php | |
/** | |
* Order details table shown in emails. | |
* | |
* This template can be overridden by copying it to yourtheme/woocommerce/emails/email-order-details.php. | |
* | |
* HOWEVER, on occasion WooCommerce will need to update template files and you | |
* (the theme developer) will need to copy the new files to your theme to | |
* maintain compatibility. We try to do this as little as possible, but it does | |
* happen. When this occurs the version of the template file will be bumped and | |
* the readme will list any important changes. | |
* | |
* @see https://docs.woocommerce.com/document/template-structure/ | |
* @package WooCommerce\Templates\Emails | |
* @version 3.7.0 | |
*/ | |
defined( 'ABSPATH' ) || exit; | |
$text_align = is_rtl() ? 'right' : 'left'; | |
do_action( 'woocommerce_email_before_order_table', $order, $sent_to_admin, $plain_text, $email ); ?> | |
<h2> | |
<?php | |
if ( $sent_to_admin ) { | |
$before = '<a class="link" href="' . esc_url( $order->get_edit_order_url() ) . '">'; | |
$after = '</a>'; | |
} else { | |
$before = ''; | |
$after = ''; | |
} | |
/* translators: %s: Order ID. */ | |
echo wp_kses_post( $before . sprintf( __( '[Order #%s]', 'woocommerce' ) . $after . ' (<time datetime="%s">%s</time>)', $order->get_order_number(), $order->get_date_created()->format( 'c' ), wc_format_datetime( $order->get_date_created() ) ) ); | |
?> | |
</h2> | |
<div style="margin-bottom: 40px;"> | |
<table class="td" cellspacing="0" cellpadding="6" style="width: 100%; font-family: 'Helvetica Neue', Helvetica, Roboto, Arial, sans-serif;" border="1"> | |
<thead> | |
<tr> | |
<th class="td" scope="col" style="text-align:<?php echo esc_attr( $text_align ); ?>;"><?php esc_html_e( 'Product', 'woocommerce' ); ?></th> | |
<th class="td" scope="col" style="text-align:<?php echo esc_attr( $text_align ); ?>;"><?php esc_html_e( 'Quantity', 'woocommerce' ); ?></th> | |
<!-- New column for product's categories. --> | |
<th class="td" scope="col" style="text-align:<?php echo esc_attr( $text_align ); ?>;"><?php esc_html_e( 'Categories', 'woocommerce' ); ?></th> | |
<th class="td" scope="col" style="text-align:<?php echo esc_attr( $text_align ); ?>;"><?php esc_html_e( 'Price', 'woocommerce' ); ?></th> | |
</tr> | |
</thead> | |
<tbody> | |
<?php | |
echo wc_get_email_order_items( // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped | |
$order, | |
array( | |
'show_sku' => $sent_to_admin, | |
'show_image' => false, | |
'image_size' => array( 32, 32 ), | |
'plain_text' => $plain_text, | |
'sent_to_admin' => $sent_to_admin, | |
) | |
); | |
?> | |
</tbody> | |
<tfoot> | |
<?php | |
$item_totals = $order->get_order_item_totals(); | |
if ( $item_totals ) { | |
$i = 0; | |
foreach ( $item_totals as $total ) { | |
$i++; | |
?> | |
<tr> | |
<th class="td" scope="row" colspan="3" style="text-align:<?php echo esc_attr( $text_align ); ?>; <?php echo ( 1 === $i ) ? 'border-top-width: 4px;' : ''; ?>"><?php echo wp_kses_post( $total['label'] ); ?></th> | |
<td class="td" style="text-align:<?php echo esc_attr( $text_align ); ?>; <?php echo ( 1 === $i ) ? 'border-top-width: 4px;' : ''; ?>"><?php echo wp_kses_post( $total['value'] ); ?></td> | |
</tr> | |
<?php | |
} | |
} | |
if ( $order->get_customer_note() ) { | |
?> | |
<tr> | |
<th class="td" scope="row" colspan="2" style="text-align:<?php echo esc_attr( $text_align ); ?>;"><?php esc_html_e( 'Note:', 'woocommerce' ); ?></th> | |
<td class="td" style="text-align:<?php echo esc_attr( $text_align ); ?>;"><?php echo wp_kses_post( nl2br( wptexturize( $order->get_customer_note() ) ) ); ?></td> | |
</tr> | |
<?php | |
} | |
?> | |
</tfoot> | |
</table> | |
</div> | |
<?php do_action( 'woocommerce_email_after_order_table', $order, $sent_to_admin, $plain_text, $email ); ?> |
<?php | |
/** | |
* Email Order Items | |
* | |
* This template can be overridden by copying it to yourtheme/woocommerce/emails/email-order-items.php. | |
* | |
* HOWEVER, on occasion WooCommerce will need to update template files and you | |
* (the theme developer) will need to copy the new files to your theme to | |
* maintain compatibility. We try to do this as little as possible, but it does | |
* happen. When this occurs the version of the template file will be bumped and | |
* the readme will list any important changes. | |
* | |
* @see https://docs.woocommerce.com/document/template-structure/ | |
* @package WooCommerce\Templates\Emails | |
* @version 3.7.0 | |
*/ | |
defined( 'ABSPATH' ) || exit; | |
$text_align = is_rtl() ? 'right' : 'left'; | |
$margin_side = is_rtl() ? 'left' : 'right'; | |
foreach ( $items as $item_id => $item ) : | |
$product = $item->get_product(); | |
$sku = ''; | |
$purchase_note = ''; | |
$image = ''; | |
if ( ! apply_filters( 'woocommerce_order_item_visible', true, $item ) ) { | |
continue; | |
} | |
if ( is_object( $product ) ) { | |
$sku = $product->get_sku(); | |
$purchase_note = $product->get_purchase_note(); | |
$image = $product->get_image( $image_size ); | |
} | |
?> | |
<tr class="<?php echo esc_attr( apply_filters( 'woocommerce_order_item_class', 'order_item', $item, $order ) ); ?>"> | |
<td class="td" style="text-align:<?php echo esc_attr( $text_align ); ?>; vertical-align: middle; font-family: 'Helvetica Neue', Helvetica, Roboto, Arial, sans-serif; word-wrap:break-word;"> | |
<?php | |
// Show title/image etc. | |
if ( $show_image ) { | |
echo wp_kses_post( apply_filters( 'woocommerce_order_item_thumbnail', $image, $item ) ); | |
} | |
// Product name. | |
echo wp_kses_post( apply_filters( 'woocommerce_order_item_name', $item->get_name(), $item, false ) ); | |
// SKU. | |
if ( $show_sku && $sku ) { | |
echo wp_kses_post( ' (#' . $sku . ')' ); | |
} | |
// allow other plugins to add additional product information here. | |
do_action( 'woocommerce_order_item_meta_start', $item_id, $item, $order, $plain_text ); | |
wc_display_item_meta( | |
$item, | |
array( | |
'label_before' => '<strong class="wc-item-meta-label" style="float: ' . esc_attr( $text_align ) . '; margin-' . esc_attr( $margin_side ) . ': .25em; clear: both">', | |
) | |
); | |
// allow other plugins to add additional product information here. | |
do_action( 'woocommerce_order_item_meta_end', $item_id, $item, $order, $plain_text ); | |
?> | |
</td> | |
<td class="td" style="text-align:<?php echo esc_attr( $text_align ); ?>; vertical-align:middle; font-family: 'Helvetica Neue', Helvetica, Roboto, Arial, sans-serif;"> | |
<?php | |
$qty = $item->get_quantity(); | |
$refunded_qty = $order->get_qty_refunded_for_item( $item_id ); | |
if ( $refunded_qty ) { | |
$qty_display = '<del>' . esc_html( $qty ) . '</del> <ins>' . esc_html( $qty - ( $refunded_qty * -1 ) ) . '</ins>'; | |
} else { | |
$qty_display = esc_html( $qty ); | |
} | |
echo wp_kses_post( apply_filters( 'woocommerce_email_order_item_quantity', $qty_display, $item ) ); | |
?> | |
</td> | |
<!-- New cell listing product categories. --> | |
<td class="td" style="text-align:<?php echo esc_attr( $text_align ); ?>; vertical-align:middle; font-family: 'Helvetica Neue', Helvetica, Roboto, Arial, sans-serif;"> | |
<?php echo wc_get_product_category_list( $item->get_product_id() ); ?> | |
</td> | |
<td class="td" style="text-align:<?php echo esc_attr( $text_align ); ?>; vertical-align:middle; font-family: 'Helvetica Neue', Helvetica, Roboto, Arial, sans-serif;"> | |
<?php echo wp_kses_post( $order->get_formatted_line_subtotal( $item ) ); ?> | |
</td> | |
</tr> | |
<?php | |
if ( $show_purchase_note && $purchase_note ) { | |
?> | |
<tr> | |
<td colspan="3" style="text-align:<?php echo esc_attr( $text_align ); ?>; vertical-align:middle; font-family: 'Helvetica Neue', Helvetica, Roboto, Arial, sans-serif;"> | |
<?php | |
echo wp_kses_post( wpautop( do_shortcode( $purchase_note ) ) ); | |
?> | |
</td> | |
</tr> | |
<?php | |
} | |
?> | |
<?php endforeach; ?> |
<?php | |
/* | |
Plugin Name: Add column to WooCommerce order email | |
Plugin URI: https://www.damiencarbery.com/2020/10/add-column-to-woocommerce-order-email/ | |
Description: Add an extra column to the WooCommerce order email. | |
Author: Damien Carbery | |
Version: 0.1 | |
WC tested up to: 4.6 | |
*/ | |
/* | |
// This is a hack solution. It is better to edit emails/email-order-items.php template file. | |
add_filter( 'woocommerce_email_order_item_quantity', 'dcwd_order_item_quantity', 10, 2 ); | |
function dcwd_order_item_quantity( $qty_display, $item ) { | |
return $qty_display . '<td class="td" style="vertical-align:middle; font-family: \'Helvetica Neue\', Helvetica, Roboto, Arial, sans-serif;">'.wc_get_product_category_list( $item->get_product_id() ) .'</td>'; | |
} | |
*/ | |
// Use the template file if it is under this plugin directory. | |
add_filter( 'wc_get_template', 'dcwd_get_woocommerce_template', 10, 5 ); | |
function dcwd_get_woocommerce_template( $located, $template_name, $args, $template_path, $default_path ) { | |
$plugin_dir_path = plugin_dir_path( __FILE__ ); | |
// $template_name will be something like 'emails/email-order-items.php' or 'single-product.php' | |
if ( file_exists( $plugin_dir_path . $template_name ) ) { | |
$located = $plugin_dir_path . $template_name; | |
} | |
return $located; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment