簡體   English   中英

如何檢查 WordPress 中是否存在 user_login 並通過附加到現有 user_login 以編程方式創建新用戶

[英]How to check if existing user_login in WordPress and create new user programatically by appending to an existing user_login

在我的 WP v5.8.1 中,我使用wp_create_user從公共表單以編程方式創建新用戶。 將通過結合first_namelast_name創建新的 user_login

$new_username = strtolower(str_replace(' ', '', $_POST['first_name']) . '-' . str_replace(' ', '', $_POST['last_name']));

但是,可能存在具有相同 user_login 的現有用戶。 因此,我想使用以下函數將數字(1、2、3、4 等)附加到新的user_login中:

if (username_exists($new_username)) {
    create_new_username();
} else {
    $new_username = $new_username;
}

function create_new_username() {
    $count = 0;
    while (username_exists($new_username)) :
        $new_username = $new_username . '-' . $count + 1;
        $count++;

        if (!username_exists($new_username)) {
            $create_username = $new_username;
        }
    endwhile;

    return $new_username;
}

echo create_username();

如果user_login存在,上述函數返回現有的user_login用戶 ID; 它不是創建新的user_login並附加數字。

編輯1:

我修改了下面的代碼而沒有編寫單獨的函數:

$new_username = strtolower(str_replace(' ', '', $_POST['first_name']) . '-' . str_replace(' ', '', $_POST['last_name']));

if (username_exists($new_username)) {
    $count = 0;
    while (username_exists($new_username)) :
        $new_username = $new_username . '-' . ($count + 1);
        $count++;

    endwhile;
}
echo $new_username;

如果用戶存在,這將返回一個新的user_login 然而,它不是從($count + 1)附加一個新的序列號,而是添加另一個新數字,如下所示:

  • 倒數第一
  • 首尾1
  • 先后1-2
  • 首尾1-2-3

而我需要這樣的用戶名:

  • 倒數第一
  • 首尾1
  • 倒數第二
  • 倒數第 3

您的函數create_new_username()需要變量$new_username它不會自動傳遞給此函數,因此未定義。

function create_new_username($new_username) {
    $count = 0;
    while (username_exists($new_username)) :
        $new_username = $new_username . '-' . $count + 1;
        $count++;

        if (!username_exists($new_username)) {
            $create_username = $new_username;
        }
    endwhile;

    return $new_username;
}

然后你開始你的if(username_exists())調用......我必須通過其他一些鈎子假設,你必須將變量$new_username給你的username_exists()函數。

if (username_exists($new_username)) {
    create_new_username($new_username);
} 

因為你的else都不做,所以沒有必要。 $new_username已經等於$new_username

回答我自己的問題,@Howard E 的評論幫助我實現了我想要的:

以下是從公共表單提交中創建的新用戶名:

$new_username = strtolower(str_replace(' ', '', $_POST['first_name']) . '-' . str_replace(' ', '', $_POST['last_name']));

使用下面的代碼,我可以檢查user_login是否存在,如果存在附加序列號以創建新的user_login

    if (username_exists($new_username)) { // check if user_login exists
    while (username_exists($new_username)) :
        $count = preg_match_all("/.*?(\d+)$/", $new_username, $matches); // check if the existing user_login has serialised number at the end
        if ($count) { // if user_login has number at the end
            $new_username = rtrim($new_username, '-' . $count); // remove the number and '-' also before the number 
        } else {
            $count = 0; // else keep the count as 0 to add to the submitted user_login from the public form
        }
        $new_username = $new_username . '-' . ($count + 1); // this will create a new serialised user_login with numbering continuation from previous, else create new user_login as per form submission
        $count++;

    endwhile;
}
echo $new_username;

現在正在創建 user_logins 如下:

  • 倒數第一
  • 首尾1
  • 倒數第二
  • 倒數第 3

請評論代碼是否仍然可以更簡單和高效?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM