J'ai une page "changer le mot de passe".
Y a-t-il un moyen de rediriger cette page lorsque l'utilisateur login first time
utilisant le mot de passe généré par wordpress?
Merci
Peut-être que cela vous aide?
https://stackoverflow.com/questions/4267285/redirect-user-after-first-login-in-wordpress
Il semble avoir eu un problème similaire et l'a résolu il y a un an.
Ce qu’il fait différemment à votre approche est de rediriger 48 heures après l’enregistrement. Peut-être que cela suffit?
Sinon, je compte le faire à votre façon.
--- MODIFIER
Ok je viens de faire un plugin ce qui fait exactement ce que vous voulez:
/*
Plugin Name: Redirect Passwort
Plugin URI: TODO
Description: TODO
Author: xaeDes
Version: 0.1
Author URI: TODO
License: GPL2
*/
function redirect_passwort_profile_update($user_id, $old_user_data) {
$user = new WP_User( $user_id );
if( $user->data->user_pass != $old_user_data->user_pass) {
//password has changed
update_metadata("user",$user_id,"changed_password",true);
}
}
add_action("profile_update", "redirect_passwort_profile_update", 10, 2);
function redirect_passwort_login_redirect($redirect_to, $url_redirect_to = '', $user = null) {
if( isset($user->ID) ) {
$changed_password = get_metadata("user", $user->ID, "changed_password",true);
if( $changed_password != true ) {
return get_bloginfo('url') . "/change-your-password-dude/";
} else {
return $redirect_to;
}
}
}
add_filter('login_redirect', 'redirect_passwort_login_redirect',10,3);
function redirect_passwort_password_reset( $user ) {
//password has been reset to a random one. so the changed_password meta data should be reset as well
if( isset($user->ID) ) {
delete_metadata("user", $user->ID, "changed_password");
}
}
add_action('password_reset', 'redirect_passwort_password_reset');
Il ajoute une métadonnée utilisateur "modified_password" à l'utilisateur qui a modifié son mot de passe.
Lors de la connexion, il vérifie si les métadonnées de l'utilisateur "mot_de_passe_modifié" est défini et redirige s'il n'est pas défini (l'utilisateur n'a donc pas changé son mot de passe, même une fois).
Lorsque le mot de passe de l'utilisateur est réinitialisé à un nom aléatoire, les métadonnées de l'utilisateur "mot_de_passe_changé" sont également réinitialisées.
Hook user_register et ajouter des métadonnées utilisateur pour stocker l'indicateur "ne s'est pas encore connecté". Accrochez wp_login et vérifiez ces métadonnées, supprimez-les et redirigez-les si elles existent, sinon faites-vous en respectant le comportement de connexion normal.
En plus de la réponse de Milo:
function after_user_register( $user_id ){
// the new user just registered but never logged in yet
add_user_meta($user_id, "has_not_logged_in_yet", "true", true);
}
add_action( 'user_register', 'after_user_register', 10, 1 );
function after_user_loggedin(){
if(is_user_logged_in()){
$user_id=get_current_user_id();
$user_meta=get_user_meta($user_id);
if(isset($user_meta['has_not_logged_in_yet'])){
delete_user_meta($user_id, "has_not_logged_in_yet");
//do something else
}
}
}
add_action( 'init', 'after_user_loggedin');
Modifier (FYI)
Hook wp_login
ne fonctionne pas très bien en termes de récupération de méta utilisateur. Parfois, retourne FALSE
avec l'utilisateur connecté.