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.

0 comments on “Debugging: Find Locations / Initial Load not working with Power add on enabled”

Debugging: Find Locations / Initial Load not working with Power add on enabled

Initial post to AJAX
Initial response

This looks like a problem with the AJAX processor on the backend. Need to look into ajax_onload.

csl_ajax_onload refs

The problem was with the Power add on trying to validate SLP location IDs when updating map markers. The intent is to NOT manipulate a map marker with an invalid ID as it can cause more problems downstream.

Resolution

DO NOT check_admin_referer() for the AJAX calls. The easiest way to check that , since we do not have an easily-accessible reference variable for “hey, I’m running an AJAX query now” is to simply ensure the nonce we want to validate even exists in the first place.

0 comments on “Debugging: Add locations w/ Power “Uncaught SyntaxError: redeclaration of const wp_data””

Debugging: Add locations w/ Power “Uncaught SyntaxError: redeclaration of const wp_data”

SLP 5.13.5 prerelease + Power 5.11 has a problem found during testing… the admin add locations breaks (probably a lot of other things as well).

The browser console:

This is related to moving to wp_add_inline_script() vs. the wp_localize_script() based on findings that indicate wp_localize_script() may a not work with block themes and it is really intended for i18n/l10n.

Further investigation finds…

store-locator-le/include/module/admin_tabs/SLP_BaseClass_Admin.php
enqueue_admin_javascript()

This is called for each add-on that needs it…


Power needs it.
handle: slppower_manage_locations
data stack:
{"ajax_nonce":"50164ddb77"}

SLP (base plugin) needs it.
handle: slp_manage_locations
data stack:
{"ajax_nonce":"50164ddb77"}

However, a code search shows that ONLY the base plugin admin JavaScript is using/referencing wp_data…

Why is Power setting up an enqueue of this file?

Code Analysis of enqueue_admin_javascript()…

This is always true:

if ( ! empty( $tab_js_settings ) ) {

Because this is always set further up in the code…

// All our JS will now have an AJAX_NONCE setting.
$tab_js_settings = array( 'ajax_nonce' => wp_create_nonce('slp_ajax'), );

They key player here “ajax_nonce” set above is ONLY ever used here… SLP base plugin admin.js… which is only called when doing a change_option. That is fired from both the base plugin and Power add on, HOWEVER… they both reference the SLP_ADMIN.change_option() method in JavaScript.

ajax_nonce usage in JavaScript is only in SLP base plugin admin.js (SLP_ADMIN) change_option() method attached to the options property (SLP_ADMIN.options.change_option).
All calls to the SLP_ADMIN.options.change_option() call

Resolution

Do not set the baseline tab_js_settings in SLP_BaseClass_Admin.php

This will stop the default (only) ajax_nonce PHP array entry from being set, effectively short-circuiting the enqueue of the script from the Power add-on.

While this fixes the issue short-term and stops overloading the tab_js_settings, if Power (or any other add on) finds it necessary to add some custom entries to the tab_js_settings array, it will break again. This is a fragile patch.

The change…

Add the handle to the JavaScript variable definition

The current setup is to hard-code the JS environment variable to “wp_data” for ALL add-ons. This will make them “fight” per the message above.

Instead of blindly referencing a generic hard-coded “wp_data” variable, let’s change that to be based on the add-on name.

For our use cases above that would do this.

For SLP base plugin wp_data => slp_data

For Power add on wp_data => slppower_data

The change…

0 comments on “SLP Settings : Quick Save”

SLP Settings : Quick Save

Originally all of the SLP settings forms had to be submitted by clicking a save button. This runs a typical form post + full page render… old-school web 1.X style.

Along the way work was done to utilize JavaScript triggers and save data with an onBlur on settings form fields. The tech uses jQuery using an AJAX-type model to send a single form field to the WordPress AJAX processor to manage saving a single field without re-rendering the entire page or sending the entire form.

How It Is Triggered

SLP base plugin’s admin.js initializes and hooks a change_option JS function to any INPUT type field with a quick_save CSS class attached.

    var qs_inputs = jQuery('.quick_save').find(':input');
    qs_inputs.on('change', function (e) {
      change_option(e.currentTarget);
    });
    qs_inputs.on('blur', function (e) {
      var start_val = e.currentTarget.defaultValue;
      if (e.currentTarget.value !== start_val) {
        change_option(e.currentTarget);
      }
    });
0 comments on “Fresh VVV Setup for Plugin Dev”

Fresh VVV Setup for Plugin Dev

Starting out you’ll need…

Virtualbox (6.1)
Vagrant (2.2.15)
Install the vagrant-goodhost plugins
A running copy of git

This is all per the VVV System Requirements

Getting the box up…

Clone of VVV to a local directory.

git clone -b stable git://github.com/Varying-Vagrant-Vagrants/VVV.git ./vagrant-local

# vagrant up

This will download, build, and boot a default WordPress box.

Getting the SLP software

Fork the main SLP bitbucket repo to your own local copy.

Clone that fork into the one.wordpress.test wp-content/plugins directory…

cd ./vagrant-local/www/wordpress-one/public_html/wp-content/plugins/

# git clone git@bitbucket.org:lance_cleveland/store-locator-plus.git


# git checkout develop