前言
为了满足企业网站对安全性的高要求,下面提供一段代码示例,用于强制新用户在首次登录时更改密码。通过这段代码,当用户完成注册或管理员通过后台创建用户时,系统会自动设置一个“首次登录”的标志。用户在首次登录时会被重定向到一个特定的页面,以更改密码。在密码更改之前,用户每次尝试访问网站都会被重定向到该页面,直到他们成功更新密码并清除首次登录标志为止。
教程
将代码添加到主题函数模板functions.php
中:
// 用户注册或创建时添加首次登录标记first_login
add_action( 'user_register', 'set_first_login_meta' );
function set_first_login_meta($user_id) {
update_user_meta($user_id, 'first_login', 'yes');
}
// 用户登录检查标记first_login
add_action( 'wp_login', 'set_first_login_meta_on_login', 10, 2 );
function set_first_login_meta_on_login( $user_login, $user ) {
// 用户是否有标记
$is_first_login = get_user_meta( $user->ID, 'first_login', true );
if ( ! $is_first_login ) {
// 如果不是首次登录,直接返回
return;
}
}
// 登录时检测首次登录标记并跳转
add_action( 'template_redirect', 'redirect_first_time_user' );
function redirect_first_time_user() {
// 获取当前用户
if ( is_user_logged_in() ) {
$user = wp_get_current_user();
// 获取用户的首次登录标记
$is_first_login = get_user_meta( $user->ID, 'first_login', true );
// 如果是首次登录且标记存在
if ( $is_first_login === 'yes' ) {
// 跳转到指定页面,例如 /wp-admin/profile.php
if ( ! is_page( 'wp-admin/profile.php' ) ) { // 不在指定页面时跳转
wp_redirect( home_url( '/wp-admin/profile.php' ) ); // 修改跳转页面
exit;
}
}
}
}
// 用户修改密码时,清除首次登录标记
add_action( 'profile_update', 'clear_first_login_meta_on_password_change', 10, 2 );
function clear_first_login_meta_on_password_change( $user_id, $old_user_data ) {
// 检查密码是否发生了变化
if ( ! empty( $_POST['pass1'] ) && $_POST['pass1'] !== '' ) {
// 清除首次登录标记
delete_user_meta( $user_id, 'first_login' );
}
}
其中的跳转页面链接/wp-admin/profile.php,可以根据实际情况修改,比如前端用户中心等。
本文转自知更鸟进行部分优化

© 版权声明
本站技术资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权请联系邮箱i@daib.cn删除!
THE END