I want to add the price per kilogram of an item to the admin-new-order.php template. I've managed to get the weight and quantity and to echo it (see "104" in screenshot) in the admin-new-order.php
and customer-completed-order.php
templates by adding the following code to email-order-items.php
template file:
$product = $item->get_product();
$product_weight = $product->get_weight();
echo $product_weight;
$qty = $item->get_quantity();
echo $qty;
What I'm missing is the price variable (see "82,80" screenshot) so I can echo a calculation like this:
echo ($subtotal / $product_weight / $qty);
I haven't figured out how to get the item subtotal to echo a calculation with variables yet. But primarily I need to get the the item subtotal, which is shown in the screenshot below.
Afterward I want to echo my calculation as mentioned above. Ideally, this should show in the admin-new-order.php template only. But if it's only possible to show it in both emails by putting the code in the email-order-items.php
it's fine as well.
An advice: Always try to use available hooks, instead of overriding templates.
The following will display the product price by Kilo under the SKU on email order items only for New Order notification:
// Setting the email ID as a global variable
add_action('woocommerce_email_before_order_table', 'set_the_email_id_as_a_global_variable', 1, 4);
function set_the_email_id_as_a_global_variable($order, $sent_to_admin, $plain_text, $email){
$GLOBALS['email_id'] = $email->id;
}
// Display product price by Kilo under the product SKU
add_action( 'woocommerce_order_item_meta_start', 'display_remaining_stock_quantity', 10, 3 );
function display_remaining_stock_quantity( $item_id, $item, $order ) {
// Only for order item "line item" type
if ( !$item->is_type('line_item') ) {
return;
}
$globalsVar = $GLOBALS; // Pass $GLOBALS variable as reference
// Target New Order Email notification
if( isset($globalsVar['email_id']) && $globalsVar['email_id'] === 'new_order' ) {
$product = $item->get_product();
$quantity = $item->get_quantity();
$weight = $product->get_weight();
if ( $weight > 0 ) {
if ( 'excl' === get_option( 'woocommerce_tax_display_cart' ) ) {
$subtotal = $order->get_line_subtotal( $item );
} else {
$subtotal = $order->get_line_subtotal( $item, true );
}
$price_per_kg = $subtotal / $quantity / $weight;
$price_args = array('currency' => $order->get_currency());
echo '<div>' . wc_price( $price_per_kg, $price_args ) . '/kg</div>';
}
}
}
Code goes in functions.php file of your child theme (or in a plugin). Tested and works.
Make sure that the template email-order-items.php
is the default WooCommerce one, without any modifications.