誰かがフォームに記入した後に、新しいユーザーを作成しようとしています。私はwp_create_user
を使っています。ユーザーは正しく作成されていますが、何らかの理由でパスワードがusers
テーブルに送信されていません。それは単に空白の値です。
まず第一に、残念ながら、このプロジェクトでは3.1.3を使用しているので、3.2.1を使用できる可能性はほとんどありません。
パスワードがwp_create_user
関数に渡され、値が期待どおりになるまでパスワードが正しいことを確認しました。パスワードをwp_insert_user
関数までたどることもできます。これはwp_hash_password
関数を通過し、34文字のパスワードハッシュとして出力されます。次に、$wpdb->insert
メソッドを実行してユーザーを挿入する前に、パスワードの値が何であるかを確認しました。パスワードはまだ美しいハッシュであり、空の値ではありません。それから、私はウサギ全体を_insert_replace_helper
クラスの$wpdb
メソッドに続けました。その関数に提供されたデータはまさに問題ありませんでした。ただし、この関数は以下を返します。
return $this->query( $this->prepare( $sql, $data ) );
私はprepare
メソッドを見に行きました、そしてそれは以下のように定義されます:
function prepare( $query = null ) { // ( $query, *$args )
はい、その小さなコメントは実際のコードからのものです。私がそれを見たとき、私は前の開発者がこの変更をしたと思った。実際のファイルに対してそれを比較し、それが同一であることが判明するまで、私は最初激怒しました。ですから、ここでの私の混乱は、_insert_replace_helper
メソッドがprepare
メソッドを呼び出し、それが1を期待しているときにそれに2つの引数を送信しているということです。
最終的に、私は二つの質問があります。
1)私のパスワードがデータベースに送信されないのはなぜですか2)_insert_replace_helper
メソッドが2つの引数をprepare
メソッドに送信することで何が起こっていますか?
私はユーザーを追加するために使用している機能は次のようになっていることに注意してください。
// Function for registering user
function gov_register_user($name, $password, $email, $company, $phone)
{
// If user is registered, don't register him/her again, but return true so no error is flagged
if(email_exists($email))
return true;
// If any of the necessary fields are not filled, return false
if($name == '' || $password == '' || $email == '')
return false;
// It's now safe to register the user
$user_id = wp_create_user($name, $password, $email);
if($user_id)
{
// Email user
add_filter('wp_mail_content_type',create_function('', 'return "text/html"; '));
wp_mail($email, 'Registration', get_mail_user_registration($name, $email));
// Set meta fields
set_cimyFieldValue($user_id, 'COMPANY', $company);
set_cimyFieldValue($user_id, 'PHONE', $phone);
// Log user in
$gov_creds = array(
'user_login' => $name,
'user_password' => $password,
'remember' => true
);
wp_signon($gov_creds, false);
return true;
}
else
return false;
}
PHPサポート 可変長引数リスト 。簡単に言うと、任意の関数に必要なだけ追加の引数を渡すことができ、PHPは点滅しません。
ソース の $wpdb->prepare()
メソッドを見ると、単にすべての引数を取得します。 with func_get_args()
を変数に入れて、それで動作します。関数のシグネチャ(古いか現在のどちらか)についてはまったく関係ありません。
だから私はこれはあなたのパスワードの問題とは全く関係ないと思う、私はそのプラグインをつついてみたい。
PS 3.2は3.1とそれほど変わらない、なぜ問題がアップグレードされるのか?古いバージョンを実行するのは、長期的には問題です。