我有一个公众浏览的社区网站。我可以插入第一个(&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;
}
最合适的回答,由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 );
}