如何在用户名中自动生成随机数?

时间:2019-03-04 作者:Alief

我有一个公众浏览的社区网站。我可以插入第一个(&A);WooCommerce注册表中的姓氏字段,并根据名字+姓氏的组合自动生成用户名。

但如果有两个人拥有相同的第一个&;姓氏,如果有一个人之前注册过,注册将失败,因为用户名存在。

如果用户名存在,你能帮我在用户名后自动生成数字吗?例如,第一个人是John Doe,他的用户名是johndoe.所以,如果第二个同名的人注册了,我希望它是,johndoe1.如果注册了同名的第三人,则johndoe2.

提前感谢您!

以下是自动生成用户名的代码:

add_filter( \'woocommerce_new_customer_data\', \'custom_new_customer_data\', 10, 1 );

function custom_new_customer_data( $new_customer_data ){

// get the first and last billing names
if(isset($_POST[\'billing_first_name\'])) $first_name = $_POST[\'billing_first_name\'];
if(isset($_POST[\'billing_last_name\'])) $last_name = $_POST[\'billing_last_name\'];

// the customer billing complete name
if( ! empty($first_name) || ! empty($last_name) )
    $complete_name = $first_name . \' \' . $last_name;

// Replacing \'user_login\' in the user data array, before data is inserted
if( ! empty($complete_name) )
    $new_customer_data[\'user_login\'] = sanitize_user( preg_replace(\'/\\s+/u\', \'\', $complete_name) );
return $new_customer_data;
}

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

此函数将生成唯一的用户登录slug:

function my_unique_user_slug( $slug ) {
    global $wpdb;

    $check_sql = "SELECT user_login FROM $wpdb->users WHERE user_login = %s LIMIT 1";
    if ( ! $wpdb->get_var( $wpdb->prepare( $check_sql, $slug ) ) ) {
        return $slug;
    }

    $suffix = 2;
    do {
        $alt_slug = $slug . $suffix;
        $user_slug_check = $wpdb->get_var( $wpdb->prepare( $check_sql, $alt_slug ) );
        $suffix++;
    } while ( $user_slug_check );

    return $alt_slug;
}
它基于wp_unique_post_slug() 函数,您可以这样使用它:

if ( ! empty( $complete_name ) ) {
    $slug = sanitize_user( preg_replace( \'/\\s+/u\', \'\', $complete_name ) );
    $new_customer_data[\'user_login\'] = my_unique_user_slug( $slug );
}

相关推荐

Config.php issue in WordPress

最近在我的网站上遇到了一个问题。不知道这是什么时候发生的,怎么发生的。我在这个特定网站上的所有网页顶部都显示了以下消息。“注意:常量FS\\u CHMOD\\u DIR已在/home/mc4ebqy52sd6/public\\u html/khwajagharibnawaz中定义。组织/工作包配置。php在线101“网站名为khwajagharibnawaz。组织机构我是WordPress上的一个电枢,不过我看了一下配置。php文件和l01行只是一个文本行,说明以下内容:100*有关可用于调试的其他常数的