shortcode_tags = $this->get_shortcode_tags(); // Register shortcodes with WordPress add_action( 'init', array( &$this, 'register_shortcodes' ) ); } /** * This method loops through all my location shortcodes and registers them. * * All shortcode tags actually use the same callback method * * @since 2.4 */ function register_shortcodes() { // Register add_shortcode( 'sm-location', array( &$this, 'do_shortcode' ) ); } /** * Builds the array of tags used for location shortcodes * * @since 2.4 */ function get_shortcode_tags() { $shortcode_tags = array( 'address', 'city', 'state', 'zip', 'country', 'phone', 'fax', 'email', 'url' ); return apply_filters( 'sm-location-shortcode-tag-array', $shortcode_tags ); } /** * Responsible for returning a location address * * @since 2.4 */ function do_shortcode( $args ) { global $post, $simple_map; $options = $simple_map->get_options(); // Default args for map itself, not for locations on map $map_defaults = array( 'data' => '', 'before' => '', 'after' => '', 'map_width' => '75px', 'map_height' => '75px', 'default_lat' => get_post_meta( $post->ID, 'location_lat', true ), 'default_lng' => get_post_meta( $post->ID, 'location_lng', true ), 'panControl' => false, 'zoomContorl' => false, 'scaleControl' => false, 'streetViewControl' => false, 'mapTypeContorl' => false, 'mapTypeId' => 'google.maps.MapTypeId.ROADMAP', 'format' => 'csv', ); $atts = shortcode_atts( $map_defaults, $args ); // If the requested data is description, return the post content if ( 'description' == $atts['data'] ) return $post->post_content; // If we're looking for the full address, compose that from the options if ( 'full-address' == $atts['data'] ) { $postmeta = get_metadata( 'post', $post->ID ); $address_format = $options['address_format']; switch ( $address_format ) { case 'town province postalcode' : $full_address = $postmeta['location_address'][0] . ' ' . $postmeta['location_address2'][0] . ' ' .$postmeta['location_city'][0] . $postmeta['location_state'][0] . ' ' . $postmeta['location_zip'][0]; break; case 'town-province postalcode' : $full_address = $postmeta['location_address'][0] . ' ' . $postmeta['location_address2'][0] . ' ' .$postmeta['location_city'][0] . '-' . $postmeta['location_state'][0] . ' ' . $postmeta['location_zip'][0]; break; case 'postalcode town-province' : $full_address = $postmeta['location_address'][0] . ' ' . $postmeta['location_address2'][0] . ' ' .$postmeta['location_zip'][0] . ' ' . $postmeta['location_city'][0] . '-' . $postmeta['location_state'][0]; break; case 'postalcode town, province' : $full_address = $postmeta['location_address'][0] . ' ' . $postmeta['location_address2'][0] . ' ' .$postmeta['location_zip'][0] . ' ' . $postmeta['location_city'][0] . ', ' . $postmeta['location_state'][0]; break; case 'postalcode town' : $full_address = $postmeta['location_address'][0] . ' ' . $postmeta['location_address2'][0] . ' ' .$postmeta['location_zip'][0] . ' ' . $postmeta['location_city'][0]; break; case 'town postalcode' : $full_address = $postmeta['location_address'][0] . ' ' . $postmeta['location_address2'][0] . ' ' .$postmeta['location_city'][0] . ' ' . $postmeta['location_zip'][0]; break; case 'town, province postalcode' : default : $full_address = $postmeta['location_address'][0] . ' ' . $postmeta['location_address2'][0] . ' ' .$postmeta['location_city'][0] . ', ' . $postmeta['location_state'][0] . ' ' . $postmeta['location_zip'][0]; break; } return $full_address; } // if the requested data is 'directions' return the link to google maps if ( 'directions' == $atts['data'] ) return $this->get_directions_link( $post->ID ); // if the requested data is a map, return the map if ( 'iframe-map' == $atts['data'] ) { // Args we need to make the map itself - not the locations on the map $r = array( 'map_width' => $atts['map_width'], 'map_height' => $atts['map_height'], 'panControl' => $atts['pan_control'], 'default_lat' => $atts['default_lat'], 'default_lng' => $atts['default_lng'], 'zoomControl' => $atts['zoom_control'], 'scaleControl' => $atts['scale_control'], 'streetViewControl' => $atts['street_view_control'], 'mapTypeControl' => $atts['map_type_control'], 'mapType' => $atts['map_type'] ); // Determine location IDs $location_ids = empty( $args['location_ids'] ) ? array( $post->ID ) : explode( ',', $args['location_ids'] ); // Init the object and return the iframe source $map = new SM_Map_Factory(); $map->set_map_atts( $r ); // Add Locations foreach( $location_ids as $location_id ) { $map->add_location( $location_id ); } return $map->get_iframe_embed(); } // If the requested data is a taxonomy $sm_taxes = $simple_map->get_sm_taxonomies( 'array', '', true, 'objects' ) ? $simple_map->get_sm_taxonomies( 'array', '', true, 'objects' ) : array(); foreach( $sm_taxes as $taxonomy ) { if ( $taxonomy->name == $atts['data'] ) { // Forward compatible format types $tax_format = ( in_array( $atts['format'], array( 'csv' ) ) ) ? $atts['format'] : 'csv'; if ( $terms = wp_get_object_terms( $post->ID, $taxonomy->query_var ) ) { foreach( $terms as $termk => $termv ) { $term_names[] = $termv->name; } } else { $term_names = array(); } // Forward compatible format types switch( $tax_format ) { case 'csv': default: return ! empty( $term_names ) ? $args['before'] . implode( ', ', $term_names ) . $args['after'] : '' ; break; } } } // Look for postmeta with location_ prepended to it if ( $value = get_post_meta( absint( $post->ID ), 'location_' . $atts['data'], true ) ) return str_replace( '%self%', $value, $atts['before'] . $value . $atts['after'] ); // Look for postmeta of another type if ( $value = get_post_meta( absint( $post->ID ), $atts['data'], true ) ) return str_replace( '%self%', $value, $atts['before'] . $value . $atts['after'] ); return false; } /** * Returns a directions link * * @since 2.4 */ function get_directions_link( $post ) { global $simple_map; $options = $simple_map->get_options(); $address = $directions_url = ''; if ( $pm = get_metadata( 'post', $post ) ) { $address .= empty( $pm['location_address'][0] ) ? '' : $pm['location_address'][0]; $address .= empty( $pm['location_city'][0] ) ? '' : ' '.$pm['location_city'][0]; $address .= empty( $pm['location_state'][0] ) ? '' : ' '.$pm['location_state'][0]; $address .= empty( $pm['location_zip'][0] ) ? '' : ' '.$pm['location_zip'][0]; $address .= empty( $pm['location_country'][0] ) ? '' : ' '.$pm['location_country'][0]; $directions_url = 'http://google' . $options['default_domain'] . '/maps?saddr=&daddr=' . urlencode( $address ); } return $directions_url; } } }