使用每个用户的特定ID将10,000个用户导入WordPress

时间:2011-11-21 作者:Michael

我有一个网站,大约有10000名用户。我正在将此网站转换为Wordpress。新网站已经准备就绪,但我必须吸引所有用户。

有许多插件可用于从CSV文件导入用户,我已经准备好了CSV文件。我想使用的插件如下:

Import Users from CSV

我想使用此插件的原因是,它提供了导入包含用户id的CSV文件的选项。不幸的是,该插件当前的设计是,如果CSV文件中存在id,它会假设这些用户已经存在于Wordpress数据库中,而您正试图“更新”这些记录。

我不是。我试图在数据库中创建新用户,但要使用特定的ID(因为这些ID与另一个系统绑定,我不希望这些失败者由于旧系统到新系统的ID更改而失去对所有其他信息的访问权限。

看起来上面的插件可能是在利用内置的Wordpress功能来注册或更新用户,所以这可能就是问题所在。

我怎样才能用尽可能少的时间投入实现我的目标?

顺便说一句,我对phpmyadmin很满意,所以我不介意在那里做,唯一的问题是我想确保所有用户都收到一封电子邮件,通知他们并提供他们的新密码(因为我无法移动这些密码)。使用插件,这是自动的。没有它,不会太多。

谢谢你的帮助。

2 个回复
SO网友:Michael

这就是我在评论中提到的答案。

首先,我应该说安德鲁昨天发表的“也许有用”的文章很有效,但我最终并没有这样做。

无论哪种方式,都必须将记录插入到包含要导入的成员的所有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和密码的加密版本(以便您得到所做操作的证明)。

这也很好,因为如果脚本在完成所有记录之前死亡,您所做的就是刷新页面以重新运行它。由于它只更新尚未加密的记录,所以它只会从中断的地方恢复。

希望这对别人有帮助。如果您对流程有任何疑问,请告诉我。我会尽我所能详细阐述。

SO网友:Jonathan Leeuwenhart

我就是这样做的:

使用导出CSV导出您的成员导入Excel检查新站点的最后一个成员ID在Excel工作表中选择ID列按删除按钮在第一行重新填写“ID”键入所需的下一个ID号向下拖动几下,它会显示前几行的几个ID成员选择这些ID,双击最后一个ID的右下角,现在应正确填写所有ID字段,再次导出到CSV,请确保选择密码nag选项,然后导入CSV导入,完成所有操作!

结束