在 WooCommerce 中根据用户 ID 自动生成用户名
Automatically generate username based on user ID in WooCommerce
我正在做一个 WooCommerce 项目,每个用户都有一个 ID 号。我想为此用户 ID 使用默认的 WooCommerce 用户名字段。
创建帐户时,我可以根据客户的用户 ID 自动为客户生成帐户用户名吗?
示例:
用户 ID = 101,
自动生成的用户名 = 101
可能吗?
任何帮助将不胜感激。谢谢!
选项 1
您可以编辑创建用户和更改参数的 wp_insert_user
函数。此函数需要一个用户数据数组(或对象)来创建用户,因此您只需向 user_login
添加您想要的任何内容。所有参数和示例 here.
选项 2
如果您无法编辑 wp_insert_user
函数,您可以随时调用自定义 SQL 查询来更新 user_login
:
$wpdb->update($wpdb->users, array('user_login' => $new_user_login), array('ID' => $user_id));
最好在用户注册后立即使用 hook/action。
首先,确保通过 WooCommerce 设置选中以下选项
通常情况下,您可以使用 woocommerce_new_customer_username
过滤器挂钩来更改生成的用户名。
复制自includes/wc-user-functions.php
/**
* Filter new customer username.
*
* @since 3.7.0
* @param string $username Customer username.
* @param string $email New customer email address.
* @param array $new_user_args Array of new user args, maybe including first and last names.
* @param string $suffix Append string to username to make it unique.
*/
return apply_filters( 'woocommerce_new_customer_username', $username, $email, $new_user_args, $suffix );
但是,您想根据$user_id
确定$username
,
但 $user_id
是在通过 wp_insert_user()
添加用户名、电子邮件地址等数据后确定的
所以解决方案是在用户注册后立即根据 $user_id
更新 $username
,这可以通过以下方式完成:
复制自 wp-includes/user.php (WordPress)
/**
* Fires immediately after a new user is registered.
*
* @since 1.5.0
*
* @param int $user_id User ID.
*/
do_action( 'user_register', $user_id );
和
wpdb - WordPress 数据库访问抽象 class.
update_user_meta() - 根据用户 ID 更新用户元字段。
所以你得到:
function action_user_register( $user_id ) {
global $wpdb;
// Set new name + nickname
$new_name = 'something_' . $user_id;
// Update user user_login
$wpdb -> update( $wpdb -> users,
array( 'user_login' => $new_name, 'user_nicename' => $new_name, 'display_name' => $new_name ),
array( 'ID' => $user_id )
);
// Update user meta
update_user_meta( $user_id, 'first_name', $new_name );
update_user_meta( $user_id, 'nickname', $new_name );
}
add_action( 'user_register', 'action_user_register', 10, 1 );
注意:知道 customer/user 可以通过他的个人资料(我的帐户)更改其中一些调整,如果您不想这样做,则必须进行其他调整。
我正在做一个 WooCommerce 项目,每个用户都有一个 ID 号。我想为此用户 ID 使用默认的 WooCommerce 用户名字段。
创建帐户时,我可以根据客户的用户 ID 自动为客户生成帐户用户名吗?
示例: 用户 ID = 101, 自动生成的用户名 = 101
可能吗?
任何帮助将不胜感激。谢谢!
选项 1
您可以编辑创建用户和更改参数的 wp_insert_user
函数。此函数需要一个用户数据数组(或对象)来创建用户,因此您只需向 user_login
添加您想要的任何内容。所有参数和示例 here.
选项 2
如果您无法编辑 wp_insert_user
函数,您可以随时调用自定义 SQL 查询来更新 user_login
:
$wpdb->update($wpdb->users, array('user_login' => $new_user_login), array('ID' => $user_id));
最好在用户注册后立即使用 hook/action。
首先,确保通过 WooCommerce 设置选中以下选项
通常情况下,您可以使用 woocommerce_new_customer_username
过滤器挂钩来更改生成的用户名。
复制自includes/wc-user-functions.php
/**
* Filter new customer username.
*
* @since 3.7.0
* @param string $username Customer username.
* @param string $email New customer email address.
* @param array $new_user_args Array of new user args, maybe including first and last names.
* @param string $suffix Append string to username to make it unique.
*/
return apply_filters( 'woocommerce_new_customer_username', $username, $email, $new_user_args, $suffix );
但是,您想根据$user_id
确定$username
,
但 $user_id
是在通过 wp_insert_user()
所以解决方案是在用户注册后立即根据 $user_id
更新 $username
,这可以通过以下方式完成:
复制自 wp-includes/user.php (WordPress)
/**
* Fires immediately after a new user is registered.
*
* @since 1.5.0
*
* @param int $user_id User ID.
*/
do_action( 'user_register', $user_id );
和
wpdb - WordPress 数据库访问抽象 class.
update_user_meta() - 根据用户 ID 更新用户元字段。
所以你得到:
function action_user_register( $user_id ) {
global $wpdb;
// Set new name + nickname
$new_name = 'something_' . $user_id;
// Update user user_login
$wpdb -> update( $wpdb -> users,
array( 'user_login' => $new_name, 'user_nicename' => $new_name, 'display_name' => $new_name ),
array( 'ID' => $user_id )
);
// Update user meta
update_user_meta( $user_id, 'first_name', $new_name );
update_user_meta( $user_id, 'nickname', $new_name );
}
add_action( 'user_register', 'action_user_register', 10, 1 );
注意:知道 customer/user 可以通过他的个人资料(我的帐户)更改其中一些调整,如果您不想这样做,则必须进行其他调整。