「パスワード変更」ページがあります。
ワードプレスを使用しているユーザーlogin first time
がパスワードを生成したときにそのページをリダイレクトする方法はありますか?
ありがとう
多分これはあなたを助けますか?
https://stackoverflow.com/questions/4267285/redirect-user-after-first-login-in-wordpress
彼は同様の問題を抱えているようで、1年前にそれを解決しました。
彼があなたのアプローチと異なるのは登録後48時間目のリダイレクトです。多分これで十分ですか?
そうでない場合 - 私はそれをあなたのやり方でやろうと思っています。
---編集
さて、私はちょうどあなたが望むものを正確にするものをプラグインにしました:
/*
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');
パスワットを変更したユーザーに、ユーザーのメタデータ "changed_password"を追加します。
ログイン時に、ユーザーのメタデータ "changed_password"が設定されているかどうかを確認し、設定されていない場合はリダイレクトします(したがって、ユーザーは一度でもパスワードを変更していない)。
ユーザーのパスワードがランダムなものにリセットされると、ユーザーのメタデータ "changed_password"もリセットされます。
フック user_register および ユーザーメタデータを追加する 「まだログインしていません」フラグを格納します。 wp_login そしてそのメタデータをチェックし、もしあれば削除してリダイレクトし、そうでなければ通常のログイン動作をします。
ミロの答えに加えて:
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');
編集(FYI)
フックwp_login
は、ユーザーメタ検索の観点からは、あまりうまく機能していません。ユーザがログインした状態でFALSE
を返すことがあります。