Отправить уведомление по электронной почте с сгенерированным паролем при создании пользователя WooCommerce - PullRequest
1 голос
/ 03 мая 2020

В WooCommerce с кодом ниже я создаю новый WP_User с случайным паролем и назначаю роль пользователя «клиент» (я хочу создать учетную запись при покупке автоматически). Затем я использую WC_Emails, чтобы отправить данные для входа покупателю. В этом случае мне нужен простой пароль, но я действительно не знаю, почему все остальные данные прикреплены (имя пользователя, имя, ...), но пароль остается пустым в уведомлении по электронной почте.

Мой код:

  // random password with 12 chars
$user_pass = wp_generate_password();

// create new user with email as username & newly created pw
$user_id = wp_create_user( $order_email, $user_pass, $order_email );
$user_id_role = new WP_User($user_id);
$user_id_role->set_role('customer');


$wc = new WC_Emails();
$wc->customer_new_account($user_id, $user_pass);




//WC guest customer identification
update_user_meta( $user_id, 'guest', 'yes' );

update_user_meta( $user_id, 'first_name', $order->billing_first_name );
update_user_meta( $user_id, 'last_name', $order->billing_last_name );


//user's billing data
update_user_meta( $user_id, 'billing_address_1', $order->billing_address_1 );
update_user_meta( $user_id, 'billing_address_2', $order->billing_address_2 );
update_user_meta( $user_id, 'billing_city', $order->billing_city );
update_user_meta( $user_id, 'billing_company', $order->billing_company );
update_user_meta( $user_id, 'billing_country', $order->billing_country );
update_user_meta( $user_id, 'billing_email', $order->billing_email );
update_user_meta( $user_id, 'billing_first_name', $order->billing_first_name );
update_user_meta( $user_id, 'billing_last_name', $order->billing_last_name );
update_user_meta( $user_id, 'billing_phone', $order->billing_phone );
update_user_meta( $user_id, 'billing_postcode', $order->billing_postcode );
update_user_meta( $user_id, 'billing_state', $order->billing_state );

// user's shipping data
update_user_meta( $user_id, 'shipping_address_1', $order->shipping_address_1 );
update_user_meta( $user_id, 'shipping_address_2', $order->shipping_address_2 );
update_user_meta( $user_id, 'shipping_city', $order->shipping_city );
update_user_meta( $user_id, 'shipping_company', $order->shipping_company );
update_user_meta( $user_id, 'shipping_country', $order->shipping_country );
update_user_meta( $user_id, 'shipping_first_name', $order->shipping_first_name );
update_user_meta( $user_id, 'shipping_last_name', $order->shipping_last_name );
update_user_meta( $user_id, 'shipping_method', $order->shipping_method );
update_user_meta( $user_id, 'shipping_postcode', $order->shipping_postcode );
update_user_meta( $user_id, 'shipping_state', $order->shipping_state );

// link past orders to this newly created customer
wc_update_new_customer_past_orders( $user_id );

Любая помощь или предложения высоко ценятся.

Ответы [ 2 ]

1 голос
/ 04 мая 2020

В вашем коде есть некоторые ошибки, касающиеся WC_Order свойств, которые больше не доступны после WooCommerce 3 и заменены методами получения и установки, см. эту тему

Как вы создавая некоторых пользователей программно, для отправки уведомления по электронной почте о новой учетной записи клиента вы можете использовать метод WC_Email_Customer_New_Account trigger() с 3 аргументами:

  • $user_id - Пользователь Идентификатор (обязательно)
  • $user_pass - Пароль пользователя (необязательно) - Требуется в вашем случае.
  • $password_generated - Независимо от того, был ли пароль сгенерирован автоматически или нет (истина или ложь ). Этот необязательный аргумент отображает пароль в уведомлении по электронной почте, если для него установлено значение true (по умолчанию - false) .

. сгенерированный пароль отображается в уведомлении по электронной почте «Новая учетная запись клиента», , вам также нужно включить в WooCommerce> Настройки> Аккаунты и конфиденциальность строку параметров:

"При создании учетной записи, автоматически сгенерируйте пароль учетной записи "

Как только ваш рабочий код будет выглядеть следующим образом:

// Customer Billing Email
$order_email = $order->get_billing_email();

// Generate a random password with 12 chars
$user_pass = wp_generate_password();

// Create new user with email as username & newly generated password
$user_id = wp_create_user( $order_email, $user_pass, $order_email );

$user = new WP_User($user_id); // Get the WP_User Object instance from user ID
$user->set_role('customer');   // Set the WooCommerce "customer" user role

// Get all WooCommerce emails Objects from WC_Emails Object instance
$emails = WC()->mailer()->get_emails();

// Send WooCommerce "Customer New Account" email notification with the password
$emails['WC_Email_Customer_New_Account']->trigger( $user_id, $user_pass, true );

//WC guest customer identification
update_user_meta( $user_id, 'guest', 'yes' );

update_user_meta( $user_id, 'first_name', $order->billing_first_name() );
update_user_meta( $user_id, 'last_name', $order->billing_last_name() );


//user's billing data
update_user_meta( $user_id, 'billing_address_1', $order->get_billing_address_1() );
update_user_meta( $user_id, 'billing_address_2', $order->get_billing_address_2() );
update_user_meta( $user_id, 'billing_city', $order->get_billing_city() );
update_user_meta( $user_id, 'billing_company', $order->get_billing_company() );
update_user_meta( $user_id, 'billing_country', $order->get_billing_country() );
update_user_meta( $user_id, 'billing_email', $order_email );
update_user_meta( $user_id, 'billing_first_name', $order->get_billing_first_name() );
update_user_meta( $user_id, 'billing_last_name', $order->get_billing_last_name() );
update_user_meta( $user_id, 'billing_phone', $order->get_billing_phone() );
update_user_meta( $user_id, 'billing_postcode', $order->get_billing_postcode() );
update_user_meta( $user_id, 'billing_state', $order->get_billing_state() );

// user's shipping data
update_user_meta( $user_id, 'shipping_address_1', $order->get_shipping_address_1() );
update_user_meta( $user_id, 'shipping_address_2', $order->get_shipping_address_2() );
update_user_meta( $user_id, 'shipping_city', $order->get_shipping_city() );
update_user_meta( $user_id, 'shipping_company', $order->get_shipping_company() );
update_user_meta( $user_id, 'shipping_country', $order->get_shipping_country() );
update_user_meta( $user_id, 'shipping_first_name', $order->get_shipping_first_name() );
update_user_meta( $user_id, 'shipping_last_name', $order->get_shipping_last_name() );
update_user_meta( $user_id, 'shipping_method', $order->get_shipping_method() );
update_user_meta( $user_id, 'shipping_postcode', $order->get_shipping_postcode() );
update_user_meta( $user_id, 'shipping_state', $order->get_shipping_state() );

// link past orders to this newly created customer
wc_update_new_customer_past_orders( $user_id );

Теперь, как вы увидите клиенту отправляется уведомление с его логином и паролем, со ссылкой на область входа в систему ...

enter image description here


Настройки шаблона для «электронной почты новой учетной записи клиента»:

Путь к связанному шаблону - plugins/woocommerce/templates/emails/customer-new-account.php, и его можно переопределить, скопировав его в yourtheme/woocommerce/emails/customer-new-account.php

Доступные аргументы (переменные) к этому шаблону передаются:

  • $ email_heading - Emai l_header,
  • $ user_login - логин пользователя,
  • $ user_pass - пароль пользователя,
  • $ blogname - название сайта,
  • $ password_generated - независимо от того, был ли пароль сгенерирован автоматически,
  • $ sent_to_admin (по умолчанию false),
  • $ plain_text (по умолчанию false),
  • $ email - Экземпляр электронной почты Object.
0 голосов
/ 03 мая 2020

Попробуйте включить приведенную ниже опцию и проверьте, содержит ли письмо пароль.

Это не проверено OK

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...