1
votes

I'm trying to reduce the number of emails sent per order on one of my WooCommerce sites.

Right now, customers receive emails for

  • New account created (unless they previously have one)
  • Order Received
  • Order On Hold
  • Order Completed.

I've checked off the Order On Hold and Received emalls, so that takes me from four to two.


I want to display the account login info on the Order Completed email, so I can eliminate sending the Account Created email as well, but when I just copied over the code from the customer-new-account.php email template into the customer-completed-order.php email, the placeholders to list both the username and password become blank, which is quite odd.

This is the code I pasted over into my child theme's WooCommerce folder:

<?php /* translators: %s Customer username */ ?>
<p><?php printf( esc_html__( 'Hi %s,', 'woocommerce' ), esc_html( $user_login ) ); ?></p>
<?php /* translators: %1$s: Site title, %2$s: Username, %3$s: My account link */ ?>
<p><?php printf( __( 'Thanks for creating an account on %1$s. Your username is %2$s. You can access your account area to view orders, change your password, and more at: %3$s', 'woocommerce' ), esc_html( $blogname ), '<strong>' . esc_html( $user_login ) . '</strong>', make_clickable( esc_url( wc_get_page_permalink( 'myaccount' ) ) ) ); ?></p><?php // phpcs:ignore WordPress.XSS.EscapeOutput.OutputNotEscaped ?>

<?php if ( 'yes' === get_option( 'woocommerce_registration_generate_password' ) && $password_generated ) : ?>
    <?php /* translators: %s Auto generated password */ ?>
    <p><?php printf( esc_html__( 'Your password has been automatically generated: %s', 'woocommerce' ), '<strong>' . esc_html( $user_pass ) . '</strong>' ); ?></p>
<?php endif; ?>
1
1) I suppose this data should only be added once (only with the very first order a customer makes)? 2) Also keep in mind that guest users do not create an account during an order (unless that option is not available on your website of course)7uc1f3r
Note that you will not be able to get and display the password on order received page, for security reasons…LoicTheAztec
LoicTheAztec, I don’t want it to appear on the Order Received Page. Only the email.Adam Bell
@AdamBell I think Loic meant this but just typed it wrong. Order page or order complete email... it comes down to the same thing, as you can read in my answer. After creating an account and sending the new account email, the password is immediately hashed and stored in the database for security reasons. That is why you cannot read the unhashed password afterwards.7uc1f3r

1 Answers

0
votes

The thing is that a new account is created immediately after clicking on the "confirm order" button. The user is sent "your account has been created" with a username and password, and the password is written in encrypted form to the database.

The message "completed order" will be sent much later. This letter can no longer get the password from the database, because it is encrypted. Therefore, it is useless to insert variables with a password into the template of the second letter.

This is some kind of moronic American system. In reality, you have to send 2 letters to the user, in which he simply can get confused, and we, the resource administrators, will then receive a claim, or we will persistently explain to the client how to get into the account.

If it were a normal human system, a new account would be created at the moment of the completed order (well, it is logical! The person paid for and an account was created for him). And when an account is created in advance, at the stage of transition to payment, this is the kind of system that the developers have created. A person just enters the card number into the payment system, and he has a letter like this - "here is your username-password! Come on in!" Where to come on!? You did not payed yet!