Update coupon search to allow searching by code (https://github.com/woocommerce/woocommerce-admin/pull/1800)
* Add coupon code search filtering to REST API * Use search_code param in coupon search results * Use search_code param in coupon autocompleter * Override search param instead of adding search_code param
This commit is contained in:
parent
53f84e1b5d
commit
fae447014f
|
@ -24,4 +24,70 @@ class WC_Admin_REST_Coupons_Controller extends WC_REST_Coupons_Controller {
|
||||||
*/
|
*/
|
||||||
protected $namespace = 'wc/v4';
|
protected $namespace = 'wc/v4';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the query params for collections.
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function get_collection_params() {
|
||||||
|
$params = parent::get_collection_params();
|
||||||
|
$params['search'] = array(
|
||||||
|
'description' => __( 'Limit results to coupons with codes matching a given string.', 'woocommerce-admin' ),
|
||||||
|
'type' => 'string',
|
||||||
|
'validate_callback' => 'rest_validate_request_arg',
|
||||||
|
);
|
||||||
|
return $params;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add coupon code searching to the WC API.
|
||||||
|
*
|
||||||
|
* @param WP_REST_Request $request Request data.
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
protected function prepare_objects_query( $request ) {
|
||||||
|
$args = parent::prepare_objects_query( $request );
|
||||||
|
|
||||||
|
if ( ! empty( $request['search'] ) ) {
|
||||||
|
$args['search'] = $request['search'];
|
||||||
|
$args['s'] = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $args;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a collection of posts and add the code search option to WP_Query.
|
||||||
|
*
|
||||||
|
* @param WP_REST_Request $request Full details about the request.
|
||||||
|
* @return WP_Error|WP_REST_Response
|
||||||
|
*/
|
||||||
|
public function get_items( $request ) {
|
||||||
|
add_filter( 'posts_where', array( __CLASS__, 'add_wp_query_search_code_filter' ), 10, 2 );
|
||||||
|
$response = parent::get_items( $request );
|
||||||
|
remove_filter( 'posts_where', array( __CLASS__, 'add_wp_query_search_code_filter' ), 10 );
|
||||||
|
return $response;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add code searching to the WP Query
|
||||||
|
*
|
||||||
|
* @param string $where Where clause used to search posts.
|
||||||
|
* @param object $wp_query WP_Query object.
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function add_wp_query_search_code_filter( $where, $wp_query ) {
|
||||||
|
global $wpdb;
|
||||||
|
|
||||||
|
$search = $wp_query->get( 'search' );
|
||||||
|
if ( $search ) {
|
||||||
|
$search = $wpdb->esc_like( $search );
|
||||||
|
$search = "'%" . $search . "%'";
|
||||||
|
$where .= ' AND ' . $wpdb->posts . '.post_title LIKE ' . $search;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $where;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue