You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 06:34:52