NEXT craftinamerica.org. Base setup for headless wordpress https://www.craftinamerica.org
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

class.make-search.php 2.6KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. <?php
  2. // include('formats.php');
  3. class Make_Search_Endpoint extends WP_REST_Controller {
  4. function make_args($request) {
  5. $args = [
  6. 'post_status' => ['publish'],
  7. 'posts_per_page' => -1,
  8. 'page' => 1,
  9. 'relevanssi' => true,
  10. 'post_type' => [
  11. 'artist',
  12. 'episode',
  13. 'event',
  14. 'exhibition',
  15. 'guide',
  16. 'object',
  17. 'publication',
  18. 'technique',
  19. 'short',
  20. 'post',
  21. 'page'
  22. ]
  23. ];
  24. // Get parameters from request,
  25. // /?limit=<num>&?orderby=<str>&?order=<str>
  26. $params = $request->get_params();
  27. if(intval($params['limit']) > 0) {
  28. $args['posts_per_page'] = intval($params['limit']);
  29. }
  30. if(intval($params['p']) > 1) {
  31. $args['page'] = intval($params['p']);
  32. $args['offset'] = ($args['page'] * $args['posts_per_page']) - $args['posts_per_page'];
  33. }
  34. if($params['s']) {
  35. $args['s'] = $params['s'];
  36. }
  37. return $args;
  38. }
  39. /**
  40. * Register the routes for the objects of the controller.
  41. */
  42. public function register_custom_route($route) {
  43. $version = '2';
  44. $namespace = 'craft/v' . $version;
  45. register_rest_route( $namespace, '/' . $route, [
  46. array(
  47. 'methods' => WP_REST_Server::READABLE,
  48. 'callback' => array( $this, 'get_results' )
  49. ),
  50. ]);
  51. }
  52. public function get_results( $request ) {
  53. // https://www.relevanssi.com/user-manual/functions/relevanssi_do_query/
  54. $q = new WP_Query($this->make_args($request));
  55. $found_posts = relevanssi_do_query( $q );
  56. return new WP_REST_Response( $this->prepare_items_for_reponse($found_posts), 200 );
  57. }
  58. public function prepare_items_for_reponse( $items ) {
  59. $collection = [];
  60. forEach( $items as $item ) {
  61. $formatted = default_post_format( $item, false );
  62. $formatted[hero] = get_post_meta( $item->ID, 'hero_header', true );
  63. array_push($collection, $formatted);
  64. }
  65. return $collection;
  66. }
  67. }
  68. add_filter( 'relevanssi_query_filter', function( $query ) {
  69. global $wp_query;
  70. if ( isset( $wp_query->query_vars['orderby'] ) && 'post_date' === $wp_query->query_vars['orderby'] ) {
  71. $query = str_replace( 'ORDER BY tf', 'ORDER BY relevanssi.doc', $query );
  72. }
  73. return $query;
  74. }, 11 );
  75. ?>