Page Builders
Gutenberg block, Elementor widget, Divi module, and Bricks element — each with a native config picker and live preview.
Drop the Store Locator into Gutenberg, Elementor, WooCommerce, a shortcode, or a PHP template — and automate it via webhooks. One configuration, zero duplication.
Every layer of WordPress is covered — from the block editor to WooCommerce to your own PHP templates and automation workflows.
Gutenberg block, Elementor widget, Divi module, and Bricks element — each with a native config picker and live preview.
Classic editor shortcodes, text widgets, and any PHP template that calls do_shortcode(). Works anywhere WordPress runs.
Deep-link result cards to the shop pre-filtered by retailer. Opening hours and contact details rendered on product pages with JSON-LD markup.
Full REST surface for configs, retailers, and templates. WP-CLI family for import/export and auditing stale shortcode references.
HTTP callbacks fired when retailers are added, updated, or deleted. Connect to Zapier, Make, or your own endpoint to automate syncs.
Google Maps with multiple style presets, marker clustering, and custom taxonomy icons. Mapbox adapter scaffolded for a future release.
Every integration calls the same render function. There’s nothing new to learn — just pick your platform and embed.
All surfaces converge on the same PHP function — no duplicated logic, no alternative render engines to maintain.
Build your Store Locator in the Locator Builder — templates, radius, filters, opening hours — and save it with a slug.
Reference that slug from a Gutenberg block, a shortcode, an Elementor widget, or a raw PHP call. Every surface reads the same config.
Update the config once and every embed reflects it instantly. Per-instance overrides still win — the config is the baseline, not the ceiling.
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.
<!-- 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"]
$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',
]);
// 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"
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) | ✓ | — | — | — |