| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- <?php
- // include('formats.php');
-
- class Make_Search_Endpoint extends WP_REST_Controller {
- function make_args($request) {
- $args = [
- 'post_status' => ['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=<num>&?orderby=<str>&?order=<str>
- $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 );
- ?>
|