From 5e44c754f848b90f35c4f80ba2bcdf65956c04ec Mon Sep 17 00:00:00 2001 From: JoryHogeveen Date: Mon, 30 Oct 2023 22:17:24 +0100 Subject: [PATCH 1/3] Support Pods fields in REST API as meta query filters --- classes/PodsRESTFields.php | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/classes/PodsRESTFields.php b/classes/PodsRESTFields.php index c2aeab5dff..969fdcc91e 100644 --- a/classes/PodsRESTFields.php +++ b/classes/PodsRESTFields.php @@ -40,6 +40,7 @@ public function __construct( $pod ) { if ( $this->pod ) { add_action( 'rest_api_init', [ $this, 'add_fields' ] ); + add_filter( 'rest_' . $this->pod->get_name() . '_query', [ $this, 'query_fields' ], 10, 2 ); } } @@ -88,6 +89,35 @@ private function set_pod( $pod ) { $this->pod = $pod; } + /** + * @since 3.0.9 + * + * @param \WP_REST_Request $request ArrayAccess + * @param array $args + * + * @return array + */ + public function query_fields( $args, $request ) { + $fields = $this->pod->get_fields(); + $meta_query = []; + foreach ( $fields as $field ) { + $name = $field->get_name(); + if ( isset( $request[ $name ] ) ) { + $value = $request[ $name ]; + $meta_query[] = [ + 'key' => $name, + 'value' => $value, + ]; + } + } + + if ( $meta_query ) { + $args['meta_query']['pods'] = $meta_query; + } + + return $args; + } + /** * Add fields, based on options to REST read/write requests * From 589d04de33bba723c7f05133437cdefc9bf7ac1e Mon Sep 17 00:00:00 2001 From: JoryHogeveen Date: Mon, 30 Oct 2023 22:17:34 +0100 Subject: [PATCH 2/3] Support array format --- classes/PodsRESTFields.php | 1 + 1 file changed, 1 insertion(+) diff --git a/classes/PodsRESTFields.php b/classes/PodsRESTFields.php index 969fdcc91e..91ff96e3c6 100644 --- a/classes/PodsRESTFields.php +++ b/classes/PodsRESTFields.php @@ -106,6 +106,7 @@ public function query_fields( $args, $request ) { $value = $request[ $name ]; $meta_query[] = [ 'key' => $name, + 'compare' => is_array( $value ) ? 'IN' : '=', 'value' => $value, ]; } From 2fdd317750b9e7d975081798cda6ed95df295be9 Mon Sep 17 00:00:00 2001 From: JoryHogeveen Date: Mon, 30 Oct 2023 22:17:58 +0100 Subject: [PATCH 3/3] Codestyle --- classes/PodsRESTFields.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/classes/PodsRESTFields.php b/classes/PodsRESTFields.php index 91ff96e3c6..851a524ff6 100644 --- a/classes/PodsRESTFields.php +++ b/classes/PodsRESTFields.php @@ -98,8 +98,9 @@ private function set_pod( $pod ) { * @return array */ public function query_fields( $args, $request ) { - $fields = $this->pod->get_fields(); + $fields = $this->pod->get_fields(); $meta_query = []; + foreach ( $fields as $field ) { $name = $field->get_name(); if ( isset( $request[ $name ] ) ) {