WP_CREATE_USER未正确输入密码

时间:2011-08-06 作者:tollmanz

我正在尝试在有人填写表单后创建一个新用户。我正在使用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时向其发送两个参数。这到底是怎么回事?

最后,我有两个问题:

1) 为什么我的密码没有被发送到数据库2)发生了什么_insert_replace_helper 方法将两个参数发送到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 个回复
最合适的回答,由SO网友:Rarst 整理而成

PHP支持variable-lengths argument lists. 简单地说,您可以向任何函数传递任意多个附加参数,PHP甚至不会闪烁。

如果你看看source 属于$wpdb->prepare() 方法获取所有参数func_get_args() 转换为变量并使用该变量。它根本不关心函数签名(旧的或当前的)。

所以我认为这与你的密码问题完全无关,我会尝试戳那个插件。

PS 3.2与3.1没有太大区别,为什么升级时会出现问题?从长远来看,运行过时的版本是个麻烦。

结束

相关推荐

如何添加/更改$wpdb Property/var的值?

有一个问题:我想添加一个表“linkmeta”来像“posmeta”或“commentmeta”一样工作。。并使用add\\u metadata/update_metadata / 删除\\u元数据!但是,在此函数中,调用“\\u get\\u meta\\u table()”以验证db中的名称,代码如下:function _get_meta_table($type) { global $wpdb; $table_name = $type . \'meta\';