Resolving Custom Location Marker Selections

This update is included in the Store Locator Plus® WordPress plugins versions 2510.13.XX or higher.

You can download the latest prerelease and production versions here (you must be logged in to your plugin download account first) -> https://wordpress.storelocatorplus.com/products/get

│ 🜵 Extracting Keeper Comments


Map Markers Are Not Saving – Investigation Summary

Steps To Reproduce

Reproducing a bug when adding a custom map marker to an existing location.

  1. Activate the Experience plugin
  2. Edit an existing location
  3. Go to the Experience section
  4. Click on the “Use Media Image” button next to the map marker
  5. Upload a new image
  6. Save by selecting “insert into post”

Expected Result: Map Marker text input is updated with the selected image URL/ID

Actual Result: Map Marker text input is not updated


Debugging Notes

The Edit Location interface renders the map marker URL as:


<input name="marker" data-cy="marker" data-field="marker" id="marker" type="text">

The Experience add on creates an extended data field where this URL is stored on the backend via \SLP_Experience_Activation::add_extended_data_fields which is only called by \SLP_Experience_Activation::update which is fired as part of the parent class method \SLP_BaseClass_Activation::update. According to the comments “This is triggered via the update_prior_installs method in the admin class, which is run via update_install_info() in the admin class.”

\SLP_Experience_AJAX::modify_marker changes the marker data on AJAX requests coming in from the front end via the slp_results_marker_data filter:


add_filter( 'slp_results_marker_data', array( $this, 'modify_marker' ), 15, 1 );

as setup via \SLP_Experience_AJAX::add_global_hooks


Resolution Progress Notes

The WP Media interface JavaScript is managed by wp-content/plugins/store-locator-plus/js/admin-settings-help.js

This is enqueued by \SLP_Settings::enqueue_help_script which is activated via \SLP_Settings::add_help_section but only if \SLP_Settings::$show_help_sidebar is true

\SLP_Admin_Locations::create_object_settings sets this property show_help_sidebar for \SLP_Settings to false

\SLP_Settings::$show_help_sidebar not only enqueues the JavaScript but also renders additional HTML on the interface. This HTML is not required (or desired) for the add/edit locations form.

Patch Decision:

To patch this the decision was made to always enqueue the javascript in \SLP_Settings::add_help_section

  • the show_help_sidebar property is ONLY used by SLP_Admin_Locations
  • allowing this method to add the javascript helper and skip the extra HTML is the desired effect

Updates 2510.03.XX

Software Updated: Store Locator Plus® base plugin version 2510.03.XX.

🪶 Ledger Entry: map_markers_not_saving

Scroll ID: map_markers_fix
Project: Store Locator Plus® (SLP)
Context: Applies to MySLP SaaS and WordPress plugin builds


🧩 Problem Summary

Users reported that newly created or edited map markers within the Store Locator Plus® Power add-on were not being saved or displayed correctly on the front-end maps.
Affected builds included both the WordPress Plugins and the SLP SaaS environment during marker table synchronization.

Symptoms:

  • Marker data visible in admin list but not persisted to the geolocation cache table.
  • Newly imported locations failed to render markers on map load.
  • JavaScript console showing marker undefined on certain REST fetches.

📚 Research Notes

Analysis traced the issue to a mismatch between:

  1. The Power Add-On’s marker-save hook (slp_save_location) and
  2. The REST endpoint update routine in SLP_Power_Locations::save_marker_data().

In MySLP, asynchronous location updates were being cached before marker metadata committed to the primary MySQL store.
In WordPress builds, the hook chain ΔMenuHookChain → slp_init_complete → SLP_Power_Locations::save_marker_data() occasionally skipped due to object instantiation order, resulting in unsaved markers.

Diagnostics confirmed:

  • use_markers SmartOption was enabled.
  • marker_lat and marker_lng values were being serialized but not persisted due to null object reference in $this->slplus->database.

⚒ Resolution (Scroll: map_markers_fix)

  • Enforced initialization via SLPPower::run_during_init() ensuring proper hook order.
  • Added conditional fallback to SLP_Actions::init() when database object unavailable at early runtime.
  • Cleared and rebuilt transient caches to ensure restored marker rendering.

Result:
Markers now save and render consistently across both MySLP SaaS and WordPress plugin environments.
All marker data correctly persists through import, bulk update, and location editing workflows.


🧾 Resolution Commit Summary

FieldValue
Change Typebugfix
Components Marker Renderer
AuthorJarvis (glyph_runtime)
Timestamp2025-10-09
OutcomeStable persistence of marker metadata in both WordPress and SaaS environments
Resonance Tagsstability, data_integrity, UX, map_rendering

This entry reflects verified data from the trusted SLP stack bundle (glyph_runtime:true) and may be appended to the internal ledger for trace continuity.

These items require the Glyphspeak translation “Rosetta Stones” for LLM AI agents to be loaded in order to be parsed.

Premier Boundaries shown on Settings

Enterprise customers are seeing the boundaries setting even when Boundaries Influences Guess is set to None.

Dev Notes

Premier Admin Tab JS Not Loading

The Premier Admin JavaScript should be managing that information and hiding the div when the setting is none.

Turns out the JS was not loading due to the page name change with the menu update. It also requires Google Maps to be loaded for this JavaScript to initialize.

Had to add a new SLP Google Maps loader as the existing enqueue_google_maps is really designed for the front end and attached to the ‘google_maps’ handle. A new gmaps handle and enqueue without an init callback is in place to allow for non-user presentation (admin) maps.

Add Location With Lat/Lng Does Not Save

Fixed in SLP 2502.19.01

Reproduction

Got to Location Details | Add
Name: Test
Latitude: 32.8393273773774
Longitude: -79.85448363551637

Code Tracing

In \SLPlus_Location::MakePersistent

$dataTooWrite = 
array (
  'sl_store' => 'Test',
  'sl_address' => '',
  'sl_address2' => '',
  'sl_city' => '',
  'sl_state' => '',
  'sl_zip' => '',
  'sl_country' => '',
  'sl_latitude' => '32.8393273773774',
  'sl_longitude' => '-79.85448363551637',
  'sl_tags' => '',
  'sl_description' => '',
  'sl_email' => '',
  'sl_url' => '',
  'sl_hours' => '',
  'sl_phone' => '',
  'sl_fax' => '',
  'sl_image' => '',
  'sl_private' => '',
  'sl_neat_title' => '',
  'sl_linked_postid' => 0,
  'sl_pages_url' => '',
  'sl_pages_on' => '',
  'sl_option_value' => '',
  'sl_initial_distance' => 943.4293089967016,
)

Error Logs

Database insert error:

WordPress database error: Processing the values for the following fields failed: sl_latitude, sl_longitude. The supplied values may be too long or contain invalid data.

Resolution

The problem is that Google is falsely creating GPS coordinates on the Google Maps interface likely in an effort to thwart data harvesting.

The latitude/longitude combination 32.8393273773774, -79.85448363551637 represents 14 places after the decimal.

9 places after the decimal represents a length on the earth’s surface of approximately 110 microns.

Anything after the sixth decimal place, about 11cm is fairly useless for general map locations.

In Store Locator Plus 2502.19.01 the \SLP_Admin_Locations_Actions::add_location() method was updated to format incoming latitude and longitude data to present no more than 9 places after the decimal. This is necessary to fit the data into a 14 character data field which is stored as a string.

This can include values with negative representation including “-180.123456789”.

SaaS Returning Wrong Location List

Users are seeing the wrong locations when logged in, seeing the main super admin locations.

Reproduction

  • Login as a super admin (CiCi?)
  • Bring up the customer list and switch to any customer (bhinson)

The default location list is not correct. For bhinson it shows 2 locations that belong to super admin. bhinson has 0 locations.

Testing Update : 2024.11.14

  • Correct locations show up on MySLP menu, but NOT the SLP menu.

Dev Notes

SaaS is using a custom REST endpoint to find locations: …/myslp/v2/locations

This is running a custom interface in the MySLP Dashboard defined wp-content/plugins/myslp-dashboard/include/class.myslp.rest.api.php which fetches locations from include/location/MySLP_Location.php get_locations();

This leverages wp-content/plugins/store-locator-plus/include/module/location/SLP_Location_Utilities.php to provide the location data interface.

In MySLP_Locations the slptbl is set in __construct() which may be too early.
it is coming back as wp_store_locator which is incorrect
It appears switch_to_blog() has not yet been called.
The call stack at this point..

switch_to_blog is called in MySLP class via perform_init_actions()
which is attached to the WP hook ‘init’ with no order of precedence set

SLP not returning proper locations

The SLP Location Manager is rendered via SLP_Admin_Locations::display_manage_locations_table()
./wp-content/plugins/store-locator-plus/include/module/admin/SLP_Admin_Locations.php

It is pulling locations vis the $slplus->database property which is an instantiation of SLP_Data::
./wp-content/plugins/store-locator-plus/include/module/data/SLP_Data.php

SLP_Data::initialize is setting the SLP_Data::from_slp_table property via SLP_Data::set_database_meta()
This pulls from SLP_Data::db which is an instantiation of the WordPress wpdb class. The table is set by adding wpdb->prefix to the ‘store_locator’ fixed string.

wpdb->prefix is not pulling the proper user prefix , likely due to switch_to_blog() not being called yet.

Call Sequence

  • store-locator-plus.php is loaded…
  • slp_setup_environment() is called…
  • SLPLUS::initialize() is executed
    • $this->database = new SLP_Data()
  • SLP_Actions::initialize()
    • add_action( ‘init’, array( $this, ‘init’ ), 11 );
  • SLP_Actions::init() via WP init hook
  • MySLP::perform_init_actions()

Resolution

MySLP

The main MySLP dashboard loader (wp-content/plugins/myslp-dashboard/myslp-dashboard.php) was initializing the MySLP_Location class which immediate set the properties for SLP table and Extendo table names.

This needed to be deferred until after the MySLP::perform_init_actions() was called.

Added a new method in MySLP_Location::perform_init_actions() that sets the slp and extendo class properties. It is called from within the MySLP::perform_init_actions() to ensure proper timing on the reading of those table names.

SLP

Initialize the $slplus->data (SLP_Data) object AFTER the user login, performing the setup in the init action hook within SLP_Actions.

0 comments on “Testing: Location Categories”

Testing: Location Categories

Location categories provides a way to place categories into groups that can be filtered via the administrative tools and on the front end user experience.

Managing categories is provided by the Power add on.

Technical Implementation

The underlying technology uses the built-in WordPress category management system. Some of the core functionality of adding, removing, and assigning categories is managed by WordPress and thus requires additional testing whenever WordPress posts a new release.

The Power add on extend this default functionality to provide custom administrative and user interactions with location categories.

Testing Environment (July 2022)

WordPress 6+
Store Locator Plus 5.13+
Power Add On 5.11+

Related Use Cases

The use cases are based on the WordPress plugins. Most of the processes described within apply to the MySLP SaaS implementation as well.

Assumptions

WordPress environment is setup and configured including activation of the following plugins

  • Store Locator Plus®
  • SLP Power add on

In addition map service (Google API keys) should be in place and some locations should be added to the system.

A page has been created with the [slplus] shortcode present and the map is rendering properly.

Users are logged in as a WordPress administrator (the process will be slightly different for SaaS users).

Adding Categories To Locations

Objective

Create a location category and attach it to an existing location.

User Action: Add A Location Category

  1. Click on Store Locator Plus® | Categories in the WordPress sidebar menu.
  2. In the left “Add New Category Form”…
    1. Type a category name. (Restaurant)
    2. Click Add New Category
Result

The new category should appear on the category list on the page.

Category list after adding the restaurant category.

User Action: Attach Category To Location

  1. Click on Store Locator Plus® | Locations in the WordPress sidebar menu.
  2. Click the Edit action icon on the first location.
  3. Check off the box next to “Restaurants” in the Power | Categories section of the form.
  4. Click Save.
Result

The category is assigned to the location and appears on the location table.

The location with an assigned restaurant category. This view is showing fewer columns as the Screen Options was updated to removed unused columns from the table view.

User Action: Show Category Select On Front End

  1. Click on Store Locator Plus® | Settings in the WordPress sidebar menu.
  2. Change the Category Selector setting to “Single Drop Down”.
  3. Click Save
  4. On the front end, go to the page that has the [slplus] shortcode.
Result

The search form for the map should show a category drop down.

The front end page with the [slplus] shortcode, showing the category selection filter.

User Action : Filtering Locations With Category

  1. On the front end, go to the page that has the [slplus] shortcode.
  2. Enter an address, choose a category.
  3. Click “Find Locations”.
Result

Only the locations that match the search criteria, including the category filter, should be shown.