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

如何开发WordPress插件实现自定义端点的自动API请求?

WordPress REST API监控插件开发入门指南

一、前期准备

  • 熟悉WordPress插件基础结构:掌握插件主文件的头部注释格式(/* Plugin Name: 你的插件名称 */),知道如何在wp-content/plugins目录下创建独立插件文件夹。
  • 掌握WordPress官方HTTP请求函数:核心使用wp_remote_get()、wp_remote_post(),这两个函数兼容不同服务器环境,比原生curl更适配WordPress生态。
  • 了解WordPress选项存储机制:用get_option()、update_option()来保存敏感数据(如access token),这是插件存储配置的标准安全方式。

二、核心功能分步实现

1. 认证Token的获取与存储

先编写一个获取并持久化token的函数,可在插件激活时自动触发,或添加手动刷新按钮:

function fetch_and_save_access_token() {
    $auth_endpoint = '你的认证接口URL';
    // 假设认证需要用户名密码,可后续改成后台配置项
    $auth_params = array(
        'username' => get_option('wp_api_monitor_user'),
        'password' => get_option('wp_api_monitor_pwd')
    );

    $response = wp_remote_post($auth_endpoint, array(
        'headers' => array('Content-Type' => 'application/json'),
        'body' => json_encode($auth_params)
    ));

    if (!is_wp_error($response)) {
        $response_body = json_decode(wp_remote_retrieve_body($response), true);
        if (isset($response_body['access_token'])) {
            update_option('wp_api_monitor_token', $response_body['access_token']);
            // 保存token过期时间,后续实现自动刷新
            if (isset($response_body['expires_in'])) {
                update_option('wp_api_monitor_token_expiry', time() + $response_body['expires_in']);
            }
            return true;
        }
    }
    return false;
}
// 插件激活时自动获取一次token
register_activation_hook(__FILE__, 'fetch_and_save_access_token');

2. 后台触发界面与API请求执行

首先添加后台菜单入口,让用户能手动触发监控:

function wp_api_monitor_add_admin_menu() {
    add_menu_page(
        'API监控工具',
        'API监控',
        'manage_options',
        'wp-api-monitor',
        'wp_api_monitor_render_admin_page'
    );
}
add_action('admin_menu', 'wp_api_monitor_add_admin_menu');

然后渲染后台页面,包含触发按钮和结果展示区域:

function wp_api_monitor_render_admin_page() {
    $results = array();
    // 处理监控触发请求,同时验证nonce防CSRF
    if (isset($_POST['run_monitor']) && wp_verify_nonce($_POST['api_monitor_nonce'], 'wp_api_monitor_action')) {
        $results = run_api_monitor();
    }
    ?>
    <div class="wrap">
        <h1>API监控工具</h1>
        <form method="post">
            <?php wp_nonce_field('wp_api_monitor_action', 'api_monitor_nonce'); ?>
            <input type="submit" name="run_monitor" class="button button-primary" value="开始监控">
        </form>
        <?php if (!empty($results)): ?>
            <h2>监控结果</h2>
            <ul style="margin-top:15px;">
                <?php foreach ($results as $url => $status): ?>
                    <li><?php echo esc_html($url . ': ' . $status); ?></li>
                <?php endforeach; ?>
            </ul>
        <?php endif; ?>
    </div>
    <?php
}

核心监控函数,遍历预设端点并收集响应状态:

function run_api_monitor() {
    $token = get_option('wp_api_monitor_token');
    // 如果token不存在,尝试重新获取
    if (!$token) {
        fetch_and_save_access_token();
        $token = get_option('wp_api_monitor_token');
        if (!$token) {
            return array('系统错误' => '无法获取认证Token,请检查认证配置');
        }
    }

    // 预设监控端点,后续可改成后台可配置项
    $monitor_endpoints = array(
        array(
            'url' => 'https://example.com/wp-json/wp/testing',
            'method' => 'GET',
            'headers' => array('Authorization' => 'Bearer ' . $token),
            'body' => null
        ),
        array(
            'url' => 'https://example.com/wp-json/wp/create',
            'method' => 'POST',
            'headers' => array(
                'Authorization' => 'Bearer ' . $token,
                'Content-Type' => 'application/json'
            ),
            'body' => json_encode(array('title' => '监控测试内容'))
        )
    );

    $results = array();
    foreach ($monitor_endpoints as $endpoint) {
        $request_args = array('headers' => $endpoint['headers']);
        if ($endpoint['body']) {
            $request_args['body'] = $endpoint['body'];
        }

        // 根据请求方法发送请求
        switch ($endpoint['method']) {
            case 'POST':
                $response = wp_remote_post($endpoint['url'], $request_args);
                break;
            case 'PUT':
                $response = wp_remote_request($endpoint['url'], array_merge($request_args, array('method' => 'PUT')));
                break;
            default:
                $response = wp_remote_get($endpoint['url'], $request_args);
        }

        // 处理响应结果
        if (is_wp_error($response)) {
            $results[$endpoint['url']] = '请求失败: ' . $response->get_error_message();
        } else {
            $status_code = wp_remote_retrieve_response_code($response);
            $status_msg = wp_remote_retrieve_response_message($response);
            $results[$endpoint['url']] = $status_code . ' ' . $status_msg;
        }
    }
    return $results;
}

3. 安全核心注意事项

  • 所有用户输入(包括后续添加的端点配置)必须用esc_html()、sanitize_text_field()过滤,防止XSS攻击。
  • 后台操作强制添加nonce验证,如上述代码中的wp_nonce_field()和wp_verify_nonce()组合,避免CSRF攻击。
  • 敏感数据(如认证密码、token)不要在后台页面明文显示,存储时依赖WordPress的选项加密机制(或自行添加加密逻辑)。

三、进阶优化建议

  • 端点配置可视化:添加后台设置页面,让用户可自由添加、编辑、删除监控端点,将配置存储到wp_options表。
  • Token自动刷新:每次请求前检查token过期时间,若已过期自动调用fetch_and_save_access_token()刷新。
  • 历史日志记录:创建自定义数据库表,存储每次监控的结果,支持按时间筛选查看。
  • 自动定时监控:用wp_schedule_event()设置每日定时任务,替代手动触发,实现原有Postman的自动监控功能。

四、调试技巧

  • 用error_log()输出请求细节,排查问题:
    error_log(print_r($response, true));
    
  • 开启WP_DEBUG:在wp-config.php中设置define('WP_DEBUG', true);,查看详细的PHP错误提示。
  • 打印响应体:用wp_remote_retrieve_body($response)查看API返回的具体错误信息,定位接口问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 22:11:06