Function Reference: geodir_get_location_array
Summary
Get location array using arguments.
Global Values
- $wpdb
- (object) (required) WordPress Database object.
- Default: None
Package
GeoDirectory_Location_Manager
Parameters
- $args
- (null|array) (required) {
Attributes of args. @type string $what What do you want to query. Possible values: city, region, country. @type string $city_val City value. @type string $region_val Region value. @type string $country_val Country value. @type string $country_non_restricted Non restricted countries. @type string $region_non_restricted Non restricted regions. @type string $city_non_restricted Non restricted cities. @type bool $filter_by_non_restricted Filter by non restricted?. @type string $compare_operator Comparison operator. @type string $country_column_name Country column name. @type string $region_column_name Region column name. @type string $city_column_name City column name. @type bool $location_link_part Location link part. @type string $order_by Order by value. @type string $no_of_records No of records to return. @type string $spage Current page number. @type array $format {
Attributes of format. @type string $type Type. @type string $container_wrapper Container wrapper. @type string $container_wrapper_attr Container wrapper attr. @type string $item_wrapper Item wrapper. @type string $item_wrapper_attr Item wrapper attr. }}.
- Default: : ‘li’
- $switcher
- (bool) (required) Todo: describe this part.
- Default: None
Return Values
- (array|mixed|string)
Change Log
Since: 1.0.0
Source File
geodir_get_location_array() is located in geodir_location_manager/geodir_location_functions.php [Line: 82]
Source Code
function geodir_get_location_array( $args = null, $switcher = false ) { global $wpdb; $defaults = array( 'what' => 'city', 'city_val' => '', 'region_val' => '', 'country_val' => '' , 'country_non_restricted' => '', 'region_non_restricted' => '', 'city_non_restricted' => '', 'filter_by_non_restricted' => true, 'compare_operator' => 'like', 'country_column_name' => 'country', 'region_column_name' => 'region', 'city_column_name' => 'city', 'location_link_part' => true, 'order_by' => 'asc', 'no_of_records' => '', 'spage' => '', 'format' => array( 'type' => 'list', 'container_wrapper' => 'ul', 'container_wrapper_attr' => '', 'item_wrapper' => 'li', 'item_wrapper_attr' => '' ) ); $location_args = wp_parse_args( $args, $defaults ); $search_query = ''; $location_link_column = ''; $location_default = geodir_get_default_location(); if( $location_args['filter_by_non_restricted'] ) { // Non restricted countries if( $location_args['country_non_restricted'] == '' ) { if( get_option( 'geodir_enable_country' ) == 'default' ) { $country_non_retsricted = isset( $location_default->country ) ? $location_default->country : ''; $location_args['country_non_restricted'] = $country_non_retsricted; } else if( get_option( 'geodir_enable_country' ) == 'selected' ) { $country_non_retsricted = get_option( 'geodir_selected_countries' ); if( !empty( $country_non_retsricted ) && is_array( $country_non_retsricted ) ) { $country_non_retsricted = implode(',' , $country_non_retsricted ); } $location_args['country_non_restricted'] = $country_non_retsricted; } $location_args['country_non_restricted'] = geodir_parse_location_list( $location_args['country_non_restricted'] ); } //Non restricted Regions if( $location_args['region_non_restricted'] == '' ) { if( get_option( 'geodir_enable_region' ) == 'default' ) { $regoin_non_restricted= isset( $location_default->region ) ? $location_default->region : ''; $location_args['region_non_restricted'] = $regoin_non_restricted; } else if( get_option( 'geodir_enable_region' ) == 'selected' ) { $regoin_non_restricted = get_option( 'geodir_selected_regions' ); if( !empty( $regoin_non_restricted ) && is_array( $regoin_non_restricted ) ) { $regoin_non_restricted = implode( ',', $regoin_non_restricted ); } $location_args['region_non_restricted'] = $regoin_non_restricted; } $location_args['region_non_restricted'] = geodir_parse_location_list( $location_args['region_non_restricted'] ); } //Non restricted cities if( $location_args['city_non_restricted'] == '' ) { if( get_option('geodir_enable_city') == 'default' ) { $city_non_retsricted = isset( $location_default->city ) ? $location_default->city : ''; $location_args['city_non_restricted'] = $city_non_retsricted; } else if( get_option( 'geodir_enable_city' ) == 'selected' ) { $city_non_restricted = get_option( 'geodir_selected_cities' ); if( !empty( $city_non_restricted ) && is_array( $city_non_restricted ) ) { $city_non_restricted = implode( ',', $city_non_restricted ); } $location_args['city_non_restricted'] = $city_non_restricted; } $location_args['city_non_restricted'] = geodir_parse_location_list( $location_args['city_non_restricted'] ); } } if( $location_args['what'] == '') { $location_args['what'] = 'city'; } if( $location_args['location_link_part'] ) { switch( $location_args['what'] ) { case 'country': if ( get_option('permalink_structure') != '' ) { $location_link_column = ", CONCAT_WS('/', country_slug) AS location_link "; } else { $location_link_column = ", CONCAT_WS('&gd_country=', '', country_slug) AS location_link "; } break; case 'region': if ( get_option('permalink_structure') != '' ) { $location_link_column = ", CONCAT_WS('/', country_slug, region_slug) AS location_link "; } else { $location_link_column = ", CONCAT_WS('&', CONCAT('&gd_country=', country_slug), CONCAT('gd_region=', region_slug) ) AS location_link "; } break; case 'city': //if(get_option('geodir_show_location_url')=='all') { if ( get_option('permalink_structure') != '' ) { $location_link_column = ", CONCAT_WS('/', country_slug, region_slug, city_slug) AS location_link "; } else { $location_link_column = ", CONCAT_WS('&', CONCAT('&gd_country=', country_slug), CONCAT('gd_region=', region_slug) ,CONCAT('gd_city=' , city_slug)) AS location_link "; } } /*else { if ( get_option('permalink_structure') != '' ) $location_link_column = " , city_slug as location_link "; else $location_link_column = " , CONCAT_WS('&gd_city=', '',city_slug) as location_link "; }*/ break; /*default: if(get_option('geodir_show_location_url')=='all') { if ( get_option('permalink_structure') != '' ) $location_link_column = " , CONCAT_WS('/', country_slug, region_slug, city_slug) as location_link "; else $location_link_column = " , CONCAT_WS('&', CONCAT('&gd_country=' ,country_slug) ,CONCAT('gd_region=' , region_slug) ,CONCAT('gd_city=' , city_slug)) as location_link "; } else { if ( get_option('permalink_structure') != '' ) $location_link_column = " , city_slug as location_link "; else $location_link_column = " , CONCAT_WS('&gd_city=', '',city_slug) as location_link "; } break;*/ } } switch( $location_args['compare_operator'] ) { case 'like' : if( isset( $location_args['country_val'] ) && $location_args['country_val'] != '' ) { //$search_query .= " AND lower(".$location_args['country_column_name'].") like '". mb_strtolower( $location_args['country_val'] )."%' "; $countries_search_sql = geodir_countries_search_sql( $location_args['country_val'] ); $countries_search_sql = $countries_search_sql != '' ? " OR FIND_IN_SET(country, '" . $countries_search_sql . "')" : ''; $translated_country_val = sanitize_title( trim( wp_unslash( $location_args['country_val'] ) ) ); $search_query .= " AND ( lower(".$location_args['country_column_name'].") like '%". mb_strtolower( $location_args['country_val'] )."%' OR lower(country_slug) LIKE '". $translated_country_val ."%' " . $countries_search_sql . " ) "; } if(isset($location_args['region_val']) && $location_args['region_val'] !='') { $search_query .= " AND lower(".$location_args['region_column_name'].") like '%". mb_strtolower($location_args['region_val'])."%' "; } if(isset($location_args['city_val']) && $location_args['city_val'] !='') { $search_query .= " AND lower(".$location_args['city_column_name'].") like '%". mb_strtolower($location_args['city_val'])."%' "; } break; case 'in' : if(isset($location_args['country_val']) && $location_args['country_val'] !='') { $location_args['country_val'] = geodir_parse_location_list($location_args['country_val']) ; $search_query .= " AND lower(".$location_args['country_column_name'].") in($location_args[country_val]) "; } if(isset($location_args['region_val']) && $location_args['region_val'] !='' ) { $location_args['region_val'] = geodir_parse_location_list($location_args['region_val']) ; $search_query .= " AND lower(".$location_args['region_column_name'].") in($location_args[region_val]) "; } if(isset($location_args['city_val']) && $location_args['city_val'] !='' ) { $location_args['city_val'] = geodir_parse_location_list($location_args['city_val']) ; $search_query .= " AND lower(".$location_args['city_column_name'].") in($location_args[city_val]) "; } break; default : if(isset($location_args['country_val']) && $location_args['country_val'] !='' ) { //$search_query .= " AND lower(".$location_args['country_column_name'].") = '". mb_strtolower($location_args['country_val'])."' "; $countries_search_sql = geodir_countries_search_sql( $location_args['country_val'] ); $countries_search_sql = $countries_search_sql != '' ? " OR FIND_IN_SET(country, '" . $countries_search_sql . "')" : ''; $translated_country_val = sanitize_title( trim( wp_unslash( $location_args['country_val'] ) ) ); $search_query .= " AND ( lower(".$location_args['country_column_name'].") = '". mb_strtolower($location_args['country_val'])."' OR lower(country_slug) LIKE '". $translated_country_val ."%' " . $countries_search_sql . " ) "; } if(isset($location_args['region_val']) && $location_args['region_val'] !='') { $search_query .= " AND lower(".$location_args['region_column_name'].") = '". mb_strtolower($location_args['region_val'])."' "; } if(isset($location_args['city_val']) && $location_args['city_val'] !='' ) { $search_query .= " AND lower(".$location_args['city_column_name'].") = '". mb_strtolower($location_args['city_val'])."' "; } break ; } // end of switch if($location_args['country_non_restricted'] != '') { $search_query .= " AND LOWER(country) IN ($location_args[country_non_restricted]) "; } if($location_args['region_non_restricted'] != '') { if( $location_args['what'] == 'region' || $location_args['what'] == 'city' ) { $search_query .= " AND LOWER(region) IN ($location_args[region_non_restricted]) "; } } if($location_args['city_non_restricted'] != '') { if($location_args['what'] == 'city' ) { $search_query .= " AND LOWER(city) IN ($location_args[city_non_restricted]) "; } } //page if($location_args['no_of_records']){ $spage = $location_args['no_of_records']*$location_args['spage']; }else{ $spage = "0"; } // limit $limit = $location_args['no_of_records'] != '' ? ' LIMIT '.$spage.', ' . (int)$location_args['no_of_records'] . ' ' : ''; // display all locations with same name also $search_field = $location_args['what']; if( $switcher ) { $select = $search_field . $location_link_column; $group_by = $search_field; $order_by = $search_field; if( $search_field == 'city' ) { $select .= ', country, region, city, country_slug, region_slug, city_slug'; $group_by = 'country, region, city'; $order_by = 'city, region, country'; } else if( $search_field == 'region' ) { $select .= ', country, region, country_slug, region_slug'; $group_by = 'country, region'; $order_by = 'region, country'; } else if( $search_field == 'country' ) { $select .= ', country, country_slug'; $group_by = 'country'; $order_by = 'country'; } $main_location_query = "SELECT " . $select . " FROM " .POST_LOCATION_TABLE." WHERE 1=1 " . $search_query . " GROUP BY " . $group_by . " ORDER BY " . $order_by . " " . $location_args['order_by'] . " " . $limit; } else { $main_location_query = "SELECT $location_args[what] $location_link_column FROM " .POST_LOCATION_TABLE." WHERE 1=1 " . $search_query . " GROUP BY $location_args[what] ORDER BY $location_args[what] $location_args[order_by] $limit"; } $locations = $wpdb->get_results( $main_location_query ); if( $switcher && !empty( $locations ) ) { $new_locations = array(); foreach( $locations as $location ) { //print_r($location); //echo '###'.$search_field; $new_location = $location; $label = $location->$search_field; if( ( $search_field == 'city' || $search_field == 'region' ) && (int)geodir_location_check_duplicate( $search_field, $label ) > 1 ) { if( $search_field == 'city' ) { $label .= ', ' . $location->region; } else if( $search_field == 'region' ) { $country_iso2 = geodir_location_get_iso2( $location->country ); $country_iso2 = $country_iso2 != '' ? $country_iso2 : $location->country; $label .= $country_iso2 != '' ? ', ' . $country_iso2 : ''; } } $new_location->title = $location->$search_field; $new_location->$search_field = $label; $new_location->label = $label; $new_locations[] = $new_location; } $locations = $new_locations; } $location_as_formated_list = ""; if(!empty($location_args['format'])) { if($location_args['format']['type']=='array') return $locations ; elseif($location_args['format']['type']=='jason') return json_encode($locations) ; else { $base_location_link = geodir_get_location_link('base'); $container_wrapper = '' ; $container_wrapper_attr = '' ; $item_wrapper = '' ; $item_wrapper_attr = '' ; if(isset($location_args['format']['container_wrapper']) && !empty($location_args['format']['container_wrapper'])) $container_wrapper = $location_args['format']['container_wrapper'] ; if(isset($location_args['format']['container_wrapper_attr']) && !empty($location_args['format']['container_wrapper_attr'])) $container_wrapper_attr = $location_args['format']['container_wrapper_attr'] ; if(isset($location_args['format']['item_wrapper']) && !empty($location_args['format']['item_wrapper'])) $item_wrapper = $location_args['format']['item_wrapper'] ; if(isset($location_args['format']['item_wrapper_attr']) && !empty($location_args['format']['item_wrapper_attr'])) $item_wrapper_attr = $location_args['format']['item_wrapper_attr'] ; if(!empty($container_wrapper)) $location_as_formated_list = "<" . $container_wrapper . " " . $container_wrapper_attr . " >"; if(!empty($locations)) { foreach($locations as $location) { if(!empty($item_wrapper)) $location_as_formated_list .= "<" . $item_wrapper . " " . $item_wrapper_attr . " >"; if(isset($location->location_link)) { $location_as_formated_list .= " "; } $location_as_formated_list .= $location->$location_args['what'] ; if(isset($location->location_link)) { $location_as_formated_list .= ""; } if(!empty($item_wrapper)) $location_as_formated_list .="" . $item_wrapper . ">"; } } return $location_as_formated_list ; } } return $locations ; }