In Woocommerce I am trying to customize the “New account” email notification template changing the texts.
Currently the default template shows the username but intead I want it to show the user email.
I thought I needed to use something like $user_email
but that shows up blank (or empty).
How to get the user email in Woocommerce “New account” email notification template?
That is the customized template that I got where I need to get the user email:
<?php /** * Customer new account email * * This template can be overridden by copying it to yourtheme/woocommerce/emails/customer-new-account.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/ * @author WooThemes * @package WooCommerce/Templates/Emails * @version 1.6.4 */ if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly } ?> <?php do_action( 'woocommerce_email_header', $email_heading, $email ); ?> <p><?php printf( __( 'Thanks for creating an account on %1$s. Your registered email is %2$s', 'woocommerce' ), esc_html( $blogname ), '<strong>' . esc_html( $user_email ) . '</strong>' ); ?></p> <?php if ( 'yes' === get_option( 'woocommerce_registration_generate_password' ) && $password_generated ) : ?> <p><?php printf( __( 'Your password has been automatically generated: %s', 'woocommerce' ), '<strong>' . esc_html( $user_pass ) . '</strong>' ); ?></p> <?php endif; ?> <p><?php printf( __( 'You can access your account area to view your orders and change your password here: %s.', 'woocommerce' ), make_clickable( esc_url( wc_get_page_permalink( 'myaccount' ) ) ) ); ?></p> <?php do_action( 'woocommerce_email_footer', $email );
Advertisement
Answer
In this template, the $user_login
is defined and available. What you can do is to use the WordPress function get_user_by()
with it to get the user email.
So in the template you will have just to replace this line:
<p><?php printf( __( 'Thanks for creating an account on %1$s. Your registered email is %2$s', 'woocommerce' ), esc_html( $blogname ), '<strong>' . esc_html( $user->user_email ) . '</strong>' ); ?></p>
By this instead:
<?php $user = get_user_by('login', $user_login ); if( $user && isset($user->user_email) ): ?> <p><?php printf( __( 'Thanks for creating an account on %1$s. Your registered email is %2$s', 'woocommerce' ), esc_html( $blogname ), '<strong>' . esc_html( $user->user_email ) . '</strong>' ); ?></p> <?php else: ?> <p><?php printf( __( 'Thanks for creating an account on %1$s. Your username is %2$s', 'woocommerce' ), esc_html( $blogname ), '<strong>' . esc_html( $user_login ) . '</strong>' ); ?></p> <?php endif; ?>
This way you will be sure to don’t get any error and you will have the default woocommerce alternative.