在 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 );


所以你得到:

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 可以通过他的个人资料(我的帐户)更改其中一些调整,如果您不想这样做,则必须进行其他调整。