From 54d0acdd3bcc18c783318add5c0a6f3fbb75c300 Mon Sep 17 00:00:00 2001 From: websupporter Date: Sat, 2 Jul 2016 10:50:06 +0000 Subject: [PATCH 1/5] adding relevance orderby --- lib/endpoints/class-wp-rest-posts-controller.php | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/endpoints/class-wp-rest-posts-controller.php b/lib/endpoints/class-wp-rest-posts-controller.php index 831afb12c1..103580df69 100755 --- a/lib/endpoints/class-wp-rest-posts-controller.php +++ b/lib/endpoints/class-wp-rest-posts-controller.php @@ -1708,6 +1708,7 @@ public function get_collection_params() { 'default' => 'date', 'enum' => array( 'date', + 'relevance', 'id', 'include', 'title', From ef18f250943521accda141b605b6c0630b596b54 Mon Sep 17 00:00:00 2001 From: websupporter Date: Sat, 2 Jul 2016 11:05:12 +0000 Subject: [PATCH 2/5] adding relevance orderby test --- tests/test-rest-posts-controller.php | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tests/test-rest-posts-controller.php b/tests/test-rest-posts-controller.php index f5bf647c1f..7f057dd811 100644 --- a/tests/test-rest-posts-controller.php +++ b/tests/test-rest-posts-controller.php @@ -270,6 +270,15 @@ public function test_get_items_order_and_orderby() { $response = $this->server->dispatch( $request ); $data = $response->get_data(); $this->assertEquals( 'Apple Cobbler', $data[0]['title']['rendered'] ); + + //Relevance orderby + $this->factory->post->create( array( 'post_title' => 'Coffee Cake is relevant', 'post_content' => 'Apple', 'post_status' => 'publish' ) ); + $this->factory->post->create( array( 'post_title' => 'Coffee Cake', 'post_content' => 'Apple is less relevant', 'post_status' => 'publish' ) ); + $request->set_param( 'search', 'relevant' ); + $request->set_param( 'orderby', 'relevance' ); + $response = $this->server->dispatch( $request ); + $data = $response->get_data(); + $this->assertEquals( 'Coffee Cake is relevant', $data[0]['title']['rendered'] ); } public function test_get_items_ignore_sticky_posts_by_default() { From 5442bf90cb38364048673f10fd917ec128f89ec6 Mon Sep 17 00:00:00 2001 From: websupporter Date: Mon, 25 Jul 2016 12:17:40 +0300 Subject: [PATCH 3/5] Add permission check whether ['search'] is present --- lib/endpoints/class-wp-rest-posts-controller.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/endpoints/class-wp-rest-posts-controller.php b/lib/endpoints/class-wp-rest-posts-controller.php index 103580df69..ede86c6f11 100755 --- a/lib/endpoints/class-wp-rest-posts-controller.php +++ b/lib/endpoints/class-wp-rest-posts-controller.php @@ -71,6 +71,10 @@ public function get_items_permissions_check( $request ) { $post_type = get_post_type_object( $this->post_type ); + if ( ! empty( $request['orderby'] ) && $request['orderby'] === 'relevance' && empty( $request['search'] ) ) { + return new WP_Error( 'rest_no_search_term_defined', __( 'You need to define a search term in order to use the relevance search.' ), array( 'status' => 400 ) ); + } + if ( 'edit' === $request['context'] && ! current_user_can( $post_type->cap->edit_posts ) ) { return new WP_Error( 'rest_forbidden_context', __( 'Sorry, you are not allowed to edit these posts in this post type' ), array( 'status' => rest_authorization_required_code() ) ); } From 359b8b9b8339e45824c2b99093c5abd5655992cc Mon Sep 17 00:00:00 2001 From: websupporter Date: Fri, 12 Aug 2016 13:08:19 +0300 Subject: [PATCH 4/5] set string before variable in if-statement --- lib/endpoints/class-wp-rest-posts-controller.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/endpoints/class-wp-rest-posts-controller.php b/lib/endpoints/class-wp-rest-posts-controller.php index ede86c6f11..9a12016067 100755 --- a/lib/endpoints/class-wp-rest-posts-controller.php +++ b/lib/endpoints/class-wp-rest-posts-controller.php @@ -71,7 +71,7 @@ public function get_items_permissions_check( $request ) { $post_type = get_post_type_object( $this->post_type ); - if ( ! empty( $request['orderby'] ) && $request['orderby'] === 'relevance' && empty( $request['search'] ) ) { + if ( ! empty( $request['orderby'] ) && 'relevance' === $request['orderby'] && empty( $request['search'] ) ) { return new WP_Error( 'rest_no_search_term_defined', __( 'You need to define a search term in order to use the relevance search.' ), array( 'status' => 400 ) ); } From 417b29066aaccc2017a1616cb8d931be2c090ef2 Mon Sep 17 00:00:00 2001 From: websupporter Date: Wed, 17 Aug 2016 22:00:59 +0300 Subject: [PATCH 5/5] move check to get_items() --- lib/endpoints/class-wp-rest-posts-controller.php | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/lib/endpoints/class-wp-rest-posts-controller.php b/lib/endpoints/class-wp-rest-posts-controller.php index 9a12016067..5839771a6c 100755 --- a/lib/endpoints/class-wp-rest-posts-controller.php +++ b/lib/endpoints/class-wp-rest-posts-controller.php @@ -71,10 +71,6 @@ public function get_items_permissions_check( $request ) { $post_type = get_post_type_object( $this->post_type ); - if ( ! empty( $request['orderby'] ) && 'relevance' === $request['orderby'] && empty( $request['search'] ) ) { - return new WP_Error( 'rest_no_search_term_defined', __( 'You need to define a search term in order to use the relevance search.' ), array( 'status' => 400 ) ); - } - if ( 'edit' === $request['context'] && ! current_user_can( $post_type->cap->edit_posts ) ) { return new WP_Error( 'rest_forbidden_context', __( 'Sorry, you are not allowed to edit these posts in this post type' ), array( 'status' => rest_authorization_required_code() ) ); } @@ -89,6 +85,12 @@ public function get_items_permissions_check( $request ) { * @return WP_Error|WP_REST_Response */ public function get_items( $request ) { + + //Make sure a search string is set in case the orderby is set to 'relevace' + if ( ! empty( $request['orderby'] ) && 'relevance' === $request['orderby'] && empty( $request['search'] ) ) { + return new WP_Error( 'rest_no_search_term_defined', __( 'You need to define a search term in order to use the relevance search.' ), array( 'status' => 400 ) ); + } + $args = array(); $args['author__in'] = $request['author']; $args['author__not_in'] = $request['author_exclude'];