• Resolved jpattwell

    (@jpattwell)


    Hello, I would like to edit my current new order email to have the sku of the products in a separate column instead of having the name and sku in the same field. How would I change the template to make this happen? What hooks have to be changed or added?

    Here is the current email:
    https://snipboard.io/N9YJQa.jpg

    The page I need help with: [log in to see the link]

Viewing 3 replies - 1 through 3 (of 3 total)
  • EDIT: question misread

    • This reply was modified 5 years, 1 month ago by crslz.

    This template can be overridden by copying it to yourtheme/woocommerce/emails/…

    The code from the following template file

    https://github.com/woocommerce/woocommerce/blob/3.8.0/templates/emails/email-order-items.php

    Becomes this

    <?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 ) );
    
    		// 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>
    		<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
    			// SKU.
    			if ( $show_sku && $sku ) {
    				echo wp_kses_post( ' (#' . $sku . ')' );
    			}
    			?>
    		</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; ?>

    —————————-

    The code from the following template file

    https://github.com/woocommerce/woocommerce/blob/3.8.0/templates/emails/email-order-details.php

    Becomes this

    <?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>
    				<th class="td" scope="col" style="text-align:<?php echo esc_attr( $text_align ); ?>;"><?php esc_html_e( 'SKU', '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="3" 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 ); ?>
    Thread Starter jpattwell

    (@jpattwell)

    Thank you for your help. Worked perfectly.

Viewing 3 replies - 1 through 3 (of 3 total)
  • The topic ‘Separating out order fields in new order emails’ is closed to new replies.