如何在WordPress的functions.php中添加仅登录时触发的函数?
实现WordPress登录时触发用户信息POST接口的完整方案
需求回顾
你想要在WordPress中实现一个仅在用户登录时触发的函数,将用户的ID和邮箱以JSON格式POST到指定的外部接口。
原代码的问题分析
你的核心思路是对的,但存在几个关键问题导致代码无法正常运行:
- 变量名不一致:初始化CURL用的是
$curl,但设置CURLOPT_RETURNTRANSFER时误写为$ch - 错误处理未完成:
curl_error($resu...不仅参数错误,代码也未写完 - 缺少钩子绑定:函数没有挂载到WordPress的登录动作钩子,无法在用户登录时自动触发
修正后的完整代码
把这段代码添加到你的主题(或子主题)的functions.php文件中即可:
// 绑定WordPress登录钩子,用户成功登录时自动触发函数 add_action( 'wp_login', 'identify_user', 10, 2 ); function identify_user( $user_login, $user ) { // 构造要发送的用户数据数组 $user_data = array( 'user_id' => $user->ID, 'user_email' => $user->user_email ); $user_json = json_encode( $user_data ); // 初始化CURL请求(建议加上http/https协议头,避免URL解析错误) $curl = curl_init( 'https://myApp.com/endpoint' ); if ( !$curl ) { error_log( 'CURL初始化失败:' . curl_error( $curl ) ); return; } // 设置CURL请求选项 curl_setopt( $curl, CURLOPT_POST, true ); curl_setopt( $curl, CURLOPT_POSTFIELDS, $user_json ); curl_setopt( $curl, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json' ) ); curl_setopt( $curl, CURLOPT_RETURNTRANSFER, true ); curl_setopt( $curl, CURLOPT_SSL_VERIFYPEER, true ); // 生产环境建议开启SSL验证,防止请求被劫持 curl_setopt( $curl, CURLOPT_TIMEOUT, 10 ); // 设置超时时间,避免接口响应慢阻塞WordPress登录流程 // 执行请求并获取响应 $result = curl_exec( $curl ); $http_status = curl_getinfo( $curl, CURLINFO_HTTP_CODE ); // 错误与响应处理 if ( curl_errno( $curl ) ) { $error_msg = curl_error( $curl ); error_log( '用户信息POST请求失败:' . $error_msg ); } else { // 根据接口返回的HTTP状态码判断请求结果 if ( $http_status === 200 ) { error_log( '用户信息已成功发送到接口,响应内容:' . $result ); } else { error_log( '接口返回非成功状态码:' . $http_status . ',响应内容:' . $result ); } } // 关闭CURL资源,释放内存 curl_close( $curl ); }
关键细节说明
- 钩子绑定:使用
wp_login动作钩子,这是WordPress官方提供的登录触发钩子,会在用户成功登录后自动执行绑定的函数,同时传递登录用户名和WP_User对象两个参数,刚好满足我们获取用户ID和邮箱的需求 - CURL优化:添加了协议头、SSL验证、超时设置,既保证了请求的安全性,也避免了因接口问题导致WordPress登录流程卡顿
- 日志记录:用
error_log记录请求状态,开启WP_DEBUG后可以在wp-content/debug.log文件中查看这些日志,方便后续排查问题 - 数据安全:确保你的目标接口是可信的,避免用户敏感信息泄露;如果接口需要身份验证,记得添加对应的请求头或认证参数
内容的提问来源于stack exchange,提问作者Yale Newman
相关产品推荐
相关产品推荐

