Вижте по-голяма карта
* [googlemaps https://maps.google.com/maps?f=q&hl=en&geocode=&q=San+Francisco,+CA&sll=43.469466,-83.998504&sspn=0.01115,0.025942&g=San+Francisco,+CA&ie=UTF8&z=12&iwloc=addr&ll=37.808156,-122.402458&output=embed&s=AARTsJp56EajYksz3JXgNCwT3LJnGsqqAQ&w=425&h=350]
* [googlemaps https://mapsengine.google.com/map/embed?mid=zbBhkou4wwtE.kUmp8K6QJ7SA&w=640&h=480]
*
* @package Jetpack
*/
/**
* Google maps iframe - transforms code that looks like that:
*
Вижте по-голяма карта
* into the [googlemaps http://...] shortcode format
*
* @param string $content Post content.
*/
function jetpack_googlemaps_embed_to_short_code( $content ) {
if ( ! is_string( $content ) || ( false === strpos( $content, 'maps.google.' ) && 1 !== preg_match( '@google\.[^/]+/maps?@', $content ) ) ) {
return $content;
}
/*
* IE and TinyMCE format things differently
* <iframe width="425" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="https://maps.google.co.uk/maps/ms?msa=0&msid=206216869547772496318.0004bf5f0ff25aea47bd9&hl=en&ie=UTF8&t=m&ll=50.91917,-1.398808&spn=0.013225,0.011794&output=embed"></iframe><br /><small>View <a href="https://maps.google.co.uk/maps/ms?msa=0&msid=206216869547772496318.0004bf5f0ff25aea47bd9&hl=en&ie=UTF8&t=m&ll=50.91917,-1.398808&spn=0.013225,0.011794&source=embed" style="color:#0000FF;text-align:left">OARA Membership Discount Map</a> in a larger map</small>
*/
if ( strpos( $content, 'src="[^"]*?">\s*</iframe>(?:<br\s*/>\s*<small>.*?</small>)?#i', 'jetpack_googlemaps_embed_to_short_code_callback', $content );
return $content;
}
$content = preg_replace_callback( '!\(?:\s*(?:\
)?\s*\.*?\)?!i', 'jetpack_googlemaps_embed_to_short_code_callback', $content );
$content = preg_replace_callback( '#<iframe\s[^&]*?(?:&(?!gt;)[^&]*?)*?src="https?://(.*)?\.google\.(.*?)/(.*?)\?(.+?)"[^&]*?(?:&(?!gt;)[^&]*?)*?>\s*</iframe>(?:\s*(?:<br\s*/?>)?\s*<small>.*?</small>)?#i', 'jetpack_googlemaps_embed_to_short_code_callback', $content );
return $content;
}
/**
* Callback transforming a Google Maps iFrame code into a shortcode.
*
* @param array $match Array of embed parameters used to build the final URL.
*/
function jetpack_googlemaps_embed_to_short_code_callback( $match ) {
if ( preg_match( '/\bwidth=[\'"](\d+)(%)?/', $match[0], $width ) ) {
$percent = ! empty( $width[2] ) ? '%' : '';
$width = absint( $width[1] ) . $percent;
} else {
$width = 425;
}
if ( preg_match( '/\bheight=[\'"](\d+)(%)?/', $match[0], $height ) ) {
$percent = ! empty( $height[2] ) ? '%' : '';
$height = absint( $height[1] ) . $percent;
} else {
$height = 350;
}
$url = "https://{$match[1]}.google.{$match[2]}/{$match[3]}?{$match[4]}&w={$width}&h={$height}";
/** This action is documented in modules/shortcodes/youtube.php */
do_action( 'jetpack_embed_to_shortcode', 'googlemaps', $url );
return "[googlemaps $url]";
}
add_filter( 'pre_kses', 'jetpack_googlemaps_embed_to_short_code' );
/**
* Display the [googlemaps] shortcode
*
* @param array $atts Shortcode attributes.
*/
function jetpack_googlemaps_shortcode( $atts ) {
if ( ! isset( $atts[0] ) ) {
return '';
}
$params = ltrim( $atts[0], '=' );
$width = 425;
$height = 350;
if ( preg_match( '!^https?://(www|maps|mapsengine)\.google(\.co|\.com)?(\.[a-z]+)?/.*?(\?.+)!i', $params, $match ) ) {
$params = str_replace( '&', '&', $params );
$params = str_replace( '&', '&', $params );
parse_str( $params, $arg );
if ( isset( $arg['hq'] ) ) {
unset( $arg['hq'] );
}
$url = '';
foreach ( (array) $arg as $key => $value ) {
if ( 'w' === $key ) {
$percent = ( '%' === substr( $value, -1 ) ) ? '%' : '';
$width = (int) $value . $percent;
} elseif ( 'h' === $key ) {
$height = (int) $value;
} else {
$key = str_replace( '_', '.', $key );
$url .= esc_attr( "$key=$value&" );
}
}
$url = substr( $url, 0, -5 );
$url = str_replace( 'http://', 'https://', $url );
$css_class = 'googlemaps';
if ( ! empty( $atts['align'] ) && in_array( strtolower( $atts['align'] ), array( 'left', 'center', 'right' ), true ) ) {
$atts['align'] = strtolower( $atts['align'] );
if ( 'left' === $atts['align'] ) {
$css_class .= ' alignleft';
} elseif ( 'center' === $atts['align'] ) {
$css_class .= ' aligncenter';
} elseif ( 'right' === $atts['align'] ) {
$css_class .= ' alignright';
}
}
return '';
}
}
add_shortcode( 'googlemaps', 'jetpack_googlemaps_shortcode' );