私は約10,000人のユーザーがいるウェブサイトを持っています。このサイトをWordpressに変換しています。新しいサイトはロールする準備ができています、しかし私はすべてのユーザーを引き継がなければなりません。
CSVファイルからユーザーをインポートするために利用できるプラグインはたくさんあります、そして私はCSVファイルを準備ができた状態にしました。使用したいプラグインは次のとおりです。
このプラグインを使用したいのは、ユーザーIDを含むCSVファイルをインポートするオプションがあるからです。残念ながら、プラグインは現在IDがCSVファイルに存在する場合、これらのユーザーがすでにあなたのWordpressデータベースに存在していると仮定し、それらのレコードを "更新"しようとしているように設計されています。
私は違います。データベースに新しいユーザーを作成しようとしていますが、特定のIDを使用しています(これらのIDは別のシステムに関連付けられており、IDの変更によりこれらの敗者が他のすべての情報にアクセスできなくなりません)。古いシステムから新しいシステムへ。
上記のプラグインは、ユーザーを登録または更新するための組み込みのWordpress関数を使用していない可能性があるため、これが問題になる可能性があります。
可能な限り少ない時間で投資を達成するにはどうすればよいですか。
ところで - 私はphpmyadminにかなり慣れているので、それをしても構わない、唯一の問題はすべてのユーザーが彼らに通知して新しいパスワードを提供するEメールを受け取ることを確認したいということです。 )プラグインを使用すると、これは自動的に行われます。それがなければ、それほどではありません。
ご協力ありがとうございます。
私はプラグインに慣れていませんが、これはそれを回避するためのオプションかもしれません:
これは私が私のコメントで上で暗示した答えです。
最初に、私はAndrewの昨日の作品を投稿した「おそらく役に立つ」作品を言うべきですが、私はそのようにしてしまうことはしませんでした。
どちらにしても、あなたはあなたがインポートしたいメンバーのすべてのIDを含むあなたのwp_usersテーブルにレコードを挿入しなければなりません(私はユーザー名も含みましたが、それが必要であるかどうかわからない)。
それから、私の最初の質問で私が参照したCSVプラグインからユーザーをインポートを使って、あなたのユーザーのログイン、Eメール、そしてロールをインポートします(そしてインポートしたい他のどのフィールドも。
インポート時にそれらを特定の役割に設定するには、単に "role"という名前のCSVファイルに列を追加してから、各レコード内でその役割が何であるべきかを示します: "subscriber"、 "author"など。
あなたの「役割」はすべて小文字で入力する必要があると思います。それが私のやり方です。他の人々は、最初の文字が大文字になっているとうまくいかないと指摘しました。
IDがこのCSVに含まれていることを確認して、プラグインが新しい情報でデータベース内のどのレコードを更新するかを認識できるようにします。
これが私の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"
++++++++++通知++++++++++
私が最初にこの答えを投稿したとき、私は「Import Users from CSV」プラグインに小さな修正を加えたことを示すのを怠りました。 Wordpressの管理者用の「プラグイン」セクションで、「エディタ」リンクを選択します。次に、右上のドロップダウンボックスを使用して正しいプラグイン(CSVからのユーザーのインポートプラグイン)を選択します。
Phpファイルの半分ほど下の行に、およそ10-15行の間に2行があります。
最初のものは:
if ( $update )
この行をコメントアウトして変更し、その行のコードが次のようになるようにしました。
/* if ( $update ) */
if (1==0)
それから、あなたが変更しようとしている2行目(最後のものの下のおよそ10-15行)は、次のとおりです。
if ( ! $update ) {
私はこれを次のように変更しました。
/* if ( ! $update ) { */
if ( 1==1 ) {
これにより、インポートしているすべてのユーザーが、新しいユーザー名とパスワードを使用して歓迎のEメールを受け取ることが保証されます。
+++++++++終了通知+++++++++
何千ものユーザーをインポートするので、サーバーエラーを発生させずにインポートできるのは一度に約150人のユーザーしかできないことがわかりました。しかし、これは私のサーバー上の設定や利用可能なメモリの量なので、これがプラグインのそれほどの制限ではないと思います。
適切なチェックボックスをオンにした場合、インポートされる各ユーザーには、ログイン用のユーザー名とパスワードを含むWordpressからの "新しいユーザー"の電子メールが送信されます。そのため、レコード内のパスワードをすぐに暗号化する必要があります。そうしないと、ログインしようとしても機能しません。
個人的には、何人かのユーザーをインポートしてから暗号化クエリを実行します。その後、さらに何人かのユーザーをインポートしてから、暗号化クエリを実行します。そうすれば、ユーザーが受け取る「ウェルカムEメール」と、ログインが機能するようにパスワードを暗号化することとの間に、約1分以上の遅れはありませんでした。
ユーザーの全部または一部をインポートしたら次に、「WHERE CHAR_LENGTH(wp_users.user_pass)= 12」を指定して上記のAndrewsの解決策を使用します。 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_once"ステートメント)に結びつけることでWordpress自身の暗号化方法を使用します。これはまたそれを正しいデータベースに接続します。暗号化されていないパスワードを持つwp_usersテーブル内の各ユーザー(12文字のみのテーブル内のパスワードは暗号化されていないパスワード)を取得し、そのパスワードを新しい暗号化バージョンのパスワードで更新します。最後に、それはちょうどそれがパスワードの暗号化されたバージョンと共にそれがちょうど更新したユーザのIDをエコーします。
データベース内の暗号化されていないパスワードを持つすべてのユーザーが暗号化されるまで、このプロセスを繰り返します。最後に、更新されたすべてのユーザーIDと暗号化されたパスワードのバージョンを表示するプリントアウトが画面に表示されます(これにより、何が行われたかが証明されます)。
スクリプトがすべてのレコードを完成させる前に死んだ場合は、ページを更新してそれを再実行するだけでよいため、これも素晴らしい方法です。まだ暗号化されていないレコードを更新するだけなので、中断したところから再開します。
これが誰かに役立つことを願っています。あなたがプロセスの上に質問をするならば、私に知らせてください。私はできる限り精巧に努力します。
これは私が仕事をした方法です:
全部できた!