Embeds a Google Map into your site and lets you add map markers with custom icons and information windows.
BGMP creates a custom post type for placemarks (markers) on a Google Map. The map is embedded into pages or posts using a shortcode, and there are settings to affect how it’s displayed. You can create markers that will show up on the map, and set their icons using the Featured Image meta box. When a marker is clicked on, a box will appear and show the marker’s title and description.
Features
Live Examples
Support
I’m happy to fix reproducible bugs, but don’t have time to help you customize the plugin to fit your needs. There’s also plenty of documentation and community support available. Check out the ‘How can I get help when I’m having a problem?’ question in the FAQ for details.
Localizations
If there isn’t a translation for your language (or it is incomplete/inaccurate) please consider making one and contributing it to the plugin. You can learn how by reading Translating WordPress and How to Create a .po Language Translation. The .pot file you’ll need is inside the languages directory in the plugin’s folder. Once you’re done, just start a thread on the support forum with links to the .po and .mo files, and I’ll add them to the next release. You can also subscribe to the BGMP Translators e-mail list to be notified when updated versions have new strings to translate.
Known conflicts
How you can help with the plugin’s development
Donations
I do this as a way to give back to the WordPress community, so I don’t want to take any donations. If you’d like to give something, though, I’d encourage you to make a donation to Doctors Without Borders or the WordPress Foundation.
Customization
If you need to customize BGMP and a solution isn’t already available in the forums, the best thing to do is to hire a developer. Your local WordPress Meetup is a great place to meet one, or you can also check out jobs.wordpress.net.
If you make customizations that could be beneficial to other users, please start a thread on the support forum with a description of them and a link to the source code.
For help installing this (or any other) WordPress plugin, please read the Managing Plugins article on the Codex.
Basic Usage:
[bgmp-map]
in the content area.Advanced Usage:
Multiple maps with different locations, zoom levels, etc:
[bgmp-map categories=”parks,restaurants” width=”500″ height=”500″]
[bgmp-map placemark=”105″ center=”chicago” zoom=”10″ type=”terrain”]
Multiple maps with different placemarks:
Setting the stacking order of overlapping markers:
Adding a text-based list of placemarks to a page:
[bgmp-list]
in the context area.Using [bgmp-map] in a template file with do_shortcode():
For efficiency, the plugin only loads the required JavaScript, CSS and markup files on pages where it detects the map shortcode is being called. It’s not practical to detect when do_shortcode() is used in a template, so you need to manually let the plugin know to load the files by adding this code to your theme:
function bgmpShortcodeCalled() { global $post; $shortcodePageSlugs = array( 'hello-world', 'second-page-slug' ); if( $post ) if( in_array( $post->post_name, $shortcodePageSlugs ) ) add_filter( 'bgmp_map-shortcode-called', '__return_true' ); } add_action( 'wp', 'bgmpShortcodeCalled' );
Copy and paste that into your theme’s functions.php file or a functionality plugin, update the function names and filter arguments, and then add the slugs of any pages/posts containing the map to $shortcodePageSlugs.
That won’t work for the home page, though. If you want to target the home page, or any other pages with conditional tags, you can do it like this:
function bgmpShortcodeCalled() { global $post; if( ( function_exists( 'is_front_page' ) && is_front_page() ) || ( function_exists( 'is_home_page' ) && is_home_page() ) ) add_filter( 'bgmp_map-shortcode-called', '__return_true' ); } add_action( 'wp', 'bgmpShortcodeCalled' );
Before version 1.9, you needed to use the bgmp_map-shortcode-arguments
filter to pass shortcode arguments when calling do_shortcode()
from a template, but that is no longer necessary. You can simply pass the arguments in the do_shortcode()
call, like this:
do_shortcode( '[bgmp-map center="Boston" zoom="5"]' );
Check the FAQ and support forum if you have any questions.
For help installing this (or any other) WordPress plugin, please read the Managing Plugins article on the Codex.
Basic Usage:
[bgmp-map]
in the content area.Advanced Usage:
Multiple maps with different locations, zoom levels, etc:
[bgmp-map categories=”parks,restaurants” width=”500″ height=”500″]
[bgmp-map placemark=”105″ center=”chicago” zoom=”10″ type=”terrain”]
Multiple maps with different placemarks:
Setting the stacking order of overlapping markers:
Adding a text-based list of placemarks to a page:
[bgmp-list]
in the context area.Using [bgmp-map] in a template file with do_shortcode():
For efficiency, the plugin only loads the required JavaScript, CSS and markup files on pages where it detects the map shortcode is being called. It’s not practical to detect when do_shortcode() is used in a template, so you need to manually let the plugin know to load the files by adding this code to your theme:
function bgmpShortcodeCalled() { global $post; $shortcodePageSlugs = array( 'hello-world', 'second-page-slug' ); if( $post ) if( in_array( $post->post_name, $shortcodePageSlugs ) ) add_filter( 'bgmp_map-shortcode-called', '__return_true' ); } add_action( 'wp', 'bgmpShortcodeCalled' );
Copy and paste that into your theme’s functions.php file or a functionality plugin, update the function names and filter arguments, and then add the slugs of any pages/posts containing the map to $shortcodePageSlugs.
That won’t work for the home page, though. If you want to target the home page, or any other pages with conditional tags, you can do it like this:
function bgmpShortcodeCalled() { global $post; if( ( function_exists( 'is_front_page' ) && is_front_page() ) || ( function_exists( 'is_home_page' ) && is_home_page() ) ) add_filter( 'bgmp_map-shortcode-called', '__return_true' ); } add_action( 'wp', 'bgmpShortcodeCalled' );
Before version 1.9, you needed to use the bgmp_map-shortcode-arguments
filter to pass shortcode arguments when calling do_shortcode()
from a template, but that is no longer necessary. You can simply pass the arguments in the do_shortcode()
call, like this:
do_shortcode( '[bgmp-map center="Boston" zoom="5"]' );
Check the FAQ and support forum if you have any questions.
Read the instructions on the Installation page. If you still have questions, read this FAQ and look for answers on the support forum. If you can’t find an answer, start a new thread on the forums.
Don’t e-mail me, unless it’s a security issue. I automatically delete any support requests that come in over e-mail. Follow the steps below instead.
If you still need help, then follow these instructions:
I often don’t have time to provide support, but if I can’t there’s still a chance that another user will be able to help you. If not, I’d recommend hiring a developer. See the Customization section on the Other Notes page for more info on that.
All of the features that the plugin supports are documented on these pages. If you don’t see a feature mentioned, then that means that the plugin doesn’t support it. You’ll need to write the extra code yourself if you want to add that feature to the plugin, or hire someone to do it for you (see the Customization section on the Other Notes page). There are filters throughout the core code to support customization. If you need a hook or filter that doesn’t currently exist, add a post to the support forums to request it and I’ll add it to the next version.
You can also try searching the support forums in case others have already worked out a way to do it.
If you do get it working with your custom code, please share it on the support forums so that others can benefit from your work.
Sometimes Google requires you to obtain an API from them in order to use the Google Maps and Geocoding services on your site. You can go to the Settings screen for instructions on how to get them.
Developers can also use the bgmp_maps-api-url-parameters
and bgmp_geocoding-api-url-parameters
filters to programmatically assign keys.
There are several possible causes for this error, but they generally fall into two different categories.
If the error is followed by something similar to the example below, then the problem was with connecting to the Maps API:
Geocode response: stdClass Object ( [results] => Array ( ) [status] => OVER_QUERY_LIMIT )
If the problem is with the address, you can try entering it in a different format. For example, instead of “5th Ave and Blanchard St, Seattle”, try “2124 5th Ave, 98121”. You can also try using latitude/longitude coordinates to bypass the geocoding process entirely; see the other FAQ answers for details on that.
If the problem is with the connection, some of of the possible reasons for that are:
You can also try using latitude/longitude coordinates to bypass the geocoding process entirely; see the other FAQ answers for details on that.
Check to see if there are any Javascript errors by opening the JavaScript console in your web browser. An error caused by other plugins or your theme can prevent BGMP from working. You’ll need to fix the errors, or switch to a different plugin/theme.
Also, make sure your theme is calling wp_footer() right before the closing body tag in footer.php.
This is probably because some rules from your theme’s stylesheet are being applied to the map. Contact your theme developer for advice on how to override the rules.
Yes. You can type anything into the Address field that you would type into a standard Google Maps search field, which includes coordinates.
If the plugin recognizes your input as coordinates then it will create the marker at that exact point on the map. If it doesn’t, it will attempt to geocode them, which can sometimes result in a different location than you intended. To help the plugin recognize the coordinates, make sure they’re in decimal notation (e.g. 48.61322,-123.3465) instead of minutes/seconds notation. The latitude and longitude must be separated by a comma and cannot contain any letters or symbols. If your input has been geocoded, you’ll see a note next to the address field that gives the geocoded coordinates, and the plugin will use those to create the marker on the map; if you don’t see that note then that means that your input was not geocoded and your exact coordinates will be used to place the marker.
If you’re having a hard time getting a set of coordinates to work, try visiting Latitude and Longitude of a Point and use the coordinates they give you.
If your theme is calling add_theme_support( 'post-thumbnails' )
and passing in a specific list of post types — rather than enabling support for all post types — then it should check if some post types are already registered and include those as well. This only applies if it’s hooking into after_theme_setup
with a priority higher than 10. Contact your theme developer and ask them to fix their code.
Also check the Other Notes page for known conflicts with other plugins.
Yes, if you want to use the same custom icon for all markers by default, instead of having to set it on each individual placemark, you can add this to your theme’s functions.php or a functionality plugin:
function setBGMPDefaultIcon( $iconURL ) { return get_bloginfo( 'stylesheet_directory' ) . '/images/bgmp-default-icon.png'; } add_filter( 'bgmp_default-icon', 'setBGMPDefaultIcon' );
The string you return needs to be the full URL to the new icon.
If you only want to replace the default marker under certain conditions (e.g., when the marker is assigned to a specific category), then you can using something like this:
function setBGMPDefaultIconByCategory( $iconURL, $placemarkID ) { $placemarkCategories = wp_get_object_terms( $placemarkID, 'bgmp-category' ); foreach( $placemarkCategories as $pc ) { switch( $pc->slug ) { case 'restaurants': $iconURL = get_bloginfo( 'stylesheet_directory' ) . '/images/marker-icons/restaurants.png'; break; case 'book-stores': $iconURL = get_bloginfo( 'stylesheet_directory' ) . '/images/marker-icons/book-stores.png'; break; default: $iconURL = get_bloginfo( 'stylesheet_directory' ) . '/images/marker-icons/pin.png'; break; } } return $iconURL; } add_filter( 'bgmp_default-icon', 'setBGMPDefaultIconByCategory', 10, 2 );
Here’s another example to uses the placemark’s ID:
function setBGMPDefaultIconByID( $iconURL, $placemarkID ) { if( $placemarkID == 352 ) $iconURL = get_bloginfo( 'stylesheet_directory' ) . '/images/bgmp-default-icon.png'; return $iconURL; } add_filter( 'bgmp_default-icon', 'setBGMPDefaultIcon', 10, 2 );
The string you return needs to be the full URL to the new icon.
No, the Google Maps JavaScript API can only support one map on a page. You can have different maps on separate pages, though. See the Installation page for instructions on making different maps have different center locations, display different sets of placemarks, etc.
The width/height of the map and marker information windows are always defined in the Settings, but you can override everything else by putting this code in your theme’s functions.php file or a functionality plugin:
function setBGMPStyle() { wp_deregister_style( 'bgmp_style' ); wp_register_style( 'bgmp_style', get_bloginfo('template_url') . '/bgmp-style.css' ); wp_enqueue_style( 'bgmp_style' ); } add_action('init', 'setBGMPStyle');
Then create a bgmp-style.css file inside your theme directory or a child theme and put your styles there. If you’d prefer, you could also just make it an empty file and put the styles in your main style.css, but either way you need to register and enqueue a style with the bgmp_style
handle, because the plugin checks to make sure the CSS and JavaScript files are loaded before embedding the map.
See the instructions on the Installation page.
Add the following styles to your theme’s style.css file or a child theme:
.bgmp_placemark { width: 450px; height: 350px; }
Yes. The plugin creates a custom post type, so it has the same permission structure as regular posts/pages.
If you’re running a caching plugin like WP Super Cache, make sure you delete the cache contents so that the latest files are loaded, and then refresh your browser.
If you upgraded other plugins at the same time, it’s possible that one of them is causing a JavaScript error that breaks the entire page or some other kind of conflict. Check if BGMP works with the default theme and no other plugins activated.
If you’re still having problems, create a detailed report on the support forum (see the ‘How can I get help when I’m having a problem?’ question above), and then download an older version to use until the problem is fixed.
Also, keep in mind that professionals don’t just install plugin updates on their live website and then get angry when they inevitably run into a situation where an update crashes the site. The right way to do it is to have a staging server where you test all updates and code changes, and then push them to the production server once you’re satisfied that everything is working properly. If your website is mission-critical, then this is what you need to be doing. If you’re not capable or willing to do it yourself, then you need to hire a developer to manage the process for you. If you don’t do those things, then you don’t have anyone to blame but yourself when things go wrong. You can subscribe to the BGMP Testers e-mail list to be notified when new release candidates are available for testing.
I’ve done my best to ensure that it is, but just in case I missed anything I also offer a security bounty for any vulnerabilities that can be found and privately disclosed in any of my plugins.
Yes, I’ve tried to add filters for everything you might reasonably want, just browse the source code to look for them. If you need a filter or action that isn’t there, make a request on the support forum and I’ll add it to the next version.
bgmp
to basic-google-maps-placemarks
, to support language packs.Older entries are in docs/changelog.txt