如何在WordPress的Digits插件注册流程中验证第三方数据并拦截注册?
问题:Digits插件注册流程中提前验证第三方系统用户存在性
需求说明
- 基于Digits插件实现WordPress注册流程:用户输入手机号、邮箱、姓名、密码→点击“继续”→接收并验证短信OTP→验证成功后插入WP数据库,同时通过CURL将数据传递给第三方API
- 需要在发送OTP验证码/插入WP数据库之前,先调用第三方API验证用户(手机号/邮箱)是否已存在于第三方系统
- 验证结果为“已存在”时,阻止注册流程,提示错误,且不向WP数据库插入用户数据、不发送OTP
当前实现代码(custom-hook.php)
<?php add_action('digits_before_register_user', 'custom_digits_before_register', 1, 1); function log_debug($process_name, $reference_id = null, $request, $response, $status = null, $updated_at = '0000-00-00 00:00:00' ) { global $wpdb; $wpdb->insert('log_hook', [ 'process_name' => $process_name, // 可填写函数名等标识 'reference_id' => $reference_id, // 可填写用户ID、订单ID等参考标识 'request' => $request, // 请求内容 'response' => $response, // 响应内容 'status' => $status, // 流程状态:1=成功,0=失败 'created_at' => CURRENT_DATETIME, 'updated_at' => $updated_at ]); } function custom_digits_before_register($user_data) { // 提取注册数据 $data = [ 'phone_number' => $user_data['countrycode'] . $user_data['mobile'], 'email' => $user_data['email'], ]; // 记录注册前的用户信息日志 log_debug('custom_digits_before_register', '', '', json_encode($data), 1); wp_send_json_error(['message' => '当前无法验证数据,请稍后重试。']); exit; }
注:log_debug函数用于将调试数据插入自定义日志表,便于排查问题
遇到的问题
- 测试时,点击“继续”后OTP仍正常发送,钩子函数未触发(日志表无数据插入),无法执行第三方API验证逻辑
- 已尝试多个钩子:
digits_before_register_user、digits_before_otp_verification、digits_validate_otp、digits_custom_validation,均无效 - 无法访问插件官方文档,无法获取钩子的准确触发时机说明
补充信息:日志表创建语句
CREATE TABLE `log_hook` ( `id` int(11) NOT NULL AUTO_INCREMENT, `process_name` longtext DEFAULT NULL, `reference_id` int(11) DEFAULT NULL COMMENT 'example user_id/order_id/member_code etc for reference', `request` longtext DEFAULT NULL, `response` longtext DEFAULT NULL, `status` int(11) DEFAULT NULL COMMENT '0: failed, 1: success', `created_at` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `updated_at` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE current_timestamp(), PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci;
请求帮助
仅能修改custom-hook.php文件,不了解Digits插件内部代码结构,求有使用经验的开发者提供可行解决方案或替代实现方法。
内容的提问来源于stack exchange,提问作者Lovi
相关产品推荐
相关产品推荐

