我即将从另一个CMS将大约10,000个用户导入我的Wordpress网站。问题是,他们的密码都不会起作用,因为它们没有加密。
如何以Wordpress识别和接受的方式快速加密所有这些密码,以便用户可以登录?
答案 0 :(得分:1)
由于加密和散列是不同的东西,我假设所有这些密码都是纯文本格式。在这种情况下,您所要做的就是对它们应用md5
算法。
您可以从SQL或PHP导入脚本执行此操作。看看Resetting Your Password Codex页面,这应该会给你一些启发。
无论如何,你不会离得太远:
require_once( ABSPATH . WPINC . '/registration.php');
$sql = "SELECT ALL USERS FROM YOUR TABLE";
$db = new wpdb (DB_USER, DB_PASSWORD, DB_NAME, DB_HOST);
$result = $db->get_results($sql);
foreach ($result as as $r) {
wp_update_user(array(
'user_login' => $r->username,
'user_pass' => $r->password,
'user_firstname' => $r->first_name
));
}
查看get_userdata
功能文档,了解您可以在第一时间导入哪些用户信息。
答案 1 :(得分:0)
事实证明,我发现了其他几种方法。一个是通过你的mysql phpmyadmin区域完成的(一旦你选择了正确的数据库,就在“sql”选项卡上),并由Andrew Vit发布在stackoverflow中的另一个线程上:
UPDATE wp_users SET user_pass = MD5(user_pass) WHERE ...
对于“where”条件,如果所有密码长度相同,则可能使用以下条件:
WHERE CHAR_LENGTH(wp_users.user_pass) = 12
当然,如果您的密码长度不同,只需将上面的“12”更改为密码长度即可。如果它们的字符长度不同,那么您将不得不使用其他一些标准来确定要加密的密码(除非它们都需要加密,在这种情况下,您可以完全关闭“where”条件。
我个人最终使用php脚本来完成工作,因此密码可以由Wordpress本身加密(或者至少使用Wordpress使用的方法)。以下是我的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 />";
}
?>
通过这种方式,不仅使用Wordpress自己的方法加密密码,而且每次运行脚本时屏幕上都会打印出一个打印输出,显示已更新的所有记录的ID并提供相应的哈希密码。