web-dev-qa-db-ja.com

wp_create_userが正しくパスワードを入力していません

誰かがフォームに記入した後に、新しいユーザーを作成しようとしています。私は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;
}
1
tollmanz

PHPサポート 可変長引数リスト 。簡単に言うと、任意の関数に必要なだけ追加の引数を渡すことができ、PHPは点滅しません。

ソース$wpdb->prepare() メソッドを見ると、単にすべての引数を取得します。 with func_get_args() を変数に入れて、それで動作します。関数のシグネチャ(古いか現在のどちらか)についてはまったく関係ありません。

だから私はこれはあなたのパスワードの問題とは全く関係ないと思う、私はそのプラグインをつついてみたい。

PS 3.2は3.1とそれほど変わらない、なぜ問題がアップグレードされるのか?古いバージョンを実行するのは、長期的には問題です。

1
Rarst