Advertisement
Guest User

search-api-acf

a guest
May 9th, 2016
1,008
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 3.68 KB | None | 0 0
  1. <?php
  2.  
  3. class Jalin_Search {
  4.  
  5.     public $add_filter = 0;
  6.  
  7.     public function __construct(){
  8.         add_action( 'wp_ajax_query-projects', array( $this, 'jalin_query_projects' ) );
  9.         add_action( 'wp_ajax_nopriv_query-projects', array( $this, 'jalin_query_projects' ) );
  10.     }
  11.  
  12.     private function build_meta_query_array( $search ){
  13.  
  14.         if(!empty($search)){
  15.  
  16.             $meta_query = array('relation' => 'AND');
  17.  
  18.             $rental = $search->for_buy_or_rent == 'rent' ? true : false;
  19.  
  20.             foreach( (array) $search as $key => $value){
  21.  
  22.                 if($value == 'Any' || $value == '') continue;
  23.  
  24.                 switch($key){
  25.  
  26.                     case 'for_buy_or_rent' :
  27.                     case 'type' :
  28.                         $meta_query[] = $this->build_meta_query($key, $value, '=');
  29.                     break;
  30.  
  31.                     case 'max_beds' :
  32.                         if($value > 0 || $value != ''){
  33.                             $this->add_filter = 1;
  34.                             _log('do add filter');
  35.                             $meta_query[] = $this->build_meta_query('stock_item_main_%_bedrooms', $value, '<=', 'NUMERIC');
  36.                         }
  37.                     break;
  38.  
  39.                     case 'max_price' :
  40.                         if($value > 0 || $value != ''){
  41.                             $this->add_filter = 1;
  42.                             $meta_query[] = $this->build_meta_query('stock_item_main_%_starting_price', $value, '<=', 'NUMERIC');
  43.                         }
  44.                     break;
  45.  
  46.                     // attempt #2
  47.                     case 'keyword' :
  48.  
  49.                         trim($value);
  50.  
  51.                         $keyword_query = array('relation' => 'OR');
  52.  
  53.                         $keyword_query[] = $this->build_meta_query('project_id', $value, 'LIKE', 'NUMERIC');
  54.  
  55.                         $keyword_query[] = $this->build_meta_query('postcode', $value, 'LIKE', 'NUMERIC');
  56.  
  57.                         $keyword_query[] = $this->build_meta_query('suburb', $value, 'LIKE');
  58.  
  59.                         $meta_query[] = $keyword_query;
  60.  
  61.                     break;
  62.  
  63.                 }
  64.             }
  65.  
  66.         }
  67.  
  68.         return $meta_query;
  69.     }
  70.  
  71.     private function build_meta_query($key, $value, $compare, $type = 'CHAR'){
  72.         return array(
  73.             'key' => $key,
  74.             'value' => $value,
  75.             'compare' => $compare,
  76.             'type' => $type
  77.         );
  78.     }
  79.  
  80.     public function jalin_where_filter( $pieces ){
  81.         $pieces['where'] = str_replace("meta_key = 'stock_item_main_%", "meta_key LIKE 'stock_item_main_%", $pieces['where']);
  82.         return $pieces;
  83.     }
  84.  
  85.     public function jalin_query_projects() {
  86.  
  87.         $search = json_decode(stripslashes($_GET['search']));
  88.         $projects = array();
  89.         $project_args = array(
  90.             'post_type' => 'project',
  91.             'paged' => isset($search->page) ? $search->page : 1,
  92.             'posts_per_page' => 24,
  93.         );
  94.  
  95.  
  96.         if(gettype($search) === 'object'){
  97.             $meta_query = $this->build_meta_query_array($search);
  98.             $project_args['meta_query'] = $meta_query;
  99.         }
  100.  
  101.         if($this->add_filter)
  102.             add_filter('get_meta_sql', array($this, 'jalin_where_filter'));
  103.        
  104.         $posts = get_posts($project_args);
  105.  
  106.         if($this->add_filter)
  107.             remove_filter( 'get_meta_sql', array($this, 'jalin_where_filter') );
  108.        
  109.         foreach($posts as $post){
  110.  
  111.             $fields = get_fields($post->ID);
  112.             $stock = array();
  113.  
  114.             foreach($fields['stock_item_main'] as $s){
  115.                 $stock[] = array(
  116.                     'bedrooms' => $s['bedrooms'],
  117.                     'bathrooms' => $s['bathrooms'],
  118.                     'cars' => $s['cars'],
  119.                     'price' => $s['starting_price']
  120.                 );
  121.             }
  122.  
  123.             _log($fields['project_image']['sizes']);
  124.  
  125.             $projects[] = array(
  126.                 'name'  => $post->post_title,
  127.                 'slug'  => $post->post_name,
  128.                 'image' => $fields['project_image']['sizes']['thumb_crop'],
  129.                 'type'  => $fields['type'],
  130.                 'contract' => $fields['for_buy_or_rent'],
  131.                 'stock' => $stock,
  132.                 'address' => array(
  133.                     'street' => $fields['street'],
  134.                     'suburb' => $fields['suburb'],
  135.                     'postcode' => $fields['postcode'],
  136.                     'state' => $fields['state'],
  137.                 )
  138.             );
  139.         }
  140.  
  141.         wp_send_json( $projects );
  142.  
  143.     }
  144.  
  145. }
  146.  
  147. $jalin_search = new Jalin_Search();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement