['publish'], 'posts_per_page' => -1, 'page' => 1, 'relevanssi' => true, 'post_type' => [ 'artist', 'episode', 'event', 'exhibition', 'guide', 'object', 'publication', 'technique', 'short', 'post', 'page' ] ]; // Get parameters from request, // /?limit=&?orderby=&?order= $params = $request->get_params(); if(intval($params['limit']) > 0) { $args['posts_per_page'] = intval($params['limit']); } if(intval($params['p']) > 1) { $args['page'] = intval($params['p']); $args['offset'] = ($args['page'] * $args['posts_per_page']) - $args['posts_per_page']; } if($params['s']) { $args['s'] = $params['s']; } return $args; } /** * Register the routes for the objects of the controller. */ public function register_custom_route($route) { $version = '2'; $namespace = 'craft/v' . $version; register_rest_route( $namespace, '/' . $route, [ array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_results' ) ), ]); } public function get_results( $request ) { // https://www.relevanssi.com/user-manual/functions/relevanssi_do_query/ $q = new WP_Query($this->make_args($request)); $found_posts = relevanssi_do_query( $q ); return new WP_REST_Response( $this->prepare_items_for_reponse($found_posts), 200 ); } public function prepare_items_for_reponse( $items ) { $collection = []; forEach( $items as $item ) { $formatted = default_post_format( $item, false ); $formatted[hero] = get_post_meta( $item->ID, 'hero_header', true ); array_push($collection, $formatted); } return $collection; } } add_filter( 'relevanssi_query_filter', function( $query ) { global $wp_query; if ( isset( $wp_query->query_vars['orderby'] ) && 'post_date' === $wp_query->query_vars['orderby'] ) { $query = str_replace( 'ORDER BY tf', 'ORDER BY relevanssi.doc', $query ); } return $query; }, 11 ); ?>