Wordpress Rest API覆盖项架构

Wordpress Rest API覆盖项架构,wordpress,woocommerce,wordpress-rest-api,woocommerce-rest-api,Wordpress,Woocommerce,Wordpress Rest Api,Woocommerce Rest Api,我正在尝试使用带有分数库存量的WooCommerce插件[Quantilities and Units for WooCommerce][1],效果非常好。我唯一的问题是,WooCommerce API拒绝带有小数点的数量,因为Rest产品控制器(类wc Rest Products Controller.php)中的项模式将其定义为整数(验证) 如何在不修改源代码的情况下覆盖插件中的此模式 解决方案是,要创建所需WooCommerce控制器的子类,请重新附加rest路由并重写get_item_s

我正在尝试使用带有分数库存量的WooCommerce插件[Quantilities and Units for WooCommerce][1],效果非常好。我唯一的问题是,WooCommerce API拒绝带有小数点的数量,因为Rest产品控制器(类wc Rest Products Controller.php)中的项模式将其定义为整数(验证)


如何在不修改源代码的情况下覆盖插件中的此模式

解决方案是,要创建所需WooCommerce控制器的子类,请重新附加rest路由并重写get_item_schema函数

例如(将数量类型改写为数字而不是整数):

class-WC\u-REST\u-Products\u-Quantity\u-Controller扩展了WC\u-REST\u-Products\u-Controller{
公共函数构造(){
父项::_构造();
添加操作('rest\u api\u init',数组($this,'register\u rest\u routes'),8);
}
/**
*为产品注册路线。
*/
公共功能寄存器\休息\路线(){
登记休息路线(
$this->namespace'/'.$this->rest_base'/(?P[\d]+)',数组(
“args”=>数组(
'id'=>数组(
“description'=>”(资源的唯一标识符),“woocommerce”),
'类型'=>'整数',
),
),
排列(
“方法”=>WP\U REST\U服务器::可编辑,
'callback'=>array('this'update_item'),
'permission\u callback'=>数组('update\u item\u permissions\u check'),
'args'=>this->get_endpoint_args_for_item_schema(WP_REST_Server::EDITABLE),
),
“schema'=>数组($this,'get\u public\u item\u schema'),
)
);
}
公共功能更新项目($request){
返回父项::更新_项($request);
}
公共函数get_item_schema()
{
$res=parent::get_item_schema();
$res[“属性”][“库存数量”][“类型”]=“数量”;
返回$res;
}
}
新WC_剩余_产品_数量_控制器();
class WC_REST_Products_Quantity_Controller extends WC_REST_Products_Controller {
    public function __construct() {
        parent::__construct();

        add_action( 'rest_api_init', array( $this, 'register_rest_routes' ), 8 );
    }

    /**
     * Register the routes for products.
     */
    public function register_rest_routes() {
        register_rest_route(
            $this->namespace, '/' . $this->rest_base . '/(?P<id>[\d]+)', array(
                'args'   => array(
                    'id' => array(
                        'description' => __( 'Unique identifier for the resource.', 'woocommerce' ),
                        'type'        => 'integer',
                    ),
                ),
                array(
                    'methods'             => WP_REST_Server::EDITABLE,
                    'callback'            => array( $this, 'update_item' ),
                    'permission_callback' => array( $this, 'update_item_permissions_check' ),
                    'args'                => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ),
                ),
                'schema' => array( $this, 'get_public_item_schema' ),
            )
        );
    }

    public function update_item($request) {
        return parent::update_item($request);
    }
    public function get_item_schema()
    {
        $res = parent::get_item_schema();

        $res["properties"]["stock_quantity"]["type"] = "number";

        return $res;
    }
}

new WC_REST_Products_Quantity_Controller();