我有一个脚本,通过检查外部数据库中的电子邮件和密码来创建新的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;
}
那么我做错了什么?
答案 0 :(得分:0)
好的,我发现了什么问题。
使用$ new_user_id或$ user变量无法正常工作。
但是使用这样的功能会起作用。我有一些邮件设置问题,这就是为什么我第一次尝试这些选项时没有工作的原因:
wp_new_user_notification($user->ID, $result->det->USR_PASSWORD);
或
wp_new_user_notification($user->data->ID, $result->det->USR_PASSWORD);