Talvez isso ajude você?
Ele parece ter tido um problema parecido e resolvido há um ano.
O que ele faz diferente da sua abordagem é redirecionar 48 horas após o registro. Talvez isso seja suficiente?
Se não, estou procurando fazer do seu jeito.
--- EDITAR
Ok, acabei de criar um plugin que faz exatamente o que você quer:
/*
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');
Adiciona um metadado de usuário "changed_password" ao usuário que alterou sua senha.
Ao fazer o login, ele verifica se o metadado do usuário "changed_password" está definido e redireciona se não estiver definido (e, portanto, o usuário não alterou sua senha uma vez).
Quando a senha do usuário é redefinida para uma senha aleatória, os metadados do usuário "changed_password" também são redefinidos.