【发布时间】:2015-02-09 22:00:19
【问题描述】:
我有一个脚本可以通过检查外部数据库中的电子邮件和密码来创建一个新的 wordpress 用户。我有一个脚本可以使用电子邮件地址登录。
从外部数据库添加用户的脚本按预期工作,但通知电子邮件没有。
我尝试过(密码以纯文本形式存储在外部数据库中 - 我知道根本不推荐):
wp_new_user_notification($new_user_id, $result->det->USR_PASSWORD);
wp_new_user_notification($user->ID, $result->det->USR_PASSWORD);
wp_new_user_notification($user->data->ID, $result->det->USR_PASSWORD);
似乎没有任何效果。这是我使用的完整脚本:
add_filter('authenticate', 'uj_auth', 20, 3);
function uj_auth( $user, $username, $password ){
if ( is_a($user, 'WP_User') ) { return $user; } //check if existing user
if ( empty($username) || empty($password) ) {
$error = new WP_Error();
if ( empty($username) )
$error->add('empty_username', __('<strong>ERROR</strong>: The username field is empty.'));
if ( empty($password) )
$error->add('empty_password', __('<strong>ERROR</strong>: The password field is empty.'));
return $error;
}
$userdata = get_user_by('login', $username);
if ( !$userdata ): //if not an existing user
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL,"http://webstite.com");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_FORBID_REUSE, true);
curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_POSTFIELDS,"apikey=apikey&username=$username&password=$password");
$json = curl_exec ($ch);
curl_close ($ch);
$result = json_decode($json); //the result array from the external api
if ($result->result == 'OK'): //if user and pass match those in database result is OK
//Verify if the username is not NULL. User user-id instead
if(is_null($result->det->USR_USERNAME)) $result->det->USR_USERNAME = $result->det->USR_ID;
// Setup the required user information
$userdata = array(
'user_email' => $result->det->USR_EMAIL,
'user_pass' => $result->det->USR_PASSWORD,
'user_login' => $result->det->USR_USERNAME,
'first_name' => $result->det->USR_PRENUME,
'last_name' => $result->det->USR_NUME
);
// A new user has been created
$new_user_id = wp_insert_user( $userdata );
// Load the new user info
$user = new WP_User ($new_user_id);
// Email the user
wp_new_user_notification($new_user_id, $result->det->USR_PASSWORD);
else:
return new WP_Error('invalid_username', sprintf(__('<strong>ERROR</strong>: Utilizator și/sau parolă introduse greșit sau inexistente. <a href="'.site_url('inregistrare').'" title="Inregistreaza-te">Inregistrează-te!</a>')));
endif;
else:
$userdata = apply_filters('wp_authenticate_user', $userdata, $password);
if ( is_wp_error($userdata) )
return $userdata;
if ( !wp_check_password($password, $userdata->user_pass, $userdata->ID) )
return new WP_Error( 'incorrect_password', sprintf( __( '<strong>ERROR</strong>: The password you entered for the username <strong>%1$s</strong> is incorrect. <a href="%2$s" title="Password Lost and Found">Lost your password</a>?' ),
$username, wp_lostpassword_url() ) );
$user = new WP_User($userdata->ID);
endif;
//remove_action('authenticate', 'wp_authenticate_username_password', 20);
return $user;
}
那我做错了什么?
【问题讨论】: