Premier 4.9.1 WooCommerce Interface Updates And Other Patches

For our WordPress plugin users the Premier add on has been updated to 4.9.1 today to address several issues.  The WooCommerce interface has been patched to fix a problem for users on non-English sites.    Version 4.9.1 also has been re-tooled to work with PHP 5.3, though you really should be running PHP 5.6 as a minimum.

MySLP Enterprise users will be getting the button bar in our year-end update of MySLP.

Button Bar Category Selector

The new Button Bar category selector, introduced in our previous release, now honors the “hide empty categories” setting.  However, unlike the other category selectors using a drop down selector coming from WordPress Core, our custom button bar interface behaves more along the lines of how we think it should.  With the button bar a category is considered empty only if no locations are attached to that category.

How is that different?  A little more explanation is warranted.

A Button Bar On A Customer Site
A Button Bar On A Customer Site

Hide Empty Categories

This is a setting that is available via the Power addon.  Yes, the Power add on.  I know we are talking about Premier here, but let’s forget about that detail for now.   Premier only adds some new user interfaces to the underlying category features provided by Power.

The Power add on allows you to attach categories to locations, such as “put all these locations in the wholesale category” and “these go in the retail category”.      You can then provide an easy way for users to filter the locations they see on your map by selecting whether they want to see retail or wholesale locations.    The default category selector , if you choose to show it, is a simple drop down menu that shows any categories you’ve added to Store Locator Plus.

Normally ALL categories you’ve created are shown. Even if there are NO locations that exist within the category.   If you have NO wholesale locations and someone picks that from the drop down category selector they see no results.

A long time back we added a “Hide If Empty” option for the category selector.   However there is a big “gotcha”.   It uses the WordPress built-in functionality for category drop downs since we didn’t want to rewrite their huge category drop down menu library.  No need to re-invent the wheel.   BUT this built-in selector has a rather unique way of defining what is an empty category.  For WordPress a category is empty if everything assign to the category is in draft mode.

Draft Mode? What?

Yes, draft mode.   We also did not want to write our own custom category engine.  Actually, to be honest WE DID do that back in Store Locator Plus 1.0.  It was a disaster.  Why recreate something built into WordPress?   Around SLP 3.0 we converted everything to use the WordPress category system.   That system uses a lot of underpinnings from pages and posts.    I think you can see where this is going.

What does that mean for hide empty?

As noted in a little not on the Hide Empty checkbox, this feature ONLY WORKS IF PAGES ARE ENABLED.  Yup, if you are using Hide Empty to not show some things on that category drop down you must ALSO be using Pages ( Enable Pages is under the General tab, BTW).     Not only that but you must change the default to be PUBLISHED instead of draft mode, which creates public SEO friendly pages for every location in your database.

You need to do that because if you don’t the WordPress category drop down creator will consider every page set to draft or private mode to be “unused” , which means those locations are not counted as part of the category.

Yes We Know It Is Not Great

Back when the feature was first written WordPress was back on version 3-something.  Since then they’ve done a LOT of work on custom post types and taxonomies.    It also means we now have some ways to FIX that hide empty thing.   Our first iteration was in the new button bar.

With the Button Bar we can consider a category NOT EMPTY if any locations are assigned to it whether or not pages are in use.  If pages are in use we don’t have to know if they are published or private.   We think it makes a LOT more sense to consider a store category “in use” if it is assigned to a location NOT whether the associated SEO page is public or in draft mode.

So… The Button Bar Hide Empty

If you are using the button bar to show a category selector you can also use hide empty.   Empty means NO LOCATIONS are using that category.

For the other category selectors, like any of the drop down selectors, the old-school “it is empty if pages it not enabled” still applies.  We’re working on fixing that in the Power add on in a future release.

Power 4.9.1 Improves Location Import

Store Locator Plus Power 4.9.1 improves location imports. It is available for WordPress now and will be updated in our end-of-year release for MySLP users.   Here it what was patched and improved.

All Users (MySLP and WPSLP)

Address 2 column on CSV import files was incorrectly being mapped to the address field.   This has been resolved.

The location import processing has vastly improved progress indicators on the import sub tab.  Check them out.

Power 4.9.2 Import Processing Progress
Power 4.9.2 Import Processing Progress Bar

WordPress Specific

Store Pages custom post types , that are included with Power, correctly registers with WordPress 4.9 showing the sidebar menu.

Power has been updated to work on servers running PHP 5.3.  You really should upgrade to PHP 5.6 if you value site security, not too mention performance.  PHP 5.3 has been out-of-date for several years now.  Actually jump right to PHP 7 if you can.

General Notes

Import and Basic Auth

The new import process requires that your site be able to run WP Cron.  Some hosts and site admins turn that off for “security reasons”, but there is limited-if-any security risk with that process.  Not running it not only will prevent the new imports from running but stops lots of other things from working in WordPress; like automated updates.

If your site is using basic authentication, you’ll know if it is, the import processor cannot start the second (reading the CSV file) and third stages (geocoding locations) automatically.    You’ll need to be logged in as an authorized user and surf to your website/wp-cron.php to kick things off.     Some development and staging sites use basic authentication to prevent a casual web surfer or search bot from accessing a site they are working on.

Marker Not Found Notice On Settings Page

If you are seeing “marker not found” notifications when going to your Settings tab in SLP, this could be an obvious indication that basic auth is running on your site.    Our marker-testing uses the built-in WordPress “get this web thing” function which access something, like your marker URL , as if it is a “Joe Public” web user just surfing the web WITHOUT typing in special access codes or passwords.     As a side note, if you are seeing that notification there is a good chance that someone visiting your site with a browser you’ve not tested yet is getting a map with no markers on it.

Tag Based Location Searches

No, we’ve not completely fixed the TAG search in this release.   The tag searching is better, but still not 100%.  We are actively chasing down that bug and a few others for the SLP 4.9.2 + Power 4.9.2 release.

Other Updates

We are working on getting Premier to run on PHP 5.3 servers (you ARE going to upgrade to PHP 5.6, right?) along with some other minor patches.

If you have issues please post in the forum (this shows up in our dev teams Slack channel) or Contact Us via email.  If using the forum, please start your own thread if you are sharing information about your site and want help debugging.  Include a link to your locator page and copy the content of your plugin environment (for WPSLP users) or profile (MySLP users).

Keep in mind that if you updated OTHER THINGS like WordPress, another plugin, or a theme… those can break Store Locator Plus.    SLP is the most visible thing you’ll see if your JavaScript breaks as the search form stops working.  Nobody usually notices a slide-out menu not sliding out but a search for locations is front-and-center.   Check your browser’s developer tools and look in the console for error messages.   We’ve had several sites update things like their them which was missing a library, such as Lightbox, that breaks JavaScript and stops the locator from running.

Location Import Process Improved With Power 4.9

With the release of the WordPress plugins version 4.9 of Store Locator Plus and the Power add on we focused on improving the location import process for large lists.      MySLP Power users will see this release by the end of the year after it has passed full testing on our SaaS platform.

Why Did We Change The Process?

Prior to version 4.9 there were a number of limitations that could prevent larger lists of locations from importing properly.    For the fastest servers with lots of memory and super-fast networking as well as a premium tier on the Google API service, Store Locator Plus could import 40,000 locations without any problem.

As WordPress started adding more network overhead, all those update notifications and the news feed in the WordPress dashboard comes from somewhere, the network started to become an issue.   On top of that Google started tracking every single map request so they could start charging people using their maps on a per-lookup basis.     Both of these changes increased the network traffic, slowing down how quickly Store Locator Plus could get a latitude/longitude for those new locations being imported.

Often your server would give up, saying “you had your 30 seconds of my time” and stopping the import mid-stream.    The PHP time limitation on processing is often the first thing that “gives out” when importing large lists of locations.   For most shared hosts the limit is 30 seconds.   Even on a dedicated host it is good practice to not let a PHP process consume more than 120 seconds of CPU time.  This prevents “runaway” processes that take over the entire server which can grind EVERYTHING to a halt forcing a server restart.

The bad news is that if you are importing 10,000 locations and the process gives up after 9,800 locations you have to start over.   At least that is how it USED TO BE with SLP 4.8 and earlier.

How Imports Improved In Power 4.9

With version 4.8 the location import process was “tied to the browser” until it was complete.    When you clicked the “upload CSV” button your browser would sit there attached to the website while the file was uploaded, read line-by-line, each location sent to Google to get a latitude and longitude and then get added to the Store Locator Plus locations list.     If the network was slow this could take a long time, often 10 minutes or more.   That is FOREVER to keep a browser window open these days.

With Power 4.9 we split this process into 3 stages.

Stage 1 : Get The File On The server

This is the only step of the process that stays “attached to your browser”.    The browser will bar processing the page while the file is copied from your laptop to the web server.   This is typically a quick process even for a file with 250,000 locations.    The time it takes depends on how fast your local network and ISP connection is.

Previous versions stored  the uploaded location files in a “hidden” SLP-specific directory under WordPress uploads.   Version 4.9 stores them in the media library.     This gives you an easy way to see that the file was uploaded properly, see what the current import state is, and later download or delete the files when the import is complete.

Stage 2 : Import The Locations Into SLP

After the file is uploaded a detached process starts to work on the actual location import. This ensures your browser doesn’t time out as this part happens in the background.    Your browser is “free to go” while your server does the work of loading in the locations.

It runs a WP Cron job in the background to import the locations WITHOUT geocoding. This is much faster and ensures the import doesn’t disconnect partway through.

As part of improving visibility into this process, Power 4.9.1 will be out soon and will be included in our end-of-year MySLP update.  It includes a cool interactive progress bar as well showing you how many records have been read.

Power 4.9.2 Import Processing Progress
Power 4.9.2 Import Processing Progress Bar

If your server times out before our background location loader finishes reading the file , SLP remembers the last record read and re-spawns a new background job to pick up where it left off. It will do this until it reaches the end of the file no matter how often PHP times out.

Stage 3: Geocode The Locations

AFTER the file has been loaded it will then geocode all uncoded locations.   That means you may catch SLP with a list of locations none of which are geocoded and not showing up on the map.  This is a temporary state while SLP talks to Google.    Since that is always the slowest part of an import we decided to do this in a separate process so at least SOME locations start showing up right away and eventually of them are loaded.

Power 4.9.2 Geocoding Progress
Power 4.9.2 Geocoding Progress

This is similar to the import. It does it in the background and if PHP times out it will re-spawn itself until it has tried to geocode very location at least once. This is a big step toward not having an import time out. It also keeps you from manually having to re-geocode if you hit your daily 2500 location limit and didn’t opt for a paid API key.