Wordpress WooCommerce Rest-API переопределить схему элементов - PullRequest
0 голосов
/ 25 августа 2018

Я пытаюсь использовать WooCommerce с дробными количествами запасов с помощью плагина [Количества и единицы для WooCommerce] [1], и он работает довольно хорошо. Моя единственная проблема заключается в том, что API WooCommerce отклоняет количества с десятичными точками, потому что схема элемента в контроллере продуктов остатка (class-wc-rest-products-controller.php) определяет его как целое число (проверка).

Как я могу переопределить эту схему в плагине, не изменяя исходный код WooCommerce?

1 Ответ

0 голосов
/ 11 сентября 2018

Решение состоит в том, чтобы создать подкласс требуемого контроллера WooCommerce, заново присоединить остальной маршрут и переопределить функцию get_item_schema.

Например (переопределить тип количества числом вместо целого числа):

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();
...