Waypost Suite — Documentation

Guide to installing and using Waypost Suite (version 1.0.0). The Suite is standalone, so this page covers the whole plugin.

1. Installation

  1. In WordPress, go to Plugins → Add New → Upload Plugin and upload waypost-suite.zip. Updates are delivered through WPBay.
  2. Switch on Waypost Suite on the Plugins screen. Everything works straight away; there is nothing else to enter.
  3. If the free Waypost Locator & Maps is installed, deactivate it first. The Suite uses the same tables, so your locations, categories and settings stay.

Requires WordPress 6.3+ and PHP 7.4+. There is no cap on the number of locations.

2. Adding locations

The short setup wizard (Waypost → Setup, offered until the first location exists, and again from Tools) picks a map style, the address service, a start position, your first location and a page for the locator. Every step can be skipped. To add locations by hand:

  1. Open Waypost → Locations → Add location. Fill in the name and address.
  2. Press Find this address on the map. The pin is placed from the address; drag it, or move it with the keyboard arrows, to fine-tune. A pin placed from only a city or postcode is marked "approximate".
  3. Add phone, email, website and categories. Set the weekly opening hours, or apply an opening-hours template. Exceptions (holidays, special days) override the weekly hours for one date. The editor suggests the time zone that fits the address; it is never applied without your click.
  4. Add photos, a logo and YouTube, Vimeo or video-file links on the Photos and video tab. Videos load only after the visitor presses play.
  5. Set the status to Published and save. Draft, pending, temporarily closed and archived are also available; only published and temporarily closed locations are shown to visitors.
  6. Add [waypost] to a page.

Unsaved changes are kept in your own browser, so they survive a closed tab. Undo last save is offered for 15 minutes, and every save is kept as a revision you can compare and restore.

3. Shortcodes, block and widgets

ShortcodeWhat it shows
[waypost]Search, map and list together. Attributes: map (saved map ID), layout (split, map, list), height, radius, limit, zoom, categories (comma-separated category IDs), autoload, search_area (button, auto, off), layers="1" (layer switcher), and search="0", filters="0", open_now="0", geolocate="0" to hide those controls. Defaults come from Settings → Locator map.
[waypost_map]Map with results, same attributes.
[waypost_list]List only, no map and no third-party request.
[waypost_search]The search form.
[waypost_address id="12"]One location's address (also slug="…").
[waypost_hours id="12"]Opening hours with today's status, in the location's time zone.
[waypost_directions id="12"]Links to OpenStreetMap, Google Maps, Apple Maps and Waze.
[waypost_gallery id="12"]The photos and videos of one location.
[waypost_contact id="12"]Contact form for one location.
[waypost_submit]Form for suggesting a location.
[waypost_plan id="3"]A floor plan.

In the block editor, insert the Waypost locator block; it has the main options in the sidebar (the "Search this area" and layer options are set in Settings or by shortcode). With Elementor, use the Waypost Locator and Waypost Location widgets.

4. Locator map and result cards

Settings → Locator map sets the defaults for every locator: layout, height, which controls show, the "Search this area" behaviour and the layer switcher. Settings → Location cards chooses which parts a result card shows (open/closed and distance, categories, address, custom fields, phone and website, buttons) and in which order. Reorder with the arrow buttons or by dragging.

5. Directions

The Directions buttons are ordinary links to OpenStreetMap, Google Maps, Apple Maps and Waze. When the visitor searched from a place, it is passed on as the starting point. Nothing is sent from your site; the visitor's browser connects only when they click.

6. Everyday tools

7. Location pages and sitemap

Every published location gets its own page at /locations/its-slug/. Change the base under Settings → General → Address of location pages; old addresses redirect (301) when a slug changes. Pages have a title, description, canonical link and social preview tags, structured data, opening hours, directions and the contact form, and are listed in the WordPress sitemap (/wp-sitemap.xml). Turn a page off per location in the editor. Themes can override the template with waypost/location.php. With plain permalinks the pages use ?wyp_location=slug.

8. Contact messages

Visitors can write to a location with the form on its page or with [waypost_contact id="12"]. Messages are stored under Waypost → Messages (statuses New, In progress, Done, Spam) and emailed with your site's mail setup to the location's email address, or to the site address. The form requires a consent tick, and is protected by a signed time token, a hidden field and a rate limit, without a third-party CAPTCHA. Messages are included in the WordPress personal-data export and erase tools.

9. Suggested locations

[waypost_submit] lets visitors suggest a location. Suggestions wait under Waypost → Suggestions; approving one publishes it, rejecting deletes it. In both cases the sender's email address and answers are deleted once you decide.

The form builder on the same screen shows, hides, requires or renames the optional fields (name, street, city and email are always asked) and adds up to five questions of your own: short or long answer, a choice list, or yes/no. Missing or invalid answers are named next to the form.

10. Insights

Waypost → Insights shows, for the last 7, 30 or 90 days: searches with and without results, the most frequent searches, searches that found nothing (where people look for you), demand by area (about 40 km cells), the most viewed locations, and clicks on directions, website and phone. Counting uses no cookies and stores no IP address or browser details; visits are estimated with a value that changes every day. Staff are not counted. Raw events are kept 90 days by default (Settings).

Each figure is compared with the previous period of the same length. A "Worth a look" box points out sudden rises in searches that found nothing and sharp drops in searches. Under Settings → Insights you can have those alerts emailed (at most once a day, off by default).

Analytics bridge (off by default): "Also send locator events to" passes searches (with the number of results) and clicks to Google Analytics 4, Matomo or Plausible. This happens only in the visitor's browser, only when that tool is already on your page, and only after the visitor gave statistics consent. Search words are never passed on.

11. Webhooks

Waypost → Webhooks: add an https address and choose events: location added, changed or moved to the trash, message received, location suggested, import finished, pickup order placed (WooCommerce). Waypost sends a JSON POST in the background and retries failed deliveries; after 10 failures in a row the webhook is paused. The last deliveries are listed with the answer code and time.

Each delivery is signed. The signing secret is shown once, when you add the webhook. Check the X-Waypost-Signature header: t=<unix time>,v1=<HMAC-SHA256 of "t.body">.

// PHP receiver
$body = file_get_contents( 'php://input' );
preg_match( '/t=(\d+),v1=([a-f0-9]{64})/', $_SERVER['HTTP_X_WAYPOST_SIGNATURE'] ?? '', $m );
$good = $m && abs( time() - (int) $m[1] ) < 300
     && hash_equals( hash_hmac( 'sha256', $m[1] . '.' . $body, WAYPOST_SECRET ), $m[2] );

12. REST API for managing locations

Manage locations from other systems with WordPress application passwords (Users → Profile → Application Passwords):

RequestNeeds
GET /wp-json/waypost/v1/locations?page=1&per_page=50&status=&search=edit own locations (store managers see their own)
POST /wp-json/waypost/v1/locationsedit locations; publishing also needs publish rights
PUT / PATCH /wp-json/waypost/v1/locations/{id}may edit that location
GET /wp-json/waypost/v1/locations/{id}nobody (public location card)
DELETE /wp-json/waypost/v1/locations/{id}delete locations (moves to the trash)
curl -u "user:application password" -H "Content-Type: application/json" \
  -d '{"title":"Leeds","address1":"1 Park Row","city":"Leeds","country_iso2":"GB","status":"draft"}' \
  https://example.com/wp-json/waypost/v1/locations

PUT and PATCH both change only the fields you send. Invalid values return 400 with a message. An OpenAPI 3.1 description of every route, method and parameter, generated from the installed build, is at /wp-json/waypost/v1/openapi.

13. Floor plans

Waypost → Floor plans: give the plan a name, add one image per level (from the media library) with a text description, and place pins by clicking the image or by typing the position. A pin has a label, an optional description and can link to a location's page. Show it with [waypost_plan id="3"], or one level with level="2". On the page, each pin is a button that opens its details with mouse or keyboard, and every level also has a numbered text list of its pins.

In the plan editor you can download the whole plan (.json) or its pins (.csv), and replace all pins from a CSV file with the columns label, level, x, y, location_id, location_external_id, description, key. The level can be a name or a number, and x/y are percentages of the image. If any row has a problem, nothing changes and the row is named. On Floor plans, Import a floor plan loads a .json file as a new plan. Level images are looked up in your media library and never downloaded, so upload them first when moving a plan between sites.

14. Look and feel

Settings → Look and feel: twelve styles (Standard, High contrast, Soft, Square, Rounded, Ocean, Forest, Sunset, Berry, Slate, Paper, Night), each checked for WCAG AA contrast. Also an accent colour (text on buttons switches between black and white for contrast, and you are warned when a colour is too light for links), corner radius, default map height and font. A live preview shows a sample locator with your choices, together with a contrast report.

15. Map, address and route providers; exports

Besides OpenStreetMap, the Suite can use OpenFreeMap, MapTiler, Stadia Maps, Mapbox and Geoapify maps, a custom tile address, the LocationIQ, OpenCage, MapTiler, Stadia, Mapbox and Geoapify address services, and OSRM, OpenRouteService or Geoapify routes. Each is off until you choose it in Settings and, where needed, enter the access token from your account with that provider; tokens are stored encrypted. With a route service selected, each result card gets a Route here button once the visitor's starting point is known: distance, time and turn-by-turn steps appear on the page and the route is drawn on the map. The directions links stay available as a fallback. Marker clustering is included. Exports: CSV, Excel (XLSX), JSON and GeoJSON.

16. Custom fields

Waypost → Custom fields: add fields such as text, long text, number, date, yes/no, a choice list or a web address. Each field can be required, searchable, and shown on cards and location pages. Choice and yes/no fields can be offered to visitors as filters. Fields are included in CSV import and export. Developers can register their own field types with the wyp_field_types filter (see docs/hooks.md).

17. WooCommerce store pickup

With WooCommerce, add the Local pickup – Waypost shipping method to a shipping zone and turn on Store pickup for the locations that offer it. Customers then pick a location at checkout (classic and block checkout). The choice is shown on the order, in the emails and in My Account. A "Ready for pickup" status sends its own email, and Waypost → Pickup orders lists the orders per location.

18. Scheduled sync from a Google Sheet or CSV

Tools → Scheduled sync from a feed: enter the address of a published Google Sheet (CSV) or any CSV file. Waypost downloads it on the schedule you choose and creates or updates locations. Unchanged files and rows are skipped, you choose how conflicts with edits made in WordPress are handled, and failures are emailed. WP-CLI: wp waypost feed-sync.

19. Multilingual locations

With Polylang, WPML or a list of languages you set yourself, each location can have its own title, description, hours note and button text per language, and can be hidden in a language. Category names and custom-field labels go through the translation plugin's string translation. Columns like title@fr work in CSV import and export.

20. Import, export and migration

Waypost → Import & Export.

21. Address lookup and the background queue

Addresses are turned into map positions by Nominatim (OpenStreetMap) by default. Results are cached in your database, and requests are queued and spaced at one per second, as the public service requires. Typed-ahead suggestions never use the public service; they come from your own locations.

Under Settings → Address lookup you can point Waypost at your own Nominatim or Photon server. A server on your own network is only reachable after you tick allow private endpoints; otherwise private and local addresses are refused, and every request uses WordPress's safe HTTP functions.

The queue runs with WordPress cron. To run it from the system instead, turn off Run background jobs with WordPress cron and call wp waypost queue-run.

The consent gate is on by default: no map server is contacted until the visitor presses Load map. The list and the search work before that. The visitor's choice is kept in their browser's local storage, not in a cookie.

If your site uses the WP Consent API, Complianz, Borlabs Cookie, CookieYes, Cookiebot, iubenda, Real Cookie Banner or Cookie Notice, Waypost also accepts consent given there (the category is set in Settings → Privacy and consent, default marketing). You can switch the gate off if your own setup already covers map consent.

23. Structured data for search engines

Single-location shortcodes add LocalBusiness structured data (JSON-LD) with name, address, position, phone, website and opening hours. Choose the business type (Store, Restaurant, AutoRepair and others) in Settings → Search engines, and whether to include the email address (off by default). Developers can change or remove it with the wyp_jsonld filter. When an SEO plugin is active, see Integrations.

24. Integrations

25. Developers

26. Accessibility

Waypost aims at WCAG 2.2 AA: every control works from the keyboard, the number of results is announced to screen readers, focus is always visible, and high-contrast and dark modes and reduced motion are respected. The list works without the map, the layout mirrors for right-to-left languages, and every admin screen has help tabs. Wherever something can be dragged, buttons or fields do the same. Please report any barrier to admin@007aj.com.

27. Privacy and personal data

Privacy policy of the plugin author: https://007aj.com/privacy.

28. Reporting a security issue

Please report suspected vulnerabilities privately, not in a public forum: through Patchstack's report form (https://patchstack.com/database/report) or to the WordPress.org Plugins Team (plugins@wordpress.org). The response targets are: acknowledgement within 3 working days, a fix for a critical issue within 72 hours of confirmation, and within 14 days for a high one. SECURITY.md in the plugin folder has the full policy.

29. External services

Waypost connects to the services below. Each is used only for the purpose shown.

OpenStreetMap map tiles (tile.openstreetmap.org)

Nominatim address search (nominatim.openstreetmap.org)

Photon address search (photon.komoot.io)

Directions links

The "Directions" buttons are ordinary links to openstreetmap.org, Google Maps, Apple Maps or Waze. Nothing is sent from your site; the visitor's browser connects only if they click.

Videos you add to a location (YouTube, Vimeo)

You can point Waypost at your own Nominatim or Photon server in Settings; then no data goes to the public services.

Optional providers in the Suite edition

These are off until an administrator selects them in Settings. Each receives only what is needed for its job: map providers receive the visitor's IP address, browser details, the map area viewed and your page address as referrer; geocoders and routers receive the address or coordinates being looked up, your access token for that provider, and the server's IP address. Access tokens are stored encrypted in your database.

Webhooks and email in the Suite edition

30. Deactivating, uninstalling and deleting data

Deactivating stops everything but keeps your data. Deleting the plugin also keeps your data unless you first turn on Settings → Uninstall → Delete all data when the plugin is deleted; then all Waypost tables, options and scheduled jobs are removed.

Support: admin@007aj.com · Privacy · Terms · 007aj.com