用户注册是否添加用户ID?

时间:2013-05-14 作者:RobbertT

我已根据以下代码为我的WP网站创建了自定义用户注册模板:http://www.tutorialstag.com/create-custom-wordpress-registration-page.html. 现在我想知道是否可以将用户ID添加到用户名中。我想这样做的原因是,当用户注册时,(新)用户永远不会是重复的。因此,当新用户的用户名与已注册用户的用户名相同时,不会显示任何错误,但新用户通常是通过添加用户ID或其他随机数来创建的?

有谁能进一步帮助我吗?谢谢

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

您无法在注册时添加ID,因为在用户注册之前没有ID。(请参阅底部附近的可能解决方法)。

您可以在注册后在ID上加上user_register

function add_ID_wpse_99390($a) {
  global $wpdb;
  $user = new WP_User($a);
  $wpdb->query("UPDATE {$wpdb->users} SET user_login = CONCAT(user_login,\'_\',ID) WHERE ID = {$user->ID}");
}
add_action(\'user_register\',\'add_ID_wpse_99390\');
请注意,这是SQL。这是因为您根本不应该更改登录名。这也会让你的用户非常困惑,因为他们现在的登录名与他们选择的不匹配。他们将无法登录。这是从您的计划继承来的一个缺陷,该计划会自动更改登录名。

你可以钓到sanitize_user 在创建用户之前,但您需要ID之外的其他值。

function add_ID_v2_wpse_99390($login) {
  remove_filter(\'sanitize_user\',\'add_ID_v2\');
  $uexists = username_exists( $login );
  if (!empty($uexists)) {
    $incr = get_option(\'_uname_incre\');
    $incr = (!empty($incr)) ? $incr + 1 : 1;
    $login = $login.\'_\'.$incr;
    update_option(\'_uname_incre\',$incr);
  }
  return $login;
}   
add_filter(\'sanitize_user\',\'add_ID_v2_wpse_99390\');
该代码使用选项表中的值来增加登录名后缀。同样,我认为这会让您的用户感到困惑,因为他们的用户名与他们选择的用户名不同,但在这种情况下,更改后的用户名应该包含在注册电子邮件中(假设您的用户注意)。

您可能可以运行如下查询。。。

$wpdb->get_var("SELECT MAX(ID) FROM {$wpdb->users} LIMIT 1");
并将该值加上1作为后缀,但我不知道这将如何可靠地使您的后缀与实际用户ID保持一致。这将暴露用户ID,这可能是一个安全问题,尽管可能是一个小问题。

我最后的结论是"don\'t do this". 充其量只是会让人困惑。如果有人试图使用已使用的名称创建用户,WordPress应该提供警告。该用户必须选择另一个名称并解决问题。

结束

相关推荐

将ID添加到目标导航链接

我正在WordPress网站上的导航栏中使用以下代码:<?php wp_list_pages(\"title_li=\"); ?> 当前会弹出一些链接,如下所示:<a href=\"http://yoururl.com/?page_id=123\">News</a> 我想做的是能够向链接添加id,使其看起来像:<a href=\"http://yoururl.com/?page_id=123\" id=\"news\">News</