2018-12-22 00:40:41 +00:00
|
|
|
<?php
|
|
|
|
/**
|
|
|
|
* REST API Orders Controller
|
|
|
|
*
|
|
|
|
* Handles requests to /orders/*
|
|
|
|
*
|
|
|
|
* @package WooCommerce Admin/API
|
|
|
|
*/
|
|
|
|
|
|
|
|
defined( 'ABSPATH' ) || exit;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Orders controller.
|
|
|
|
*
|
|
|
|
* @package WooCommerce Admin/API
|
|
|
|
* @extends WC_REST_Orders_Controller
|
|
|
|
*/
|
2019-01-18 02:52:58 +00:00
|
|
|
class WC_Admin_REST_Orders_Controller extends WC_REST_Orders_Controller {
|
|
|
|
/**
|
|
|
|
* Endpoint namespace.
|
|
|
|
*
|
|
|
|
* @var string
|
|
|
|
*/
|
|
|
|
protected $namespace = 'wc/v4';
|
|
|
|
|
2018-12-22 00:40:41 +00:00
|
|
|
/**
|
|
|
|
* Get the query params for collections.
|
|
|
|
*
|
|
|
|
* @return array
|
|
|
|
*/
|
|
|
|
public function get_collection_params() {
|
2019-03-13 17:14:02 +00:00
|
|
|
$params = parent::get_collection_params();
|
2019-04-19 09:41:39 +00:00
|
|
|
// This needs to remain a string to support extensions that filter Order Number.
|
2018-12-22 00:40:41 +00:00
|
|
|
$params['number'] = array(
|
2019-03-13 17:14:02 +00:00
|
|
|
'description' => __( 'Limit result set to orders matching part of an order number.', 'woocommerce-admin' ),
|
2019-03-22 20:25:44 +00:00
|
|
|
'type' => 'string',
|
2018-12-22 00:40:41 +00:00
|
|
|
'validate_callback' => 'rest_validate_request_arg',
|
|
|
|
);
|
|
|
|
return $params;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Prepare objects query.
|
|
|
|
*
|
|
|
|
* @param WP_REST_Request $request Full details about the request.
|
|
|
|
* @return array
|
|
|
|
*/
|
|
|
|
protected function prepare_objects_query( $request ) {
|
|
|
|
global $wpdb;
|
|
|
|
$args = parent::prepare_objects_query( $request );
|
|
|
|
|
|
|
|
// Search by partial order number.
|
|
|
|
if ( ! empty( $request['number'] ) ) {
|
2019-03-22 20:25:44 +00:00
|
|
|
$partial_number = trim( $request['number'] );
|
|
|
|
$limit = intval( $args['posts_per_page'] );
|
|
|
|
$order_ids = $wpdb->get_col(
|
2018-12-22 00:40:41 +00:00
|
|
|
$wpdb->prepare(
|
2019-03-22 20:25:44 +00:00
|
|
|
"SELECT ID
|
|
|
|
FROM {$wpdb->prefix}posts
|
|
|
|
WHERE post_type = 'shop_order'
|
|
|
|
AND ID LIKE %s
|
|
|
|
LIMIT %d",
|
|
|
|
$wpdb->esc_like( absint( $partial_number ) ) . '%',
|
|
|
|
$limit
|
2018-12-22 00:40:41 +00:00
|
|
|
)
|
|
|
|
);
|
|
|
|
|
|
|
|
// Force WP_Query return empty if don't found any order.
|
2019-03-22 20:25:44 +00:00
|
|
|
$order_ids = empty( $order_ids ) ? array( 0 ) : $order_ids;
|
2018-12-22 00:40:41 +00:00
|
|
|
$args['post__in'] = $order_ids;
|
|
|
|
}
|
|
|
|
|
|
|
|
return $args;
|
|
|
|
}
|
|
|
|
}
|