在运行wp_INSERT_USER()时,WP总是说USER_LOGIN已经在系统中了,而实际上它并没有

时间:2019-04-25 作者:CRAIG

我需要存档特定用户帐户,并使用原始存档用户名、电子邮件等创建新帐户。

我的计划是首先用修改后的user\\u登录名、电子邮件等更新当前帐户。我将旧用户名存档,通过在其上附加“archive”来显示\\u名称。在此之前,我使用了原始的user\\u登录等,并将其存储在单独的变量中,即。

$origlogin = $user_info->user_login;
然后

$archivelogin = \'archived-\' . $origlogin;
等等。。。

首先,我用新的“归档”数据更新特定用户。

$sql = "UPDATE " . $wpdb->prefix . "users SET user_login = \'" . $archivelogin . "\', display_name = \'" . $archivedisplayname . "\', user_nicename = \'" . $archivenicename . "\', user_email = \'" . $archiveemail . "\', user_url = \'\' WHERE ID = \'" . $theid . "\'";
$wpdb->query($sql);
我已经在数据库中确认它已经更新,并且user\\u登录现在是唯一的,并且与之前的原始user\\u登录不同。

但是,当我在之后的脚本中包含此内容时:

if(username_exists( $origlogin )) {
echo "it exists";

}
它打印出“它存在”,当脚本继续并尝试现在使用原始user\\u登录名($origlogin)创建新用户时,它会弹出重复的用户名错误,并且不会插入它。

这是不可能的,因为我反复检查数据库中没有重复的用户名,因为我用存档版本替换了原始用户名(在user\\u登录名后面附加了“存档”一词)。

我是否需要从记忆中清除一些东西,或者我在这里遗漏了什么步骤?

1 个回复
SO网友:KAGG Design

直接修改WP数据库是一个非常糟糕的主意。在您的情况下,您会遇到问题,因为您避免了缓存。WordPress几乎可以缓存所有能够缓存的内容,用户数据并不是排除项。当你打电话的时候username_exists(), 它从缓存而不是数据库返回信息。

您应该使用wp_update_user() 更新用户数据。不过,它会在更改密码和电子邮件时向用户发送电子邮件。可以通过过滤器抑制此行为send_password_change_emailsend_email_change_email (只需从回调函数中返回rturn false)。

更糟糕的方法是在修改数据库字段后刷新用户缓存。你可以打电话clean_user_cache( $user ).

相关推荐

Get_Users Orderby Page

我一直在尝试使用codex修复排序问题get_users(), 但我似乎无法让它工作。抄本显示我可以设置\'orderby\' => \'post_count\', 但我想更改它,使其按页数排序。看起来应该是很容易改变的(page_count?), 但它不起作用。有人能给我一些建议吗?