这就是我在评论中提到的答案。
首先,我应该说安德鲁昨天发表的“也许有用”的文章很有效,但我最终并没有这样做。
无论哪种方式,都必须将记录插入到包含要导入的成员的所有ID的wp\\U users表中(我还包括用户名,但不确定是否有必要)。
然后,使用我在初始问题中引用的“从CSV导入用户”插件导入用户的登录名、电子邮件和角色(以及任何其他要导入的字段。该插件有相关说明)
要在导入时将其设置为特定角色,只需在CSV文件中添加一个名为“角色”的列,然后在每个记录中指明其角色:“订阅者”、“作者”等。
我相信你的“角色”必须全部小写。我就是这样做的。其他人则表示,如果第一个字母大写,则不起作用。
确保此CSV中包含ID,以便插件知道要使用新信息更新数据库中的哪些记录。
以下是我的CSV文件中的一些记录的示例,因此您可以查看其结构:
"ID","user_login","user_email","role","another_field","another_field_2"
"5094","username5094","[email protected]","subscriber","another_field_value","another_field_2_value"
"5095","username5095","[email protected]","subscriber","another_field_value","another_field_2_value"
+++++++++注意事项++++++++++
当我最初发布这个答案时,我忽略了指出我对“从CSV导入用户”插件做了一个小的修改。在Wordpress管理员的“插件”部分下,选择“编辑器”链接。然后,使用右上角的下拉框选择正确的插件(从CSV插件导入用户)。
大约在php文件的一半处,有几行代码被大约10-15行分隔开。
第一个是:
if ( $update )
我对这一行进行了注释并对其进行了修改,使这一行的代码现在看起来像:
/* if ( $update ) */
if (1==0)
然后,您要更改的第二行(在最后一行下方约10-15行)是:
if ( ! $update ) {
我改为:
/* if ( ! $update ) { */
if ( 1==1 ) {
这样做的目的是确保您导入的所有用户都将收到带有新用户名和密码的欢迎电子邮件。
+++++++++终止通知+++++++++
我发现一次只能导入大约150个用户,而不会出现服务器错误,这并不理想,因为我有数千个用户要导入。但是,我不认为这是插件的一个很大的限制,因为这是我的服务器和/或可用内存上的设置。
如果选中相应的复选框,每个导入的用户都会收到来自Wordpress的“新用户”电子邮件,其中包括他们的用户名和登录密码。因此,您需要立即对其记录中的密码进行加密,否则在尝试登录时密码将无法工作。
就个人而言,我会导入一些用户,然后运行加密查询。然后导入更多用户,然后运行我的加密查询。这样一来,从用户收到的“欢迎电子邮件”到密码加密(以便登录正常)之间的间隔就不会超过一分钟。
一旦导入了全部或部分用户。然后,使用上面的Andrews解决方案“WHERE CHAR\\u LENGTH(wp\\u users.user\\u pass)=12”。由于Wordpress将在您使用插件导入所有新用户时为他们分配一个12位数的密码,因此您需要使用加密版本更新这些密码,这就是查询的“WHERE”部分。你的情况可能不需要使用这个“WHERE”部分,但如果你不确定的话,把它放在那里也没什么坏处。
下次这些人登录Wordpress博客时,Wordpress会将这些密码的加密更改为新的加密方法。用户不会知道区别。
对于那些想知道我实际使用了什么方法而不是Andrew的方法的人,我创建了一个PHP文件,其中包含以下代码:
<?php
require_once \'/home/evaluate/public_html/members-blog/wp-config.php\';
$sql="SELECT user_pass,ID FROM wp_users WHERE CHAR_LENGTH(wp_users.user_pass) = 12";
$find = mysql_query($sql) or die(mysql_error());
while($row = mysql_fetch_array($find))
{
$current_password = $row[\'user_pass\'];
$current_id = $row[\'ID\'];
$hashed_password = wp_hash_password( $current_password );
$update_sql= "UPDATE wp_users SET user_pass = \'" . $hashed_password . "\' WHERE ID = " . $current_id . "";
$update = mysql_query($update_sql) or die(mysql_error());
echo $current_id . " " . $hashed_password;
echo "<br />";
}
?>
然后,一旦我通过插件导入了一些用户,我就会在浏览器中调出这个php文件的URL,开始运行它。
该php文件通过绑定到Wordpress配置文件(“require\\u once”语句),使用Wordpress自己的加密方法。这还会将其连接到正确的数据库。它会获取wp\\U users表中具有未加密密码的每个用户(表中只有12个字符的任何密码都是未加密的),对密码进行加密,然后使用新的密码加密版本更新该记录。最后,它会回显刚刚更新的用户ID以及密码的加密版本。
它将继续循环此过程,直到数据库中具有未加密密码的所有用户都已加密。最后,您将在屏幕上显示一个打印输出,其中显示所有已更新的用户ID和密码的加密版本(以便您得到所做操作的证明)。
这也很好,因为如果脚本在完成所有记录之前死亡,您所做的就是刷新页面以重新运行它。由于它只更新尚未加密的记录,所以它只会从中断的地方恢复。
希望这对别人有帮助。如果您对流程有任何疑问,请告诉我。我会尽我所能详细阐述。