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

WordPress-Discord注册通知集成:Hook触发失败求助

问题排查与修复方案

核心问题分析

你的插件存在几个关键问题导致钩子不触发或通知失败:

  • user_register 钩子仅在前端注册表单创建新用户时触发,后台手动添加用户不会触发该钩子
  • 函数 on_user_register 内部无法访问全局变量 $discord_bot_endpoint,导致请求地址为空
  • 发送给Discord Webhook的数据格式不符合要求,Discord需要特定的结构(比如content或embeds字段)

修复步骤

1. 兼容后台用户创建动作

添加user_created钩子覆盖后台添加用户的场景,同时保留user_register覆盖前端注册:

add_action('user_register', 'on_user_register');
add_action('user_created', 'on_user_register');

2. 修正变量作用域

在函数内部声明global $discord_bot_endpoint,或者直接把Webhook地址写在函数内部避免全局变量问题:

function on_user_register($user_id) {
    global $discord_bot_endpoint; // 声明访问全局变量
    // 或者直接定义:$discord_bot_endpoint = '你的Webhook地址';
    // ... 其他代码
}

3. 调整Discord Webhook数据格式

Discord Webhook需要指定content字段显示消息内容,或者用embeds格式化消息。示例格式:

$data = array(
    'content' => "新用户注册通知:\n用户名: {$username}\n姓名: {$first_name} {$last_name}\n用户ID: {$user_id}"
);

4. 增加调试日志

除了请求失败日志,添加成功日志便于排查:

if (is_wp_error($response)) {
    error_log('Discord通知发送失败: ' . $response->get_error_message());
} else {
    error_log('Discord通知发送成功,响应状态码: ' . wp_remote_retrieve_response_code($response));
}

完整修正代码

<?php
/*
Plugin Name: Discord Registration Notification
Description: Send notifications to Discord when a user registers.
Version: 1.0
*/

// Define the Discord bot endpoint where the notification should be sent
$discord_bot_endpoint = 'https://discord.com/api/webhooks/1171354893924171787/5Exxxx_xxxF';

// User registration event handling
function on_user_register($user_id) {
    global $discord_bot_endpoint;
    $user = get_userdata($user_id);
    if (!$user) {
        error_log('无法获取用户数据,用户ID: ' . $user_id);
        return;
    }
    
    $username = $user->user_login;
    $first_name = $user->first_name;
    $last_name = $user->last_name;
    $email = $user->user_email; // 可选:添加邮箱信息

    // 符合Discord Webhook要求的数据格式
    $data = array(
        'content' => "📢 新用户注册通知\n"
                   . "用户名: {$username}\n"
                   . "姓名: {$first_name} {$last_name}\n"
                   . "邮箱: {$email}\n"
                   . "用户ID: {$user_id}"
    );

    $response = wp_safe_remote_post($discord_bot_endpoint, array(
        'body' => json_encode($data),
        'headers' => array('Content-Type' => 'application/json'),
        'timeout' => 10, // 增加超时时间
    ));

    if (is_wp_error($response)) {
        error_log('Discord通知发送失败: ' . $response->get_error_message());
    } else {
        $status_code = wp_remote_retrieve_response_code($response);
        if ($status_code === 204) {
            error_log('Discord通知发送成功');
        } else {
            error_log('Discord通知响应异常,状态码: ' . $status_code . ',响应内容: ' . wp_remote_retrieve_body($response));
        }
    }
}

// 挂载钩子,覆盖前端和后台创建用户场景
add_action('user_register', 'on_user_register');
add_action('user_created', 'on_user_register');

额外排查建议

  • 检查WordPress错误日志(通常在wp-content/debug.log,需要开启WP_DEBUG)
  • 验证Discord Webhook地址是否有效:可以用Postman直接发送请求测试
  • 确保服务器允许对外发送HTTP请求(部分主机可能禁用wp_safe_remote_post)

内容的提问来源于stack exchange,提问作者PyDeveloper

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 02:38:34