The search functionality is divided into two primary types, with results processed and displayed using the WP_Query function.
Search Type 1 & Type 2 are located in advanced_search_type1.php and advanced_search_type2.php, these search types send parameters to advanced_search_results.php for processing.
If you want to add new search fields or change the existing ones you should start from those 2 files.
When the search button is pressed the search parameters are sent to advanced_search_results.php.
In there the we retrieve the search parameters as $_GET variables and use this to build and arguments array called $arg who is used by WP_Query WordPress function to retrieve the results.
If you are not familiar with how wp_query works you should read this article – https://codex.wordpress.org/Class_Reference/WP_Query . If you are planning to do a change in how the search script works it is mandatory to understand how wp_query works.
Please note that there 2 situations – when user search for start and end date and when not. The difference is made at this line
if ( $book_from!='' && $book_from!='' ){
If the start date and end date are used then we first do a query for geo location parameters and after that we check the received results for availability by doing a second wp_query using the ” ‘post__in’ => $right_array”
while ($prop_selection->have_posts()): $prop_selection->the_post();
// print ‘</br>we check ‘.$post->ID.'</br>’;
if( wpestate_check_booking_valability($book_from,$book_to,$post->ID) ){
$right_array[]=$post->ID;
}
endwhile;
wp_reset_postdata();
$args = array(
‘cache_results’ => false,
‘update_post_meta_cache’ => false,
‘update_post_term_cache’ => false,
‘post_type’ => ‘estate_property’,
‘post_status’ => ‘publish’,
‘paged’ => $paged,
‘posts_per_page’ => $prop_no,
‘post__in’ => $right_array
);
After the wp_query is made we load one of the property list templates: half map or classic ones
if ( $property_list_type_status == 2 ){
get_template_part('templates/half_map_core');
}else{
get_template_part('templates/normal_map_core');
}
In both templates we loop through the results and build the property list with code like
while ($prop_selection->have_posts()): $prop_selection->the_post();
get_template_part('templates/property_unit');
endwhile;
or
while ($prop_selection->have_posts()): $prop_selection->the_post();
if($listing_unit_style_half == 1 && $listing_type!=1){
get_template_part(‘templates/property_unit_wide’);
}else{
get_template_part(‘templates/property_unit’);
}
endwhile;
Notes :
- – Order is changed by changing ‘orderby’ => ‘meta_value’, ‘order’ => ‘DESC’, parameters (and meta_key if you order by a meta post) in $args
- – Categories are used/search by using the tax_query parameters
- – Parameters like beds, price etc are used/search by using the meta_query parameters
- – ALL YOUR ANSWERS are in wp_query official documentation: https://codex.wordpress.org/Class_Reference/WP_Query . You just need to have the patience to go through all the info 🙂
Half Map
The search in half map is done in a different way but also using the wp_query function.
The half map search/filtering form is located in advanced_search_map_list.php. If you want to add/edit something you should start with this file
When you change a value of a search field a .change event is triggered in javascript and the function start_filtering_ajax_map() is called. This function is located in ajaxcalls.js at line 6.
In this function, we read the input fields and send the data to a PHP function via an ajax calls. If you add new search parameters you need to make sure you read their value and that you send those values via the ajax call.
The PHP function that retrieves the data is called wpestate_ajax_filter_listings_search_onthemap and is located in ajax_functions.php at line 3186.
In there we retrieve all parameters as $_POST vars and use those to build an argument array called $args that will be used by the wp_query calls. The code in this function is very similar to the one in advanced_search_results.php. file
After we get the results – we return to the javascript function that will insert those into the page as “search results”.
There are also 2 additional search forms – in the widget and in shortcodes. Both of these search forms will work as the search in the header using the advanced_search_results.php file.
Widget : in plugins/wprentals-core/widgets/advanced_search.php
Shortcode : in shortocodes.php function wpestate_advanced_search_function() at line 650