Posted on

Store Locator Plus Version 4.3 pre-release

Coming Soon

For starters, fresh from “the man behind the curtain”:

* Enhancement: Add Store Locator Plus to the admin bar under the site menu.

* Enhancement: Admin pages that render settings no longer execute a database I/O call with get_option() for every single setting. 60+ fewer data fetch calls when rendering the User Experience tab.

* Enhancement: 250 lines of legacy admin interface code removed. Replaced with deprecated notices for SLP 1.0 to 3.x users.

* Enhancement: Admin interface has been updated to reflect the WordPress Dashboard style.

* Enhancement: Admin interface has been refined with better responsive design.

SLP 4.3 Samsung Galaxy S5 Simulation
SLP 4.3 Samsung Galaxy S5 Simulation


* Enhancement: More robust settings upgrade system for users migrating from older to newer releases.

* Enhancement: Settings upgrade system is not loaded into memory for new installs. Improves performance and memory consumption on initial installation/activation.

* Change: Find button images are no longer supported. Use CSS styling to modify the standard text button if you want custom image buttons or downgrade to SLP 4.2.67.
* Change: Move UX / Results / Website Label to a serialized option, remove it from the JavaScript parser as it is now handled on the AJAX Handler backend.
* Change: Remove custom zoom_level settings, make it a standard serialized option.
* Change: refactor much of the slp.js namespace and classes to follow current JavaScript best practices. Eliminate class/object overhead on some simple function-only references.
* Change: No longer checks for , and deactivates, Super Extendo add-on pack. If you are using that add-on pack you should not be. Bad things happen.

* Fix: Apostrophe in manage locations search.

* Note: Some add-on packs will need to be upgraded to their latest 4.3 release to work properly with SLP 4.3.

4.3 Cleaner responsive interface4.3 Cleaner responsive interfaceSLP 4.3 WooMemorable theme


Premier Members

Premier Members will also be getting some new features with the 4.3 release.    The new features will only be available to Premier Members with an active subscription  so they can download that latest Premier Plugin release.

There will be new features added on a regular basis that will be exclusive to the active subscription holders in good standing. So far they have been given a sneak preview and use of Pagination and Cluster Maps.

The focus for the July release of the Premier Plugin has been on “Google Address Guessing”.   Google Address Guessing is what happens when a user enters an address into the address box on your locations map page.    When a user clicks on the Find Locations button, the address they typed into the address box is sent to Google as a query.   Google uses a “proprietary” algorithm (this means they don’t share the behind the scenes information with other entities, private or commercial) to decide which address the user “meant” when they typed in something like “Camden”.

Google does a “best guess” based on popular searches or just what they think you mean, or some other obscure logic…. and sometimes they are wrong, at least for your search preference.  Example:


Is that “Camden, NJ, USA” or the Camden as in a Borough of London?  Turns out that even for users in the United States , the Search using Google’s mapping API decided you meant Camden, UK.

"Ok Google...but I don't have anything on my locations page " remotely near the UK. Could you give me a list of Camdens?"
“Ok Google…but I don’t have anything on my locations page ” remotely near the UK. Could you give me a list of Camdens?”

Several new settings are introduced in the Premier Plug-in that will help you influence “Google’s guess”.


PREMIER 4.3 Address Guessing
PREMIER 4.3 Address Guessing


Posted on

Tab Completion for Custom Commands

A lot of commands in Emacs take input from the minibuffer, the little one-line area at the bottom of the editor. When you are writing your own commands you will often make use of the same facility. In this article I want to show you one way of doing that which will provide tab completion for your custom functions.

I’m going to use a simple example out of my own dot Emacs file. This is the function that was in my last email, my function for opening org-mode log files. I keep one org-mode file for each project, in a log directory, split up by year. So I wanted a simple command I could bind to a key that would let me type in a project name and open the file. So I have this:

(defun open-project-log-file (project)
      "Opens a log file for a project."
      (interactive "sProject: ")
      (find-file (concat "~/Documents/Logs/2010/" project ".org")))

Then when I press C-H-x l I get the ‘Project:’ prompt in the minibuffer. I type in something like ‘Foo’, press Enter, and there’s my org-mode file.

This short example demonstrates the easiest way of getting a string of input in your commands: interactive. Emacs makes a distinction between functions which are called interactively, and those which are not. When you call a function non-interactively that means you are calling it from inside of Lisp code. If I wrote

(open-project-log-file "Foo")

then that is a non-interactive call. But when I run the command from my key-binding, or if I did M-x open-project-log-file, then that is an interactive call. When I do that Emacs looks at the ‘interactive’ form at the top of the function to figure out how to get the argument for the function.

We can use interactive in a couple of different ways. The simpliest is by giving it a string that describes how we want to prompt for and read in arguments. The parts of the string are separated by ‘
’ characters. The first character of each part tells Emacs what kind of input to read in. Then everything from that character until the next ‘
’ or end of string is the prompt.

So in the case of “sProject: “ that means to read in a string (‘s’) from the prompt ‘Project: ‘. Whatever I type in is assigned to the ‘project’ parameter of the function. Another example:

(defun interactive-example (foo bar baz)
      (interactive "bFoo: 
fBaz: ")

This example has three prompts, setting ‘foo’ to a buffer name (‘b’), ‘bar’ to the name of a function (‘a’), and ‘baz’ to the name of a file (‘f’). In all cases Emacs knows what we are wanting to read in and provides us with completion help. For example, it knows what buffers and files are open, and what functions exist, so we can tab-complete on all of these.

If you look at the documentation on interactive you will see that it accepts a large number of codes for defining your input. But they can’t cover everything. There comes a time when you’ll want to have tab-completion available for some known set of values. This is where completing-read comes into the picture.

Let’s say I want to redefine my log function so that Emacs will know which files I might be looking for. That is, what log files exist in my log directory? Easy way to find out:

(directory-files "~/Documents/Logs/2010/")

Returns all of the files in that directory as a list of strings. I can use that as my set of possible inputs. Whenever I open a log file, the file I want will always be in the list. So what I want is for Emacs to tab-complete based on the values in that list. The function completing-read does this exactly.

(completing-read "Project: "
                     (directory-files "~/Documents/Logs/2010/"))

This line of code will print out the ‘Project: ‘ prompt as usual and read in input from the minibuffer. The second argument is the ‘collection’, a list of strings which represent valid input values, and which Emacs can tab-complete on. This is the minimum needed to use completing-read. However, it takes six additional, optional arguments. If you want to restrict completion to a sub-set of those values, or allow input outside of that set, then you’ll need to pass values to those optional arguments. As always, C-h f is the fastest way to find this information.

So let’s look at a smarter version of open-project-log-file:

(defun open-project-log-file (project)
      "Opens a log file for a project."
        (completing-read "Project: " (directory-files "~/Documents/Logs/2010/"))))
      (find-file (concat "~/Documents/Logs/2010/" project)))

Here is an example of the other form of interactive: using Lisp code instead of strings. In this form, the code given to interactive needs to return a list of values that will be assigned to the function parameters. The easiest way to create a list in Lisp is with the ‘list’ function.

(list 10 20 (+ 100 1)) => ‘(10 20 101)

In my case, I’m just creating a list of one value, the result of completing-read.

The rest of the function is the same. But now when I run it and type ‘F’, I get the benefit of hitting Tab and having ‘’ show up in the minibuffer. If you are writing a custom command and can think of a way to define the set of inputs that function will take, even if it is incomplete, then you can use completing-read to get the benefits of tab-completion in your functions.

Posted on

Website Components

What is Your Website?

When building a website you need to determine what it is you want the website to accomplish. Is your website a simple brochure to introduce your company to a potential client? A tool for existing clients? A store to sell your wares?

There are many different types of websites to choose from, and you don’t have to choose just one. Like any project, the more options you choose the more expensive it will be. Building a one room cottage is going to involve a lot less time and money than building a 12,000 square foot mansion.

Components of a Website

There are various components that make up a typical website. The components range from 100% custom applications to “out of the box” components from various vendors. “Out of the box” components include both free applications that are provided by the Internet Community as well as paid commercial products.


A blog is a page, or group of pages, on a website that present short articles in chronological order. Most blogs are used for one way communication with the visitors to your website, often in the form of a weekly or daily commentary. Blogs are a great way to connect to the visitors of a website by keeping them informed of current events related to your business.

Various types of blog components are available that make it easy for the typical business owner to keep this part of the website updates. Once the blog component has been installed by your ever-friendly technical staff, you can start publishing your articles fairly easily.

Most blog systems only require that you know how to use your web browser. To publish an entry you simply surf to the “edit my blog” link your tech staff has provided for you, login, and start typing your article into an entry box. The blog software handles the formatting of the page, keeping the articles in order, and doing the general maintenance.

Most blog systems allow for extensive customization and extended features beyond the basic “post a new article” feature. Some features include the ability to put articles into various categories, tagging articles with keywords, or allowing commentary from website visitors.

Typical Implementation:

  • Pre-built blog systems are downloaded and installed on your server.
  • Some clients rent blog software and hosting from a software-as-a-service provider and link to their page at the blogging site.

Related Links:

Content Management System

A content management system manages the main part of your website. It provides an easy way for the business to add pages, update content on pages, delete pages, and move stuff around without the involvement of technical staff.

The benefit of a content management system is that the basic page layout (also known as the page template) is usually designed and installed by a web designer. Once the software and the template are installed on your server you then have control over the pages and paragraphs that appear on the site. Normally you will log in to a special web page on your site where you access a “control panel” for your pages. The control panel is where you add & delete pages and provides the links to edit the page content.

Typical Implementation:

  • Pre-built contents systems are downloaded and installed on your server.
  • Many clients opt for the software-as-a-service model from providers that include web hosting and the content management system in one package ensuring you have the latest updates at all times.

Related Links:


A forum is a section of a website that allows visitors to the site to communicate with each other via short articles known as posts. A typical forum is setup by the website owner with various sections representing categories of discussion that are pertinent to the website. Visitors to the website can both post a new question or comment or respond to a question or comment posted by another user. The postings and their responses tend to be grouped together in a way that represents a chronological dialog.

Forums are a great way to allow people interested in your business to share ideas, comments, how-to, and general knowledge related to your business. It often serves as a form of extended support for your client base where both your official support staff assists in answering questions alongside other members of the community that may be well versed about the intricacies of your business.

Typical Implementation:

  • Pre-built forum systems are downloaded and installed on your server.

Related Links:



A store allows users to buy items directly from your website. The variety of items that can be purchased online vary from downloadable software to physical goods to services. Your website becomes a simple way for people to pay for the items they are interested in. Stores can vary from something as simple as a form that collects credit card or other payment information to full fledged product displays with reviews and related information.

Online stores tend to be the most often customized part of a website and often requires the involvement of an experienced technical team. Business owners often desire a specific type of user experience when their clients are buying something from them. Most web software does not provide the desired features straight “out of the box”. Since a customer can be made or lost based on the store experience, it is often worth spending extra time and investment dollars in making sure this part of the website matches your expectations for the sales process.

Simple stores and shopping carts can be setup via a variety of online software-as-a-service providers. The advantage of these providers is a “hands off” approach to credit card storage, limiting your liability. The disadvantage is your are often unable to customize the presentation to meet the exact needs of your business.
Typical Implementation:

  • Large stores: Pre-built forum systems are downloaded and installed on your server.
  • Small stores: Software as a service, such as Yahoo Stores are often linked to the website.

Related Links:


Video clips are a large part of today’s Internet landscape. Most people surfing the web today expect more than just a static textual presentation from their favorite websites. Almost every type of business can benefit from the addition of short video segments presented on the website. The videos can be anything from a simple “introduction from your host” to instructional videos to pure entertainment.

Proper formatting and production of videos is as important as proper placement and implementation on your website. Selecting compatible formats that work across many different computers is important. One of the more common distribution formats in place today is the use of Flash video formats due the freely available and widely distributed flash viewer application provided by Adobe.

Typical Implementation:

  • Video content is formatted then uploaded to your web server
  • Web pages are tailored to present the video inline (middle of the page) or in a separate popup player window

Related Links:


A wiki is a section of a website that is often presented as a series of linked web pages. Unlike the main content of a website, the wiki pages are often kept separate as the content is typically edited by the visitors to the website. Wikis are collaborative documents where the entire user community shares in producing documentation for your product or services. Think of it as a sort of self-help guide written by the users.

The content of a Wiki does not need to be limited to help systems, but that is a common purpose. Wikis can also contain commentary, photos, links to other resources, or any other content that could appear on a standard website. The primary difference is that Wikis usually don’t have a central “controller” of the information. The concept is to allow the community to create content for your site.
Typical Implementation:

  • Most wikis are installed on your server using free downloads of the wiki software.

Related Links: