Добавление имени и фамилии в уведомление по электронной почте о новой учетной записи в Woocommerce

Моя конкретная проблема заключается в добавлении имени и фамилии в электронную почту новой учетной записи Клиента, и я пробовал различные методы для этого. В конце концов, я остановился на Кодексе, поскольку регистрационные данные woocommerce сохраняются как учетные записи пользователей. Проблема, похоже, в том, что Woocommerce отправляет электронное письмо новому клиенту до того, как пользователь вошел в систему - хотя я мог что-то здесь упустить? Это последний использованный метод, но он дает 0 в User ID, по существу, пользователь не вошел в систему, отсюда и мой предыдущий комментарий. Вот код, который я использую, объединен с шаблоном woocommerce по умолчанию ...

        if ( ! defined( 'ABSPATH' ) ) {
        exit; // Exit if accessed directly
    }

    ?>
    <?php do_action( 'woocommerce_email_header', $email_heading, $email ); ?>

    <?php
        $current_user = wp_get_current_user();
        /**
         * Get current logged in user detail from codex
         */
        echo 'Username: ' . $current_user->user_login . '<br />';
        echo 'User email: ' . $current_user->user_email . '<br />';
        echo 'User first name: ' . $current_user->user_firstname . '<br />';
        echo 'User last name: ' . $current_user->user_lastname . '<br />';
        echo 'User display name: ' . $current_user->display_name . '<br />';
        echo 'User ID: ' . $current_user->ID . '<br />';
    ?>

        <!--<img src = "image-name" style="margin-right:0px;">-->
        <h3 style="text-align:center;" ><?php echo 'Hi '. $current_user->user_firstname . ', welcome to.'; ?></h3>
        <p style="text-align:center;" >Thanks for signing up to our online service.</p>
        <h4 style="text-align:center; color:#289b38; ">Getting in touch  with us.</h4>
        <p style="text-align:center;"><?php printf( __( 'Contact us by phone on: %1$s, or by email to %2$s'), '<strong style="color:#289b38;">0999 999 999</strong>', '<strong><a href="mailto:[email protected]">[email protected]</a></strong>' ); ?></h4>
        <h4 style="text-align:center; color:#2f51a8;">Your account details.</h4>

        <p style="text-align:center;" ><?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 if ( 'yes' === get_option( 'woocommerce_registration_generate_password' ) && $password_generated ) : ?>

        <p style="text-align:center;" ><?php printf( __( 'Your password has been automatically generated: %s', 'woocommerce' ), '<strong>' . esc_html( $user_pass ) . '</strong>' ); ?></p>

    <?php endif; ?>

        <p style="text-align:center;" ><?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>

        <p style="text-align:center;" >Best wishes<p>
        <p style="text-align:center;" >Company name</p>
        <br>
    <?php do_action( 'woocommerce_email_footer', $email );

Результат - «Привет, добро пожаловать ...» без имени. Я что-то здесь пропустил, или мне нужно записать переменную POSTed - POST [billing_first_name]?

Помощь будет очень признательна.

Боб


person bobfelstead    schedule 29.08.2018    source источник


Ответы (3)


Вы не можете получить текущего пользователя, так как это не интерфейс интерфейса. Вместо этого, поскольку переменная $user_login определена в этом шаблоне, вы можете использовать ее для замены объекта WP_User:

$current_user = wp_get_current_user();

by:

$current_user = get_user_by('login', $user_login ); 

Протестировано и работает с emails/customer-new-account.php файлом шаблона. Итак, теперь вы сможете отображать имя и фамилию, если они существуют как метаданные пользователя, с помощью следующего кода для вставки в этот шаблон:

<?php $user = get_user_by('login', $user_login ); ?>
<p><?php 
    _e('First name'); ?>: <?php echo $user->first_name; ?><br /><?php 
    _e('First name'); ?>: <?php echo $user->last_name; 
?></p>
person LoicTheAztec    schedule 29.08.2018
comment
Я не знаю, в чем проблема, но в моем случае имя и фамилия все еще пусты. - person kamp; 24.09.2019
comment
Привет, @LoicTheAztec, я пытался добавить имя и фамилию в свой шаблон электронной почты для нового клиента, но, как сказал OP, электронное письмо запускается до того, как имя и фамилия сохраняются в объекте пользователя. У меня есть настраиваемая форма регистрации, которая использует wc_create_new_customer для создания пользователя, а затем использует update_user_meta для добавления других метаданных пользователя, что также делает невозможным получение first_name в шаблоне электронной почты с приведенным выше кодом. См. Раздел «Объект пользователя», «Объект и код». gist.github.com/bhanu-krenovate/ - person bhanu; 02.11.2020
comment
По состоянию на январь 2021 года (версия WC 4.9.1) это все еще хорошо работает - большое спасибо! ???????? - person AlphaX; 24.01.2021

ниже метод работает для меня

В тему functions.php добавьте ниже код.

add_filter('pre_user_display_name','default_display_name');
function default_display_name($name) {
if ( isset( $_POST['billing_first_name'] ) ) {
$firstname = sanitize_text_field( $_POST['billing_first_name'] );
}
if ( isset( $_POST['billing_last_name'] ) ) {
$lastname = sanitize_text_field( $_POST['billing_last_name'] );
}
$name = $firstname . ' ' . $lastname;
return $name;
}

Затем добавьте приведенный ниже код в файл customer-new-account.php.

$user       = get_user_by('login', $user_login);
<p><?php printf( esc_html__( '%s, Welcome to website!', 'woocommerce' ), esc_html( $user->display_name ) ); ?></p>
person Shibin Suresh    schedule 25.03.2020

Я просто добавил это в customer-new-account.php (в строке «do_action (...)»), и у меня это сработало:

$user = get_user_by('login', $user_login );

// if you need the email address or something else
$email = $user->user_email;

// if you need an extra field from the user metas
$firstname = get_user_meta( $user->ID, 'billing_first_name' , true );
$lastname = get_user_meta( $user->ID, 'billing_last_name', true);

Конечно, вам нужно убедиться, что эти поля сохранены в правильном метаполе при создании учетной записи.

person JoQuery    schedule 03.04.2020