Function Reference: geodir_sc_listing_map
Summary
The geodirectory listing map shortcode.
Description
This implements the functionality of the shortcode for displaying listing map.
Global Values
- $post
- (object) (required) The current post object.
- Default: None
Package
GeoDirectory
Parameters
- $atts
- (array) (required) {
Attributes of the shortcode. @type string $width Map width in pixels. @type string $height Map height in pixels. @type string $maptype Map type. Can be ROADMAP | SATELLITE | HYBRID | TERRAIN. @type string $zoom The zoom level of the map. Between 1-19. @type string $autozoom True if the map should autozoom, false if not. @type bool $sticky True if should be sticky, false if not
@type string $showall Show all listings on map? (not just page list). @type string $child_collapse True if the map should collapse the categories, false if not. @type string $scrollwheel True to allow scroll wheel to scroll map or false if not. @type bool $marker_cluster Enable marker cluster? Default: false. @type string $post_type Post type of listing. gd_place. @type string $category Category ids to filter listings. Ex: 1,3. 0. @type string $event_type The events filter. (for gd_event CPT only) Default: all. }.- Default:
Return Values
- (string)
- Map HTML.
Change Log
Since: 1.0.0
1.5.2 Added TERRAIN for $maptype attribute.
1.6.16 CHANGED: New parameters post_type, category & event_type added.
1.6.18 FIXED: For CPT other then “gd_place” not working.
Source File
geodir_sc_listing_map() is located in geodirectory_shortcodes.php [Line: 265]
Source Code
function geodir_sc_listing_map($atts) {
// if some params are set then we need a new query, if not then we can use the main query
if( isset($atts['post_type']) || isset($atts['category']) || isset($atts['event_type']) ) {
global $add_post_in_marker_array, $gd_sc_map_params;
$backup_globals = array();
$backup_globals['add_post_in_marker_array'] = $add_post_in_marker_array;
$backup_globals['gd_sc_map_params'] = $gd_sc_map_params;
$defaults = array(
'width' => '294',
'height' => '370',
'zoom' => '13',
'autozoom' => '',
'sticky' => '',
'showall' => '0',
'scrollwheel' => '0',
'maptype' => 'ROADMAP',
'child_collapse' => 0,
'marker_cluster' => false,
'post_type' => 'gd_place',
'category' => '0',
'event_type' => 'all'
);
$params = shortcode_atts( $defaults, $atts );
if ( ! ( gdsc_is_post_type_valid( $params['post_type'] ) ) ) {
$params['post_type'] = 'gd_place';
}
// Validate the selected category/ies - Grab the current list based on post_type
$category_taxonomy = geodir_get_taxonomies( $params['post_type'] );
$categories = get_terms( $category_taxonomy, array(
'orderby' => 'count',
'order' => 'DESC',
'fields' => 'ids'
) );
// Make sure we have an array
if ( ! ( is_array( $params['category'] ) ) ) {
$params['category'] = explode( ',', $params['category'] );
}
// Array_intersect returns only the items in $params['category'] that are also in our category list
// Otherwise it becomes empty and later on that will mean "All"
$params['category'] = array_intersect( $params['category'], $categories );
if ( $params['post_type'] == 'gd_event' ) {
$params['event_type'] = gdsc_validate_list_filter_choice( $params['event_type'] );
}
$params = gdsc_validate_map_args( $params );
$gd_sc_map_params = $params;
$query_args = array(
'posts_per_page' => 1000000, //@todo kiran why was this added?
'is_geodir_loop' => true,
'gd_location' => false,
'post_type' => $params['post_type'],
);
if ( ! empty( $params['category'] ) && isset( $params['category'][0] ) && (int) $params['category'][0] != 0 ) {
$category_taxonomy = geodir_get_taxonomies( $params['post_type'] );
######### WPML #########
if ( geodir_wpml_is_taxonomy_translated( $category_taxonomy[0] ) ) {
$category = gd_lang_object_ids( $params['category'], $category_taxonomy[0] );
}
######### WPML #########
$tax_query = array(
'taxonomy' => $category_taxonomy[0],
'field' => 'id',
'terms' => $params['category']
);
$query_args['tax_query'] = array( $tax_query );
}
$add_post_in_marker_array = true;
if ( $params['post_type'] == 'gd_event' && function_exists( 'geodir_event_get_widget_events' ) ) {
global $geodir_event_widget_listview;
$geodir_event_widget_listview = true;
$query_args['geodir_event_type'] = $params['event_type'];
$listings = geodir_event_get_widget_events( $query_args );
$geodir_event_widget_listview = false;
} else {
$listings = geodir_get_widget_listings( $query_args );
}
if ( ! empty( $listings ) ) {
foreach ( $listings as $listing ) {
create_marker_jason_of_posts( $listing );
}
}
ob_start();
add_action( 'wp_head', 'init_listing_map_script' ); // Initialize the map object and marker array
add_action( 'the_post', 'create_list_jsondata' ); // Add marker in json array
add_action( 'wp_footer', 'show_listing_widget_map' ); // Show map for listings with markers
$default_location = geodir_get_default_location();
$map_args = array(
'map_canvas_name' => 'gd_listing_map',
'width' => $params['width'],
'height' => $params['height'],
'zoom' => $params['zoom'],
'autozoom' => $params['autozoom'],
'sticky' => $params['sticky'],
'showall' => $params['showall'],
'scrollwheel' => $params['scrollwheel'],
'maptype' => $params['maptype'],
'child_collapse' => 0,
'enable_cat_filters' => false,
'enable_text_search' => false,
'enable_post_type_filters' => false,
'enable_location_filters' => false,
'enable_jason_on_load' => true,
'ajax_url' => geodir_get_ajax_url(),
'latitude' => isset( $default_location->city_latitude ) ? $default_location->city_latitude : '',
'longitude' => isset( $default_location->city_longitude ) ? $default_location->city_longitude : '',
'streetViewControl' => true,
'showPreview' => '0',
'maxZoom' => 21,
'bubble_size' => 'small',
);
if ( is_single() ) {
global $post;
if ( isset( $post->post_latitude ) ) {
$map_args['latitude'] = $post->post_latitude;
$map_args['longitude'] = $post->post_longitude;
}
$map_args['map_class_name'] = 'geodir-map-listing-page-single';
} else {
$map_args['map_class_name'] = 'geodir-map-listing-page';
}
// Add marker cluster
if ( isset( $params['marker_cluster'] ) && gdsc_to_bool_val( $params['marker_cluster'] ) && defined( 'GDCLUSTER_VERSION' ) ) {
$map_args['enable_marker_cluster'] = true;
} else {
$map_args['enable_marker_cluster'] = false;
}
geodir_draw_map( $map_args );
$output = ob_get_contents();
ob_end_clean();
foreach ( $backup_globals as $global => $value ) {
${$global} = $value;
}
return $output;
}else{
ob_start();
add_action('wp_head', 'init_listing_map_script'); // Initialize the map object and marker array
add_action('the_post', 'create_list_jsondata'); // Add marker in json array
add_action('wp_footer', 'show_listing_widget_map'); // Show map for listings with markers
$defaults = array(
'width' => '294',
'height' => '370',
'zoom' => '13',
'autozoom' => '',
'sticky' => '',
'showall' => '0',
'scrollwheel' => '0',
'maptype' => 'ROADMAP',
'child_collapse' => 0,
'marker_cluster' => false
);
$params = shortcode_atts($defaults, $atts);
$params = gdsc_validate_map_args($params);
$map_args = array(
'map_canvas_name' => 'gd_listing_map',
'width' => $params['width'],
'height' => $params['height'],
'zoom' => $params['zoom'],
'autozoom' => $params['autozoom'],
'sticky' => $params['sticky'],
'showall' => $params['showall'],
'scrollwheel' => $params['scrollwheel'],
'child_collapse' => 0,
'enable_cat_filters' => false,
'enable_text_search' => false,
'enable_post_type_filters' => false,
'enable_location_filters' => false,
'enable_jason_on_load' => true,
);
if (is_single()) {
global $post;
$map_default_lat = $address_latitude = $post->post_latitude;
$map_default_lng = $address_longitude = $post->post_longitude;
$mapview = $post->post_mapview;
$map_args['zoom'] = $post->post_mapzoom;
$map_args['map_class_name'] = 'geodir-map-listing-page-single';
} else {
$default_location = geodir_get_default_location();
$map_default_lat = isset($default_location->city_latitude) ? $default_location->city_latitude : '';
$map_default_lng = isset($default_location->city_longitude) ? $default_location->city_longitude : '';
$map_args['map_class_name'] = 'geodir-map-listing-page';
if ( geodir_is_page( 'search' ) ) {
$map_default_lat = '';
$map_default_lng = '';
if ( isset( $_REQUEST['sgeo_lat'] ) && isset( $_REQUEST['sgeo_lon'] ) ) {
$map_default_lat = (float)sanitize_text_field( $_REQUEST['sgeo_lat'] );
$map_default_lng = (float)sanitize_text_field( $_REQUEST['sgeo_lon'] );
}
if ( empty( $map_default_lat ) && empty( $map_default_lng ) && ! empty( $_REQUEST['set_location_type'] ) && ! empty( $_REQUEST['set_location_val'] ) && function_exists( 'geodir_get_location_by_id' ) ) {
$location = geodir_get_location_by_id( '', (int)$_REQUEST['set_location_val'] );
if ( ! empty( $location ) ) {
$map_default_lat = $location->city_latitude;
$map_default_lng = $location->city_longitude;
}
}
}
}
if (empty($mapview)) {
$mapview = 'ROADMAP';
}
// Set default map options
$map_args['ajax_url'] = geodir_get_ajax_url();
$map_args['latitude'] = $map_default_lat;
$map_args['longitude'] = $map_default_lng;
$map_args['streetViewControl'] = true;
$map_args['maptype'] = $mapview;
$map_args['showPreview'] = '0';
$map_args['maxZoom'] = 21;
$map_args['bubble_size'] = 'small';
// Add marker cluster
if (isset($params['marker_cluster']) && gdsc_to_bool_val($params['marker_cluster']) && defined('GDCLUSTER_VERSION')) {
$map_args['enable_marker_cluster'] = true;
} else {
$map_args['enable_marker_cluster'] = false;
}
geodir_draw_map($map_args);
$output = ob_get_contents();
ob_end_clean();
return $output;
}
}