function get_near_by_lat_lng($lat = false, $lng = false, $post_type = array(), $range = 20, $limit = 5) { $map_lat = (double) $lat; $map_lng = (double) $lng; //Search by Kilometer :6371 //Miles: 3959 if (!empty($post_type) and is_array($post_type)) { $data_post_type = ""; foreach ($post_type as $k => $v) { $data_post_type .= "'" . $v . "',"; } $data_post_type = substr($data_post_type, 0, -1); global $wpdb; $where = "{$wpdb->posts}.ID = mt1.post_id\r\n and {$wpdb->posts}.ID=mt2.post_id\r\n AND mt1.meta_key = 'map_lat'\r\n and mt2.meta_key = 'map_lng'\r\n AND {$wpdb->posts}.post_status = 'publish'\r\n AND {$wpdb->posts}.post_type IN ({$data_post_type})\r\n AND {$wpdb->posts}.post_date < NOW()"; $where = TravelHelper::edit_where_wpml($where); $join = ""; $join = TravelHelper::edit_join_wpml($join, $post_type); $querystr = "\r\n SELECT {$wpdb->posts}.*,( 6371 * acos( cos( radians({$map_lat}) ) * cos( radians( mt1.meta_value ) ) *\r\ncos( radians( mt2.meta_value ) - radians({$map_lng}) ) + sin( radians({$map_lat}) ) *\r\nsin( radians( mt1.meta_value ) ) ) ) AS distance\r\n FROM {$wpdb->posts} {$join}, {$wpdb->postmeta} as mt1,{$wpdb->postmeta} as mt2\r\n WHERE (1=1) and {$where}\r\n GROUP BY {$wpdb->posts}.ID HAVING distance<{$range}\r\n ORDER BY distance ASC\r\n LIMIT 0,{$limit}\r\n "; $pageposts = $wpdb->get_results($querystr, OBJECT); //set_transient( 'st_items_nearby_' . $post_id , $pageposts , 5 * HOUR_IN_SECONDS ); return $pageposts; } return false; }