WP Store Locator 3.0 beta now available: OpenStreetMap, Mapbox & Stadia support, appearance editor, and more

After over four years of development, the beta version for v3 is finally here! We’ve rebuilt the decade-old codebase from the ground up. New features include map providers other than Google, a way to restyle the locator without writing CSS, custom fields without writing PHP, real opening/closed statuses, and a lot more control over how results are searched and sorted.

For testing and development only. Do not use this beta on live or mission-critical sites. Explore the new features safely in a local or staging environment.



Download the WP Store Locator 3 beta

The top 10 new features

  1. You are no longer tied to Google Maps

    3.0 adds Mapbox, Stadia Maps and OpenStreetMap (Leaflet) as fully supported map providers, in addition to Google Maps.

    The only option that needs no API key, no account and no credit card. Autocomplete and bulk geocoding aren’t available and driving directions need a free OpenRouteService key, which makes it a better fit for a few dozen locations than a few thousand.

    Mapbox

    Mapbox brings the polished cartography and vector styling it’s known for, along with autocomplete and bulk geocoding, on an allowance of 50,000 free map loads a month. You’ll need an account and a public access token, but for a single-country store locator that allowance is usually more headroom than the site will ever use.

    Stadia Maps

    Stadia covers the full set — autocomplete, bulk geocoding and routing — and works out cheaper than Google Maps or Mapbox.

    It’s also the only one of the three offering EU endpoints: a single toggle routes every tile, search and directions request through servers inside the European Union.

    Stadia does require an API key, and it’s a paid service for commercial sites once the 14-day trial ends.

    Provider API key Autocomplete Bulk geocoding Cost
    OpenStreetMap (Leaflet) None No No Free
    Mapbox Required Yes Yes 50,000 free map loads/months
    Stadia Maps Required Yes Standard plan and up Paid plan
    Google Maps Required Yes Yes Free quota, billing account required
  2. A new Vertical theme

    In addition to the existing Default and Horizontal layouts there is a new Vertical theme: a modern two-column layout with the search form and results in the left column and the map filling the right. It comes with an optional filter panel.

  3. The Appearance Editor

    Restyling the locator used to mean writing CSS. Now there is an Appearance editor where you set the theme colors, the call-to-action buttons, the icons and the active map style directly in the admin. It includes a live preview, and a contrast check so your labels stay readable.

    Theme styles

  4. The Template Section Editor

    For the parts the Appearance editor does not cover, there is a Template section editor. It lets you edit the actual markup of individual sections (the store listing, the info window, the “more info” block, the store header) from the admin, without touching a theme file. Your customization survives plugin updates.

  5. The Fields Manager

    Adding a custom data field to your locations used to require the wpsl_meta_box_fields filter and a bit of PHP. The Fields manager does it from the admin: define the field, choose where it shows up, done.

    Fields Manager

    How to make the custom fields appear on the front-end is explained here.

  6. Marker Studio

    Marker Studio is a new tool for building your own markers without opening an image editor. Pick a shape, choose an icon from the built-in set, set the fill, icon and outline colors, then adjust the outline thickness, size and drop shadow. Save it to a library you can reuse across your locations.

    Marker Studio

    There’s more marker control outside the Studio as well. Set a distinct active store marker, assign markers per category, and pick from new cluster marker styles for Google Maps. The default markers are now SVG instead of PNG (PNG still works). Info windows can open on hover, and clicking the address in the results list opens the matching info window on the map.

  7. Map Shapes

    Draw polygons, circles, rectangles and lines straight onto a live map in the admin, and they appear on the map your visitors see. Use this feature to mark delivery zones, service areas, franchise territories, or simply highlight the region you cover. It works on Google Maps, Mapbox and OpenStreetMap alike.

    Map Shapes

    Each shape gets its own fill and outline colour, opacity and line thickness, and you can come back and reshape it later.

  8. Opening hours that say whether you are open

    Locations can now show a live Open/Closed status, and visitors can expand it to see the full week. On top of that: a special hours field, the option to replace the hours with custom text, and a way to mark a location temporarily or permanently closed, with an optional automatic reopen date. The start day of the week now follows your WordPress setting.

    Opening Hours

  9. Much more control over search and results

    A number of changes:

    • Sort results ascending or descending, by distance, address, city, state, country or ID.
    • Searching for a country or state returns all results in it, instead of nothing.
    • If nothing is found inside the radius, optionally fall back to the nearest location.
    • Exclude locations across a nearby border, so a search in a border town stays in-country.
    • Show the number of returned results.
    • Set a default category filter, or show only the category filter.
    • Choose the geolocation address format (zip, city, or full address), and whether geolocation runs on page load or only when the visitor clicks the button.
  10. Built-in GDPR support

    The map no longer has to load before the visitor consents. 3.0 has GDPR handling built in. So no matter which map provider you use, the map only loads after consent is given.

    GDPR Checkpoint

A few more additions

New installs go through an onboarding flow instead of a blank settings page, an Alerts section surfaces compatibility warnings, and there are import/export, data management and status report tools. API key problems are now caught and explained instead of failing silently, and the admin location search understands zip, city, state and country.

On top of that: improved accessibility and keyboard navigation, better RTL support, migration to the Google Geocoding v4 and Routes APIs, and a number of new shortcode attributes (see further below).

Update your add-ons to version 2.0

If you use the CSV Manager, Statistics or Search Widget add-on, update it to version 2.0 or later. This is the one thing to take care of around the upgrade.

What happens if you update WP Store Locator first

Nothing breaks, and nothing gets deactivated. 3.0 detects a pre-2.0 add-on and switches its features off rather than letting it fail:

  • The Search Widget stops rendering. The widget and the [wpsl_widget] shortcode are removed, so a visitor never hits an error.
  • The Statistics and CSV Manager admin pages are hidden, and blocked if you reach them by a bookmarked URL.
  • A red warning appears on the Plugins screen under each affected add-on, plus a notice listing which ones need updating and which version they’re on. The add-on deliberately stays active so it keeps receiving updates. Updating it to 2.0 from the Plugins screen turns its features straight back on — no reactivation, no reconfiguration, and the warning disappears without a page reload.

If no update shows up

Updates are license-gated, so an add-on with no license key saved never gets an update row. Check that your key is saved under Store Locator > Settings > Licenses.

An expired license is not the problem. Updates are lifetime, only the support period lapses. If the update still doesn’t appear, download version 2.0 or later from your account page and install it over the current version.

WordPress checks for plugin updates twice a day, so a fresh key can take a while to show results. You can force an immediate check by going to Dashboard > Updates in the admin area.

The safe order

  1. Update the add-ons to 2.0 first, if the updates are showing.
  2. Then update WP Store Locator to 3.0.

New shortcode attributes

3.0 adds a batch of attributes to the shortcodes, most of them to [wpsl]. Together they let you run several locators on one site that each behave differently — a page per country, a map with clustering on and the filters off, a locator locked to one region — without changing anything on the settings page. Everything from version 2 still works; these are additions.

[wpsl]

Attribute What it does
exclude_category Leave one or more categories out of the results
category_parent_id Only list the child categories of this parent in the filter
category_filter Show or hide the category filter (true / false)
radius_filter Show or hide the search radius dropdown
results_filter Show or hide the number of results dropdown
map_style Override the map style for this locator
map_id Use a specific Google cloud-based Map ID (Google Maps only)
active_marker Marker used for the location the visitor selected
marker_clusters Turn marker clustering on or off for this map (marker_cluster is accepted too)
city / state / country Restrict the results to one city, state or country
distance_unit km or mi for this locator
shapes Draw the map shapes on this map (true / false, default true)

[wpsl country="Belgium" distance_unit="km" radius_filter="false" results_filter="false"]

One thing worth knowing about the location restrictions: if you set city, state or country without also setting start_location, the map works out its own starting point from that restriction. Otherwise you would get the start location from the settings page — London, say — on a map that only contains Canadian locations.

[wpsl_map]

Attribute What it does
map_id Google cloud-based Map ID (Google Maps only)
store_marker Marker used for the plotted locations
active_marker Marker used for the selected location
marker_clusters Clustering for this map only (marker_cluster is accepted too)
city / state / country Restrict which locations are plotted
shapes Draw the map shapes on this map (true / false, default true)

Clustering here is deliberately per map: switching it on for a [wpsl_map]does not switch it on for the [wpsl] locator elsewhere on the site.

[wpsl_hours]

Attribute What it does
current_status Show the live Open / Closed status
expand_status Let visitors expand the status to see the full week

Both default to what you picked on the settings page, so you only need them when one page should differ from the rest.

[wpsl_address]

Attribute What it does
bold_contact_details Wrap the Phone / Fax / Email / Url labels in <strong> (default true)
contact_details Show or hide the Phone / Fax / Email / Url block in one go

For developers: what changed under the hood

Most sites will not notice the rewrite, because the 2.x globals and helper functions are still there as compatibility shims. But if you wrote custom code against $wpsl_settings, $wpsl, or one of the wpsl_* template functions, here is what still works and what needs a small change.

The single flat wpsl_settings option is now split across eleven grouped options, all but wpsl_api and wpsl_local_seo have autoload disabled.

  • wpsl_api
  • wpsl_search
  • wpsl_map
  • wpsl_ux
  • wpsl_markers
  • wpsl_editor
  • wpsl_appearance
  • wpsl_local_seo
  • wpsl_labels
  • wpsl_gdpr
  • wpsl_tools

The old option is kept as a backup on upgrade but stops being updated — do not read it.

Custom templates

Theme templates still work. A file in your theme’s wpsl-templates/ folder is still picked up, and the wpsl_templates / wpsl_template_list filters are unchanged. The underscore.js syntax (<% %> / <%= %>) is unchanged, and the section filters receive and return the same markup, so overrides port over as-is.

What changed is the delivery: templates are no longer echoed into the page as inline script blocks. They are collected server-side and handed to JS as JSON in wpslTemplateSections.

The map canvas was renamed. #wpsl-gmap became #wpsl-map plus a .wpsl-canvas- class, since the map is no longer always Google. A shim rewrites #wpsl-gmap quickly for un-updated v2 templates, but update your own CSS and JS.

Also note the below_map template id was renamed to horizontal; stored values are remapped automatically.

The JS Side

The frontend is now ES modules bundled with webpack, using wp.hooks for extension points:

wp.hooks.addFilter( 'wpslMapOptions', 'my-plugin', function( options ) {
console.log( 'wpslMapOptions ran:', options );
options.maxZoom = 14;
return options;
} );
wp.hooks.addAction( 'wpslMarkerClicked', 'my-plugin', function( marker, markerData, map ) {
console.log( markerData );
} );

There are around 70 filters and actions, covering the map, the markers, geocoding, directions and the search, plus provider-specific ones and a set for the admin.

wpslSettings and wpslLabels are still localized under the same names, though wpslSettings is nested now (wpslSettings.api.provider). Per-map data for [wpsl_map] instances is localized as wpslMap_0, wpslMap_1, and so on.

In short

If your custom code reads $wpsl_settings inside a filter callback, or overrides a template section, it keeps working. If it writes settings, calls wpsl_get_settings(), reaches for global $wpsl outside a template filter, or targets #wpsl-gmap, it needs a small change. Turn on WP_DEBUG after upgrading and the deprecation notices should point you at the rest.



Download the WP Store Locator 3 beta

Show full changelogHide full changelog

New

  • Added support for Mapbox, Stadia and OpenStreetMap (Leaflet)
  • A new modern theme (vertical layout)
  • Support for name searches
  • Create your own markers in the Marker Studio
  • Draw polygons, circles, rectangles and lines on the map
  • Fields manager that allows you to manage custom data fields
  • Appearance editor that allows you to customize the theme / CTA buttons / active map styles (custom colors, icons, etc.)
  • Template section editor that allows you to customize the code of different template sections
  • Show the current open / closed status
  • Make the current opening status expandable
  • Select different template locations where the contact details, opening hours and post content are displayed
  • Option to select an active store marker
  • Option to set a category marker
  • New cluster marker styles for Google Maps
  • Added the option to show the number of returned results
  • Option to define the search results order (ascending / descending) and sort by (address / id / distance / city / state / country)
  • Optionally only show the category filter
  • Default category filter selection
  • If the search input is a country or state, then return all results
  • If no results are found, then show the nearest location ignoring the used search radius
  • Option to exclude locations from nearby countries in the search results (a search for a border town no longer shows locations across the border, even if they fall inside the search radius)
  • Select the returned geolocation address format (zip, city/town, full address)
  • Choose to run the geolocation attempt on page load or when the user clicks the auto-locate button
  • Set the placeholder for the search field
  • Option to open the info window by hovering over the corresponding marker
  • Clicking on the address details in the search results opens the info window on the map
  • Option to set a store permanently or temporarily closed (optionally automatically reopen)
  • Option to set the opening hours to a custom text, and a “special hours” input field
  • Built-in GDPR support
  • An Alerts section on the settings page that shows compatibility warnings and other relevant messages
  • Data management tool that allows you to delete all locations / categories and reset the plugin to default settings
  • Import / export settings tool
  • When “Add New Store” is clicked and no valid API key exists for Google Maps or Mapbox, a warning is shown that an API key is required, unless the coordinates are entered manually
  • New shortcode options for [wpsl]: exclude_category, category_parent_id, category_filter, radius_filter, results_filter, map_style, map_id, active_marker, marker_clusters, shapes, city, state, country and distance_unit
  • New shortcode options for [wpsl_map]: map_id, store_marker, active_marker, marker_clusters, shapes, city, state and country
  • New shortcode options for [wpsl_map]: map_id, store_marker, active_marker, marker_clusters, city, state and country
  • New current_status and expand_status attributes for the [wpsl_hours] shortcode, so the live open / closed status and its expandable week can be set per shortcode instead of only globally
  • New contact_details attribute for the [wpsl_address] shortcode. Shows or hides the Phone/Fax/Email/Url block in one go, so a single shortcode can disagree with the contact details location setting without needing four attributes. The individual phone, fax, email and url attributes still win where they are named
  • New bold_contact_details attribute for the [wpsl_address] shortcode. Wraps the Phone/Fax/Email/Url labels in <strong> (default true) so single store pages match the search results list. Set to false to restore the v2 unbolded output, or override via the wpsl_address_shortcode_defaults filter
  • Added per-label show/hide toggles for the search-bar labels, so you can hide a label on the front-end without losing its text or the field itself
  • A wpsl_create_meta_filter() function allowing developers to create custom dropdowns / checkbox lists based on the passed custom meta key
  • A wpsl_sortable_columns filter to make custom columns sortable in the admin area
  • A wpsl_skip_required_check filter to disable all required checks

Changed

  • Modernized the decade-old codebase
  • Migrated to v4 of the Google Geocoding API
  • Migrated from the DirectionsService to the new Google Routes API
  • New users now go through an onboarding process
  • Overall improved accessibility / keyboard navigation
  • Improved support for RTL languages
  • The data for the returned locations is now loaded in a single batch instead of one location at a time. The post data, custom fields, categories and featured images are all primed up front, which keeps the number of database queries flat when the search results or a [wpsl_map] contain many locations
  • The settings are read in one query per request instead of one per option group, and only the two groups needed on every page load are autoloaded
  • The default markers are now SVG files instead of PNG. PNG is still supported
  • Extended the admin search with support for zip, city, state and country searches
  • Google Maps API key related errors are captured and shown to the user, explaining how to fix them
  • Check for the partial match param in the Geocode API response for Google Maps, and warn the user if this happens
  • Renamed the “below_map” (Show the store list below the map) template to “horizontal”
  • The ‘more info’ section now always shows when it’s enabled, so it’s no longer required to have contact details filled out
  • The start day of the week for the hours respects the WordPress settings
  • If the label tag is left empty on the settings page, then don’t render the label tag in the search bar
  • Set the correct alt text on the preload image
  • The tabs in the admin area fail gracefully, so they remain accessible if a JS error occurs
  • The shortcode warning that shows up when it’s used outside of a store page is now only shown to logged-in users
  • Make the directions use the start / location markers instead of the default ones
  • If the auto location option is enabled but no SSL is available, the exclamation mark next to it appears red, with popup text explaining the issue
  • Removed support for the InfoBox library to style the pop-ups (no updates for many years). Popups are now styled according to the map provider’s default styles
  • The zoom_controls attribute was removed from the [wpsl_map] shortcode. Zoom controls now follow the map provider’s default behaviour
  • The phone, fax, email and url attributes of the [wpsl_address] shortcode now follow the contact details location setting, instead of always being enabled

Sign up for our newsletter