您无法在注册时添加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应该提供警告。该用户必须选择另一个名称并解决问题。