Works with every major platform

One Store Locator, every platform

Drop the Store Locator into Gutenberg, Elementor, WooCommerce, a shortcode, or a PHP template — and automate it via webhooks. One configuration, zero duplication.

What connects

Built for the entire WordPress ecosystem

Every layer of WordPress is covered — from the block editor to WooCommerce to your own PHP templates and automation workflows.

Page Builders

Gutenberg block, Elementor widget, Divi module, and Bricks element — each with a native config picker and live preview.

Gutenberg Elementor Divi Bricks

WordPress Core

Classic editor shortcodes, text widgets, and any PHP template that calls do_shortcode(). Works anywhere WordPress runs.

Shortcode Classic editor PHP template

WooCommerce

Deep-link result cards to the shop pre-filtered by retailer. Opening hours and contact details rendered on product pages with JSON-LD markup.

Shop filter Product cards JSON-LD

Developer APIs

Full REST surface for configs, retailers, and templates. WP-CLI family for import/export and auditing stale shortcode references.

REST API WP-CLI PHP hooks

Automation & Webhooks

HTTP callbacks fired when retailers are added, updated, or deleted. Connect to Zapier, Make, or your own endpoint to automate syncs.

Webhook events Zapier Make

Maps & Location Services

Google Maps with multiple style presets, marker clustering, and custom taxonomy icons. Mapbox adapter scaffolded for a future release.

Google Maps Mapbox (soon) Geocoding
Supported surfaces

Pick your tool

Every integration calls the same render function. There’s nothing new to learn — just pick your platform and embed.

Live
Gutenberg Block
Insert the Store Locator block and pick your configuration from the Inspector sidebar. Override any setting per-block without touching the shared config.
<!– wp:rmfw/store-locator {"configSlug":"main"} /–>
Inspector sidebar Live preview
Live
Shortcode
Works in post content, Classic editor, text widgets, and any theme template that calls do_shortcode(). Override individual args inline.
[rmfw_store_locator config="main" height="500px"]
Classic editor Any template
Live
Elementor Widget
Find the Store Locator widget under the Retailers Management category. Select a configuration and optionally override layout and height per-instance.
Retailers Management → Store Locator
Elementor 3.x Live preview
Coming soon
Divi Module
A Divi Builder module that exposes the same configId dropdown and optional override controls. Adapter scaffolded, full module ships later.
Divi 4+ Scaffolded
Coming soon
Bricks Element
A native Bricks Builder element, gated on BRICKS_VERSION — completely inert when Bricks is not installed. Full element ships in a future update.
Bricks 1.x Scaffolded
Live
Custom PHP / Theme
Call render_container() directly from a theme template, page builder element, or any PHP context. CSS and JS are auto-enqueued.
$sl->render_container(['configId' => 42]);
Any PHP context camelCase args
Live
REST API
Routes under /wp-json/retailers-management-for-woocommerce/v1/configs for listing, creating, updating, duplicating, and exporting configurations.
GET /wp-json/retailers-management-for-woocommerce/v1/configs
Routes WP Nonce auth
Coming soon
Webhooks
HTTP callbacks fired when retailers are added, updated, or deleted. Connect to Zapier, Make, or any HTTP endpoint to automate syncs and notifications.
Zapier Make HTTP POST
Live
Google Maps / Mapbox
Google Maps with multiple style presets, marker clustering, and custom taxonomy icons. Mapbox adapter is scaffolded for a future release.
Google Maps Mapbox (soon)
Under the hood

One function call. Every builder.

All surfaces converge on the same PHP function — no duplicated logic, no alternative render engines to maintain.

  1. 1

    Configure once

    Build your Store Locator in the Locator Builder — templates, radius, filters, opening hours — and save it with a slug.

  2. 2

    Render anywhere

    Reference that slug from a Gutenberg block, a shortcode, an Elementor widget, or a raw PHP call. Every surface reads the same config.

  3. 3

    Same data, same behavior

    Update the config once and every embed reflects it instantly. Per-instance overrides still win — the config is the baseline, not the ceiling.

Code-first

From one line of code

Drop the locator into any context with a single call. Override any setting inline — the config handles the defaults.

All three surfaces accept the same camelCase keys. The shortcode layer normalises snake_case automatically.

Shortcode
<!-- Reference a saved config -->
[rmfw_store_locator config="downtown-map"]

<!-- Override per-instance -->
[rmfw_store_locator
  config="downtown-map"
  height="400px"
  layout="map-only"]

<!-- Fully inline, no saved config needed -->
[rmfw_store_locator
  template="dark"
  radius=25
  show_search_bar="1"]
PHP
$sl = StoreLocatorShortcode::get_instance();

// Reference by slug
echo $sl->render_container([
  'configSlug' => 'downtown-map',
]);

// Per-instance overrides still win
echo $sl->render_container([
  'configId' => 42,
  'height'   => '400px',
  'layout'   => 'map-only',
]);
REST API
// List all saved configurations
const base = '/wp-json/retailers-management-for-woocommerce/v1';
const res = await fetch(`${base}/configs`, {
  headers: { 'X-WP-Nonce': wpApiSettings.nonce },
});
const { configs } = await res.json();

// Fetch a single config by slug
const cfg = await fetch(
  `${base}/configs/downtown-map`
).then(r => r.json());

console.log(cfg.args.template); // "dark"
Feature matrix

What works where

Every surface supports the full locator experience. Editor-specific features like live preview are surface-dependent.

Feature Gutenberg Shortcode Elementor PHP API
Configuration select
Per-instance overrides
Live preview in editor
Template picker
Opening hours display
WooCommerce shop filter
Custom CSS tokens
Block alignment (wide / full)

Drop it in. Move on.

The Store Locator installs in minutes, works with the tools you already use, and needs zero maintenance when you switch page builders.