(added compatibility for WooCommerce versions 3+)
Update 2: Added a condition to display the address IP only for Admin New orders notification. Replaced undefined $email_id
by $email->id;
You can use any related hooks for the emails notifications and you don't need to override the WooCommerce emails templates.
In the example below, the customer IP address will be displayed just before the customer details, using woocommerce_email_customer_details
hook:
add_action('woocommerce_email_customer_details', 'send_customer_ip_adress', 10, 4);
function send_customer_ip_adress($order, $sent_to_admin, $plain_text, $email){
// Just for admin new order notification
if( 'new_order' == $email->id ){
// WC3+ compatibility
$order_id = method_exists( $order, 'get_id' ) ? $order->get_id() : $order->id;
echo '<br><p><strong>Customer IP address:</strong> '. get_post_meta( $order_id, '_customer_ip_address', true ).'</p>';
}
}
This code is tested and is fully functional.
Code goes in function.php file of your active child theme (or theme). Or also in any plugin php files.
You can use also instead these hooks:
woocommerce_email_order_details
woocommerce_email_before_order_table
woocommerce_email_after_order_table
woocommerce_email_order_meta
echo
in an email, so that's likely part of the problem). – random_user_nameecho __( 'Customer IP Address', 'woocommerce' ) . esc_html( get_post_meta( $order->id, '_customer_ip_address', true ) ) . "\n";
– davidchannal