WordPress用户首次登录强制修改密码

news/2024/12/16 21:46:49/

有些企业网站要求很高,比如用户首次登录强制要求修改密码,这里提供一段代码,用于实现强制修改密码供参考。

通过代码可以实现,用户正常注册或者管理员在后台添加用户时,会添加首次登录标记,用户首次登录后会跳转到指定页面,如果不修改密码,访问网站也会跳转,直至修改过一次密码,清除首次登录标记。

将代码添加到主题函数模板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,可以根据实际情况修改,比如前端用户中心等。


http://www.ppmy.cn/news/1555685.html

相关文章

elasticsearch 使用enrich processor填充数据

文章目录 使用 POST 请求手动插入用户数据1. 创建 Enrich Policy步骤 1.1: 创建 Enrich Policy步骤 1.2: 执行 Enrich Policy 2. 创建 Ingest Pipeline步骤 2.1: 创建 Ingest Pipeline步骤 2.2: 配置 Enrich Processor 参数 3. 使用 Ingest Pipeline步骤 3.1: 使用 Pipeline 进…

若依微服务中配置 MySQL + DM 多数据源

文章目录 1、导入 MySQL 和达梦(DM)依赖2、在 application-druid.yml 中配置达梦(DM)数据源3、在 DruidConfig 类中配置多数据源信息4、在 Service 层或方法级别切换数据源4.1 在 Service 类上切换到从库数据源4.2 在方法级别切换…

前端Vue中使用Guacamole进行远程桌面的前端部分

最近公司有个项目要求远程虚拟机,最后选择使用了Guacamole进行实现,网上搜了一下感觉资料不是很多,对guacamole-common.js里的API介绍也没查到(捂脸),可能是我的问题。网上的教程都是教后端怎么搭建远程桌面…

Spring Boot集成ShedLock实现分布式定时任务

1、什么是ShedLock? ShedLock 是一个 Java 库,通常用于分布式系统中,确保定时任务(Scheduled Tasks)在集群环境下只被某一个实例执行一次。它通过在共享资源(例如数据库或分布式缓存)中添加锁的…

人工智能大语言模型起源篇,低秩微调(LoRA)

上一篇: 《规模法则(Scaling Law)与参数效率的提高》 序言:您在找工作时会不会经常听到LoRA微调,这项技术的来源就是这里了。 (12)Hu、Shen、Wallis、Allen-Zhu、Li、L Wang、S Wang 和 Chen 于2021年发表…

Matlab笔记---clear、clc、clear all应用

在MATLAB中,clear、clc 和 clear all 是三个常用的命令,它们各自有不同的作用: clc: clc 命令用于清除MATLAB命令窗口中的所有输出。它不会删除任何变量、函数或文件,只是清除屏幕上的显示内容,让你可以更…

并行口的基本概念

单片机的并行口结构包括多个并行I/O端口,用于与外部设备进行并行数据传输。这些端口能够直接读写外部存储器、显示设备、打印机等外设的数据,是单片机与外界交互的重要通道。在深入探讨之前,我们先简要了解下单片机的基本概念。 单片机&…

Next.js 指令教程:深入理解 use-server 指令

更多有关Next.js教程,请查阅: 【目录】Next.js 独立开发系列教程-CSDN博客 目录 1. 概述 2. use-server 指令概述 2.1 什么是 use-server 指令? 2.2 为什么需要 use-server? 3. use-server 工作原理 3.1 渲染过程 3.2 动态…