如果重复,自动将用户名设置为 "first_name-last_name" 并增加数字
Automatically set username as "first_name-last_name" with incremental number if duplicate
我使用 Elementor Essential Addons 在 wordpress 上创建了注册表单。
注册表单中没有“用户名”字段,因为我希望用户使用电子邮件地址和密码登录(他们永远不会在预定义的 url 结构之外看到实际的用户名) .
所以我将用户名设置为在后台自动生成 'first_name.'-'.last_name"。这与以下代码配合使用效果很好:
add_filter( 'pre_user_login', 'name_as_username' );
function name_as_username( $user_login ) {
if(isset($_POST['first_name'])) $first_name = $_POST['first_name'];
if(isset($_POST['last_name'])) $last_name = $_POST['last_name'];
{
$user_login = $_POST['first_name'].'-'.$_POST['last_name'];
return $user_login;
}
}
我遇到的困难是在我的 Wordpress 数据库中已经存在的用户名末尾添加一个递增数字。
换句话说,如果“John-Doe”已经存在,则自动将用户名设置为“John-Doe1”。如果“John-Doe1”已经存在,则自动将用户名设置为“John-Doe2”等等。
我查看了多个其他线程,但我似乎无法找到任何解决方案:
How do I put extra number at the end of username if duplicate
Adding a number to MySQL Value If Found in DB
下面是我试图开始工作的最后一个完整代码片段。任何帮助将不胜感激!
add_filter( 'pre_user_login', 'name_as_username' );
function name_as_username( $user_login ) {
if(isset($_POST['first_name'])) $first_name = $_POST['first_name'];
if(isset($_POST['last_name'])) $last_name = $_POST['last_name'];
{
$user_login = $_POST['first_name'].'-'.$_POST['last_name'];
return $user_login;
$i = 0;
do {
//Check in the database here
$exists = exists_in_database($user_login);
if($exists) {
$i++;
$user_login = $user_login . $i;
}
}
while($exists);
//save $username
}
}
你非常接近。您需要使用 WordPress 函数 get_user_by() 来查找您要检查的登录。它 returns false
如果它没有找到用户。
这样的代码就可以了。
...
$original_login = $user_login;
do {
//Check in the database here
$exists = get_user_by( 'login', $user_login ) !== false;
if($exists) {
$i++;
$user_login = $original_login . $i;
}
} while($exists);
当然可以将您自己的表格添加到 WordPress,但您需要在插件或主题中这样做;它们具有激活和停用挂钩,允许您创建和删除表。对于您问题的目的,它没有丝毫必要也没有帮助。
我使用 Elementor Essential Addons 在 wordpress 上创建了注册表单。
注册表单中没有“用户名”字段,因为我希望用户使用电子邮件地址和密码登录(他们永远不会在预定义的 url 结构之外看到实际的用户名) .
所以我将用户名设置为在后台自动生成 'first_name.'-'.last_name"。这与以下代码配合使用效果很好:
add_filter( 'pre_user_login', 'name_as_username' );
function name_as_username( $user_login ) {
if(isset($_POST['first_name'])) $first_name = $_POST['first_name'];
if(isset($_POST['last_name'])) $last_name = $_POST['last_name'];
{
$user_login = $_POST['first_name'].'-'.$_POST['last_name'];
return $user_login;
}
}
我遇到的困难是在我的 Wordpress 数据库中已经存在的用户名末尾添加一个递增数字。
换句话说,如果“John-Doe”已经存在,则自动将用户名设置为“John-Doe1”。如果“John-Doe1”已经存在,则自动将用户名设置为“John-Doe2”等等。
我查看了多个其他线程,但我似乎无法找到任何解决方案:
How do I put extra number at the end of username if duplicate
Adding a number to MySQL Value If Found in DB
下面是我试图开始工作的最后一个完整代码片段。任何帮助将不胜感激!
add_filter( 'pre_user_login', 'name_as_username' );
function name_as_username( $user_login ) {
if(isset($_POST['first_name'])) $first_name = $_POST['first_name'];
if(isset($_POST['last_name'])) $last_name = $_POST['last_name'];
{
$user_login = $_POST['first_name'].'-'.$_POST['last_name'];
return $user_login;
$i = 0;
do {
//Check in the database here
$exists = exists_in_database($user_login);
if($exists) {
$i++;
$user_login = $user_login . $i;
}
}
while($exists);
//save $username
}
}
你非常接近。您需要使用 WordPress 函数 get_user_by() 来查找您要检查的登录。它 returns false
如果它没有找到用户。
这样的代码就可以了。
...
$original_login = $user_login;
do {
//Check in the database here
$exists = get_user_by( 'login', $user_login ) !== false;
if($exists) {
$i++;
$user_login = $original_login . $i;
}
} while($exists);
当然可以将您自己的表格添加到 WordPress,但您需要在插件或主题中这样做;它们具有激活和停用挂钩,允许您创建和删除表。对于您问题的目的,它没有丝毫必要也没有帮助。