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

如何为WooCommerce添加具备原生验证特性的REST API端点?

如何为WooCommerce添加继承原生验证机制的自定义REST API端点

完全可以通过WooCommerce提供的钩子和控制器继承机制实现,无需手动引入验证类——WooCommerce的REST API会自动对wc/v*命名空间下的端点进行consumer key/secret校验,只要你的权限回调逻辑正确对接原生机制。

现有代码的问题点

  1. 硬编码文件路径:直接写死WooCommerce的插件路径,一旦插件目录变更或WooCommerce版本更新,会导致文件引入失败
  2. 错误使用订单类型注册:wc_register_order_type是用来注册自定义订单类型的,你的自定义端点不需要这个操作,属于冗余代码
  3. 路由注册冗余:GET和POST请求可以合并到同一个register_rest_route调用中
  4. 控制器继承冗余:如果只是做简单的自定义端点,继承WC_REST_Controller比WC_REST_Posts_Controller更轻量,后者是专门处理帖子/自定义帖子类型的API控制器

优化后的实现代码

<?php
/*
Plugin Name: Umut API
Description: WooCommerce API deneme eklentisi.
Version: 1.0
Author: Umut
Text Domain: umut-api
Domain Path: /lang
*/

// 确保WooCommerce已激活
add_action('plugins_loaded', 'umut_api_init');

function umut_api_init() {
    if (!class_exists('WooCommerce')) {
        add_action('admin_notices', function() {
            echo '<div class="error"><p>Umut API需要WooCommerce插件激活才能使用</p></div>';
        });
        return;
    }

    // 引入必要的WooCommerce REST控制器类
    if (!class_exists('WC_REST_Controller')) {
        require_once WC()->plugin_path() . '/includes/rest-api/Controllers/Version3/class-wc-rest-controller.php';
    }

    class WC_REST_Custom_Controller extends WC_REST_Controller {
        protected $namespace = 'wc/v3';
        protected $rest_base = 'custom';

        public function register_routes() {
            // 合并GET和POST请求的路由注册
            register_rest_route(
                $this->namespace,
                '/' . $this->rest_base,
                [
                    [
                        'methods'             => WP_REST_Server::READABLE,
                        'callback'            => [$this, 'get_custom'],
                        'permission_callback' => [$this, 'check_permissions'],
                    ],
                    [
                        'methods'             => WP_REST_Server::CREATABLE,
                        'callback'            => [$this, 'post_custom'],
                        'permission_callback' => [$this, 'check_permissions'],
                    ],
                ]
            );
        }

        public function get_custom($request) {
            return rest_ensure_response(['cevap' => 'get çalıştı']);
        }

        public function post_custom($request) {
            return rest_ensure_response(['cevap' => 'post çalıştı']);
        }

        // 对接WooCommerce原生权限验证
        public function check_permissions($request) {
            // 调用WooCommerce的全局权限检查,自动处理consumer key/secret校验
            return WC_REST_Authentication::check_permissions($request);
        }
    }

    // 通过钩子注册自定义控制器
    add_filter('woocommerce_rest_api_get_rest_namespaces', 'woo_custom_api_register_controller');
}

function woo_custom_api_register_controller($controllers) {
    $controllers['wc/v3']['custom'] = 'WC_REST_Custom_Controller';
    return $controllers;
}
?>

关键说明

  1. 自动验证机制:只要端点在wc/v3命名空间下,并且权限回调调用WC_REST_Authentication::check_permissions,WooCommerce就会自动完成consumer key和consumer secret的校验,无需手动处理
  2. 安全的文件引入:使用WC()->plugin_path()获取WooCommerce的插件路径,避免硬编码导致的错误;同时用class_exists检查类是否存在,防止重复引入
  3. 轻量控制器:继承WC_REST_Controller而非帖子控制器,只保留必要的REST API基础功能,减少冗余
  4. 规范的响应格式:用rest_ensure_response包装返回值,确保符合WordPress REST API的响应规范

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 16:32:51