php - 在创建 WooCommerce 用户时使用生成的密码发送电子邮件通知
问题描述
在带有以下代码的 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 );
非常感谢任何帮助或建议。
解决方案
您的代码中有一些关于WC_Order
自 WooCommerce 3 以来不再可访问的属性的错误,并被 getter 和 setter 方法取代,请参阅此线程......</p>
当您以编程方式创建一些用户时,要发送客户新帐户电子邮件通知,您可以使用WC_Email_Customer_New_Account
trigger()
具有 3 个参数变量的方法:
$user_id
-- 用户 ID(必填)$user_pass
-- 用户密码(可选)- 在您的情况下是必需的。$password_generated
-- 密码是否自动生成(真或假)。当设置为(默认为 false)时,此可选参数会在电子邮件通知中显示密码。true
要使生成的密码显示在“客户新帐户”电子邮件通知中,您还需要在 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->$order->get_billing_first_name() );
update_user_meta( $user_id, 'last_name', $order->get_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 );
现在,您将看到一条通知已发送给客户,其中包含其登录名和密码,以及登录区域的链接......
“客户新帐户电子邮件”的模板自定义:
相关的模板路径是plugins/woocommerce/templates/emails/customer-new-account.php
并且可以通过将其复制到yourtheme/woocommerce/emails/customer-new-account.php
传递给此模板的可用参数(变量)是:
- $email_heading -- email_header,
- $user_login -- 用户登录,
- $user_pass -- 用户密码,
- $blogname -- 网站的标题,
- $password_generated -- 密码是否自动生成,
- $sent_to_admin(默认为 false),
- $plain_text(默认为假),
- $email -- 电子邮件实例对象。
推荐阅读
- python - How to remove quotes when I dump to another file?
- plot - df.plot() 对齐辅助 y 轴从零开始
- javascript - 在 Laravel Mix 中使用dependOn
- vue.js - 语法错误:从“电子”导入 {app、protocol、BrowserWindow}
- ios - 不符合可哈希协议?
- android - 弹出菜单使用图像的原始大小作为锚点,而不是实际大小
- formsflow.ai - 创建具有工作流程一步批准的表单
- c - 超出数组末尾的第一个元素的值?
- python - 如果您不为其分配变量,有没有办法调用 tkinter 按钮?
- css - 如何减小 animate.css 心跳放大尺寸