Lightspeed POS for WooCommerce

Please Note: this plugin does NOT integrate with Lightspeed Retail (X-series). It is specific to Lightspeed Retail (R-series).

WooCommerce Lightspeed POS allows you to integrate and import inventory from Lightspeed to WooCommerce and sync inventory across both systems.

This extension requires a Lightspeed Retail account. If you do not have one, you can sign up for a free Lightspeed trial account here.

Please Note: this plugin does NOT integrate with Lightpseed eComm. It is specific to Lightspeed Retail.

Installation

↑ Back to top
  1. Download the .zip file from your WooCommerce.com account.
  2. Go to: WordPress Admin > Plugins > Add New to upload the file you downloaded with Choose File.
  3. Activate the extension.

More information at: Installing and Managing Plugins.

Concept

↑ Back to top

Before we get started, here is a little theory to help you understand what kind of sync relationship this extension establishes.

The sync scenario:

↑ Back to top

It is helpful to know the difference between a 1-way and 2-way sync scenario. This extension sets up a 1-way sync scenario. What does that entail? Here is a rough concept draft of it:

Initial Setup 1-way sync (available)

↑ Back to top
  • WooCommerce is empty, no products.
  • Lightspeed is full, many products.
  • Lightspeed fills WooCommerce with products. Initial Import (See next: Load Products from Lightspeed POS).
  • WooCommerce sells products and feeds inventory changes back to Lightspeed
  • Product management is done in Lightspeed for all values that are synced by the extension: Price, images etc. while WooCommerce provides the beautiful storefront.

This is what defines a 1-way sync scenario using this extension to sync Lightspeed with your WooCommerce store: Lightspeed overrules / manages WooCommerce product inventory while WooCommerce feeds selected info (inventory, sku, descriptions, etc…) back to it. We try to depict this in our little header graphic.

Due to the fact that Lightspeed is the deciding factor in this system, we call Lightspeed the “Source of Truth”.

Please Note: For the initial setup, it is possible to have either Lightspeed full and WooCommerce empty or WooCommerce full and Lightspeed empty.

However, we strongly recommend starting with Lightspeed because the plugin can bulk import from Lightspeed to WooCommerce.

The whole scenario is not a 2-way sync in a way that:

Initial Setup 2-way sync (not available)

↑ Back to top
  • WooCommerce has some products
  • Lightspeed has some products
  • WooCommerce and Lightspeed get scanned and compared upon each sync or import request
  • Products that match on both sides get linked to each other
  • Products missing on either side get copied over

With that in mind, let’s begin with the initial import.

Setup

↑ Back to top
Basic video tutorial on how to get started

Enable your Subscription – Connect to WooCommerce.com

↑ Back to top

It is important to keep this plugin up to date as there are constant updates and fixes that get released with each new version. In order to receive updates, connect your site to WooCommerce.com by navigating to WooCommerce -> “My Subscriptions”.

More details on how to do this here: https://woocommerce.com/document/managing-woocommerce-com-subscriptions/

Authorize with Lightspeed

↑ Back to top

1. Go to: Lightspeed > Settings > Store Settings.

2. Click the Connect to Lightspeed button:

WooCommerce Lightspeed POS settings page

3. Log into Lightspeed, and click the Authorize Application button when redirected to the Lightspeed Retail page:

Lightspeed Authorization Screen

Please Note: The employee used to authorize Lightspeed must have inventory privileges

4. Confirm your site when the WooCommerce API connector requests it:

WooThemes API Connector

Once confirmed, you’ll be redirected to your site. If authorization completed successfully, a success message and your store name will appear on the Settings page:

Lighspeed Authorization Success

Enable stock management

↑ Back to top

Under WooCommerce -> Settings -> Products -> Inventory, we highly recommend you have “Enable stock management” enabled. This setting allows WooCommerce to automatically adjust inventory as customers make orders, cancel them, etc. The plugin leverages WooCommerce’s actions and hooks around these types of behaviors to know when to trigger sync events.

Configuration

↑ Back to top

Store Settings

↑ Back to top

Primary Inventory Store Configuration

You must set one primary inventory source for WooCommerce.

  1. Tick the primary inventory store – this is the store that the plugin will use to sync inventory to and from.
  2. Save changes.
WooCommerce by default does not support multiple inventory locations. If you have multiple Lightspeed stores, you must designate one of them as your “primary inventory” store that the plugin will use to read inventory values from as well as sync inventory values to.

Report Errors

Enabling Report Errors will send errors related to the plugin to the Woocommerce Lightspeed Integration development team. This allows us to improve the plugin and provide you with faster service. We do not collect any personal information and errors will be removed from our system within a maximum of 60 days.

Woo Product Sync

↑ Back to top

On the Woo Product Sync tab, you can designate the default status of the product upon import:

Product status on import

This will apply to all products on import. Variation products will inherit the status from their parent matrix/variable product. This means that even if the setting is set to “Draft”, newly added variation products will go straight to a “Publish” status if their parent product is already live and published. Also note that upon installation the default status is set to “Draft”.

SKU Strategy

When importing a Lightspeed product in WooComerce, you can select which SKU value you would like to use. The options are:

  1. System SKU
  2. Custom SKU
  3. Manufacturer’s SKU
  4. Plugin Default – see here for more info

If the value is empty in Lightspeed, it will come in as empty in WooCommerce.

Image Compression Strategy

The plugin uses Cloudinary to download images from Lightspeed. The options are low, better (eco), or best. Plugin default will use the eco setting which results in smaller files of slightly lower visual quality.

Set empty Sale Price on zero

If the Lightspeed Sale Price is $0.00, this setting will set the Sale Price of the corresponding WooCommerce product to an empty value.

Selective sync for WooCommerce products

You can select which product properties should get updated for WooCommerce when pulling data from Lightspeed

On the initial import of a Lightspeed product into WooCommerce, all the product properties will be present, however on subsequent updates the Selective Sync settings allow you, for example, to only have “Stock Quantity” and “Regular Price” and “Sale Price” be synced from Lightspeed on a sync event. All other properties will not be overwritten! This can be useful if you want to publish products in WooCommerce without the sync event overwriting images, descriptions, etc that you may have setup in WooCommerce but not Lightspeed.

The properties you can selectively sync are:

  • Name – in Lightspeed, this is the description. In Woo, it will be the product title.
  • SKU – in Lightspeed, you have 3 different options for SKU – Custom SKU,  Manufacturer’s SKU or System SKU – the plugin use the first SKU value it can find in that order.
  • Regular Price – the “Default” price field in Lightspeed
  • Sale Price – You will have to create new “Sale” Price Level in Lightspeed read this section on how to set this up.
  • Stock Quantity – the value “In Stock” value under the Details tab in Lightspeed
  • Image – all of the images set up in Lightspeed for a particular product will be downloaded to WooCommerce. The first image in your Lightspeed gallery will be set as the featured image in WooCommerce. If it is a variable/matrix product, then the parent product’s first image in the gallery will be used as the featured image.
  • Attributes – If the product is a matrix product, then the plugin will try to convert these attributes into product attribute taxonomy terms in WooCommerce, otherwise if this is unchecked, the plugin will use custom attributes by default.
  • Tags New tags will be added but old tags will not be removed.
Note: The “Legacy Web Store” fields pertain to a legacy Lightspeed feature – see FAQ.

Prune Deleted Variations

When you click on the “Manual Update via Lightspeed” button a product, this setting will tell the plugin to automatically delete any variations that have been deleted in Lightspeed for matrix products. In WooCommerce, this translates to automatically deleting variations in a variable product.

Note: in Lightspeed – the way to “delete” a variation is by going to the Matrix’s “Setup” page and clicking the “X” button to the right of the edit button.

Ignore Archived Lightspeed Products

You can tell the plugin to ignore archived items upon loading them into the import table. This is a setting in the Lightspeed Settings page:

This means all of your archived items in Lightspeed will not show up in the Lightspeed import table in WooCommerce.

Lightspeed Product Sync

↑ Back to top

Selective sync for Lightspeed Products

Once a product is imported from Lightspeed into WooCommerce, you can select which properties of a WooCommerce product should sync back to Lightspeed when the product is updated in WooCommerce. This means the properties in Lightspeed will be overwritten once the update is complete. Examples of updates are:

  • Updating a product in the Admin dashboard (includes all types: variations, simple or variable)
  • Bulk updates on the Product Admin page
  • Any stock quantity changes, such as:
    • Stock quantity reductions after checkout
    • Stock quantity increase after an order refund
    • Stock quantity increase after an order cancellation
Note: that selective sync settings will apply globally to all WooCommerce products that are being actively synced!

Background Jobs

↑ Back to top
Note: background jobs are run via Action Scheduler. If you want to run the job manually, you can go to Tools -> Scheduled Actions, click on the “Pending” option at the top, and click on the “run” link under the job.
Warning: Other plugins that utilize Action Scheduler can block these jobs from getting triggered. If you see a notification under Tools -> Action Scheduler that says “Maximum simultaneous queues already in progress (1 queue). No additional queues will begin processing until the current queues are complete“, then this might mean a job is stuck in the “Processing” state and is not letting other jobs – like the ones that this plugin relies on – from getting triggered. The best thing to do here is disable the plugin that is causing the issue, cancel the job that is stuck in processing, and reach out to the plugin author to have them look into it.

You can enable/disable three background jobs and set them to run on intervals ranging from 5 seconds to 1 hour:

Lightspeed Product Changes

Looks at the timestamp field to determine which products were recently modified in Lightspeed. “Recently modified” means changes to:

  • Inventory
  • SKU/Description/Pricing
  • Images

The plugin will look at all of the properties that are checked off in the Selective Sync for WooCommerce Products settings and update those properties for the associated WooCommerce product.

New Lightspeed Products

Looks for newly created Lightspeed products. When it finds new products, it will inform you with a notice:

If the product is a newly created variation, it will automatically add that variation to the associated WooCommerce variable product.

Action after auto-loading products

If the “New Lightspeed products” job is enabled, then you will also have the option to select what action to take after a product is auto-loaded. You have three options:

  • Loaded into the Product Importer – Products will be loaded in to the product importer but not imported to WooCommerce.
  • Imported into WooCommerce, but do not link – Import the auto-loaded Lightspeed Product into WooCommerce – but do not actively sync it.
  • Imported & linked with Woo – Import the auto-loaded Lightspeed Product into WooCommerce –  and actively sync it.
Note: new products are added to the Action Scheduler queue and will not be imported immediately. Please be patient and wait for the Action Scheduler to process the queue!
Note: when auto-loading matrix products, the matrix “parent” product needs to have at least one variation (child) product in order for the auto-loading event to pick up the matrix “parent” product and have it displayed in the Lightspeed import table.

Lightspeed Product Attribute Sets

Looks for newly created product attribute sets. Automatically creates new product attributes in WooCommerce under Products -> Attributes.

Please Note: Lightspeed uses a “leaky bucket” algorithm to throttle requests sent to their API. Scheduling polling jobs to run too frequently can cause requests to be rejected by the Lightspeed API.

Usage

↑ Back to top

Product Importer

↑ Back to top

Under Lightspeed -> Product Importer you can import and link Lightspeed products with your WooCommerce store.

The Product Importer is a staging platform for managing products from Lightspeed. The state of a product in the Importer represents the state of the product in Lightspeed.

Please Note: If you would are planning to use categories from Lightspeed, we recommend importing categories before importing your products.

Below are steps on how to use the Product Importer.

1. Load Products into the Product Importer

To import Lightspeed products into WooCommerce, you first have to load products into the Product Importer.

There are two ways to load products into the importer: Searching Lightspeed for specific products or Bulk Load all of your Lightspeed products.

Searching Lightspeed for specific products

Click on the “Search Lightspeed” button on the Lightspeed Importer page:

After clicking on “Search Lightspeed” a modal will pop up where you can search for Single or Matrix products:

The “Search Lightspeed” modal allows you to perform a real-time search of Lightspeed products

Tick the products you want to load into the Importer and click “Apply” at the top left of the results table. The products should then load up in your Importer.

Bulk Load all of your Lightspeed products

Click on the “Load Products from Lightspeed”:

Bulk Load all of your Lightspeed Products into the Product Importer

After clicking on “Load Products from Lightspeed” you will see a spinner showing you the progress around loading all your Lightspeed products into the Importer:

Importing all products can take time, depending on how many you have. Do not close the browser window until complete, or you need to start over.

Once all of your products have been loaded, the spinner will disappear and the page will refresh and show your products.

2. Import & Link Lightspeed Products with WooCommerce

Once products are loaded from Lightspeed POS, your screen should populated a table with products. For example:

WooCommerce LightSpeed POS Import Page with LightSpeed Products
WooCommerce Lightspeed POS Import Page with Products

There are two actions that can be performed on products loaded from Lightspeed:

  • Import & Link with Woo – Imports the Lightspeed product into WooCommerce and then links it with Lightspeed. What does this mean? Your product is now available in WooCommerce >> Products. It is published and visible in the front end. Also a sync link relationship is now established. The WooCommerce product and it’s Lightspeed source product are now linked to each other. The extension installs an Action Scheduler job that runs every five seconds, to ensure that items with established sync links are added to the sync list. Products are checked against Lightspeed for any changes every five seconds and additionally on these events.
  • Remove – Removes the products from the Product Importer table. You can re-add this product by using the “Search Lightspeed” button in case you removed it by accident.

Once products are loaded into the importer table, they can be bulk imported using the check boxes and “Bulk actions” dropdown menu. Select “Import & Link with Woo” and then click “Apply.”

Note: Mistakes happen. We recommend to keep frequent database updates, so you can rollback when you synced one time too much. Open a support ticket if you need assistance with this.
Warning: after importing products in WooCommerce, state changes like merging products do not translate well into WooCommerce. If you need to merge products in Lightspeed, we recommend deleting the associated products in Woo and then importing the new ones.

For imported products, the actions that can be performed are different:

  • Edit – Redirects you to the associated WooCommerce edit product page.
  • Update via Lightspeed – Since the product is already imported, this will perform a manual pull from Lightspeed and update the product.

Once a product is imported, it can only be removed from the importer table after the product has been deleted and removed from the trash.

Please Note: Archiving a product in Lightspeed will result in the inventory being set to 0 in WooCommcerce.

Matrix/variable product support

↑ Back to top

In Lightspeed, “Matrix Products” are equivalent to WooCommerce’s “Variable Products“. We recommend you read the documentation on both platforms before using this plugin because these concepts take some time to learn. Both of them.

On the Lightspeed page, Matrix items have a “stacked” look, which is different from single items. It displayed a “-” for the SKU and inventory columns. Importing and syncing Matrix items is the same as importing single items.

Note: While Lightspeed counts each Matrix item as one separate item, WooCommerce does not. It bundles together variable products as one thus the product count in WooCommerce and Lightspeed will be different if you use matrix products.

Importing Matrix/variable products

↑ Back to top

When importing a Matrix product from Lightspeed into WooCommerce, a new variable product is created and the following properties are downloaded and automatically generated:

Syncing with Matrix items is straightforward. Whenever inventory is set for variation items, it pushes that data to Lightspeed. Also, every five seconds a sync job will pick up on any changes made to variations in Lightspeed and then proceed to update the variations in WooCommerce.

Note: The plugin will automatically set the stock status of a variation product to “In stock” if the inventory is greater than zero.

Clear All Loaded Products

↑ Back to top

Clears out all loaded Lightspeed product data from the database – think of this as starting with a clean slate. This will remove all relationships between products in Lightspeed and WooCommerce but will not delete products in either.

Careful! This will destroy any sync relationships set up with existing WooCommerce products!

Categories

↑ Back to top

WooCommerce Lightspeed POS also allows you to import product categories with one click. Go to your Lightspeed settings located at Lightspeed >> Settings and click on the “Categories” tab.

Note:When setting up your categories do keep in mind that this is a one time import. Categories are not synced continuously nor are they removed in your WooCommerce store when they are removed in your Lightspeed. The “Delete Category Cache” button will clear out the Lightspeed categories stored in the database and allow you to re-import them. Deleting the cache will not remove categories from products or from the WooCommerce categories table.
Subcategories
Subcategories that share the same parent category (so called sibling categories) must have unique category names.

While Lightspeed allows sibling categories to have identical names, WordPress does not. In WordPress each slug (URL path) must be unique. Make sure that subcategories that share the same parent all have unique names.

Remove “Uncategorized” category

The plugin will attempt to remove the “Uncategorized” Woo category when importing a product from Lightspeed. If the product that’s being imported does not have any categories associated with it, then it will still apply the “Uncategorized” category since all products in Woo require to be part of at least one category.

Tags

↑ Back to top

Tags are added if they are selected in the selective sync tabs.

Old or deleted Tags/Categories in Lightspeed

↑ Back to top

Due to the nature of this import, product categories and tags are only applied not removed. The sync does add active categories to products, but so far it does not remove obsolete ones, when you remove them on the Lightspeed side.

Create Products from WooCommerce to Lightspeed POS

↑ Back to top

When using this extension you should initially create your products in Lightspeed and then import them into WooCommerce. However you can send WooCommerce products that are already created and missing on the Lightspeed side to Lightspeed from the product detail page as a one-time initial setup step.

To do this, click the Create this product in Lightspeed button in the Lightspeed Settings meta box on the right side:

This creates the product in Lightspeed with the following data points sent over:

  • SKU – this will show up under the “Custom SKU” field in Lightspeed
  • Images (gallery and single images are supported)
  • Inventory
  • Price – regular price and sale price are supported

After this the sync relationship defaults to Lightspeed being the source of truth. The WooCommerce product will not continue to send these values from WooCommerce to Lightspeed but will be managed by the Lightspeed side as long as the sync link is active.

Note: The Lightspeed API only allows a max of 3 attributes for matrix items. If you are trying to sync over a WooCommerce product with more than 3 attributes, the plugin returns an error. We are still pondering over this. Developers, if you have any feedback we would love to hear it.

Manual Sync via Lightspeed

↑ Back to top

You can trigger a manual product sync by either using the Product Importer and using the “Update via Lightspeed” row action there:

Or by using the “Manual Update via Lightspeed” button located in the sidebar with each single product view in the WooCommerce backend.

Action Scheduler Jobs

↑ Back to top

Three recurring action scheduler jobs will be added and run on the selected intervals once the plugin is active:

  1. wclsi_poll – checks for any changes in Lightspeed items such as inventory changes, image updates, and other generic updates like description changes.
  2. check_for_new_ls_prods – checks for newly created Lightspeed items.
  3. wclsi_poll_ls_attribute_sets – checks for new product attributes.

You can trigger these jobs manually whenever you’d like by going to Tools -> Scheduled Actions and click on the “Pending” category:

WooCommerce Lightspeed POS Action Scheduler Jobs
WooCommerce Lightspeed POS Action Scheduler Jobs

Relinking

↑ Back to top

Sometimes a WooCommerce product may lose its link to its corresponding Lightspeed product for various reason (e.g. a user error caused the Lightspeed product to be deleted from the Lightspeed import table).

The “Relink with Lightspeed” button re-establishes this link by looking up the Lightspeed product based off the SKU value using the following logic: if the Lightspeed product already exists in the Lightspeed import table, then it will try to re-establish the link there first, otherwise it will make an API call to Lightspeed and see if there are any products that match the SKU. If there is a match, then it will try and re-establish the link that way.

Relinking WooCommerce Products and Lightspeed Products

The “Relink with Lightspeed” button is located under the “Lightspeed Settings” metabox on the product page.

FAQ

↑ Back to top

Sync triggers

↑ Back to top

Products that are ticked to be synced will automatically trigger an inventory check with Lightspeed during the following events:

  • During a Polling Event.
  • Whenever a product is saved.
  • Before a customer checks out.

On the final step before checkout a last check is triggered. If the Lightspeed inventory is zero then the checkout process will be halted and an “out of stock” error should be displayed to your customer. If the quantity on the attempted order is greater than the quantity on hand, an error will also show saying there is not enough inventory.

Inventory changes in WooCommerce are also pushed to Lightspeed. For example, whenever an order is complete or inventory is added to a product, those changes are made in Lightspeed.

How is SKU synced?

↑ Back to top

If under the SKU Strategy setting you have the “Plugin Default” option selected, then the plugin will look at 3 SKU values in the following order:

  1. CustomSKU
  2. Manufacturer SKU
  3. System SKU

This means that if you have a value in CustomSKU, it will grab that one first, otherwise if that’s empty, it will use the Manufacturer SKU value, and lastly it will resort to the System SKU if both Custom SKU and Manufacturer SKU are empty.

Some or all images are missing from my WooCommerce products

↑ Back to top

WordPress’ internal image processing tools can get held up and time out on large images. We have found that images that are less than 2MB with width under 2000px and height under 2000px are usually safe.

Fatal PHP error Uncaught Error: Call to a member function set_status () on null

↑ Back to top

If you see this error in your error logs or after the “Check for new Lightspeed Products” background job has run, then this means one (or more) of your Lightspeed products that was initially loaded as a single item was merged or changed to a variation product in Lightspeed, and it now is part of a matrix product. This means when it was first loaded to your Woo site, it had an “itemMatrixId” of 0. It now has a non-zero value, which means that plugin can’t find it since the plugin tries to find products based on both itemId AND itemMatrixId.

The solution here would be to try to find the culprit product either through logs or querying your database (or both) and deleting it from the Lightspeed Import Table or from your database.

E_ERROR

↑ Back to top

That is happening because one of your Lightspeed Matrix Attribute Terms is on the WordPress reserved list. You can resolve this by going to your Lightspeed account -> Inventory -> Matrix Attribute Sets and finding the term and changing it.

WordPress Reserved Terms

action
attachment
attachment_id
author
author_name
calendar
cat
category
category_and
categoryin
categorynot_in
category_name
comments_per_page
comments_popup
custom
customize_messenger_channel
customized
cpage
day
debug
embed
error
exact
feed
fields
hour
link_category
m
minute
monthnum
more
name
nav_menu
nonce
nopaging
offset
order
orderby
p
page
page_id
paged
pagename
pb
perm
post
postin
postnot_in
post_format
post_mime_type
post_status
post_tag
post_type
posts
posts_per_archive_page
posts_per_page
preview
robots
s
search
second
sentence
showposts
static
status
subpost
subpost_id
tag
tagand
tagin
tagnot_in
tag_id
tag_slugand
tag_slug
_in
taxonomy
tb
term
terms
theme
title
type
types
w
withcomments
withoutcomments
year

Warning: a sync update for Lightspeed Product ‘ … ‘ has failed. The associated WooCommerce product is ‘ … ‘ We recommend to manually verify inventory levels and product properties in Lightspeed are up to date with what is set in WooCommerce.

↑ Back to top

If you see the notice above, it means a sync from WooCommerce to Lightspeed has failed. This can happen for a number of reasons, a common one is bulk updating products in the Products page. We do not recommend to do that as this can trigger a series of update calls to the Lightspeed API which will ultimately trigger a 429 (Too Many Requests) error. Other reasons could be that your store is incredibly busy and the large volume of orders and customer activity may also cause 429 errors.

Lightspeed uses a “leaky bucket” algorithm to throttle requests sent to their API. Generally speaking, they ignore requests if they are coming through at more than 1 per second. The plugin will check this “bucket level” and if it is near the limit where it may have the request ignored – the plugin will re-schedule the sync event via the action scheduler and try again. If it still fails after rescheduling 20 times – this error is displayed for the user to let you know that it didn’t work (rather than Lightspeed just ignoring the request and you not being notified). If you save the product again in WooCommerce, another sync event will be triggered and it will attempt to sync the data again.

Fatal error: Uncaught RuntimeException: Error saving action: ActionScheduler_Action::$args too long. To ensure the args column can be indexed, action args should not be more than 8000 characters when encoded as JSON

↑ Back to top

The action scheduler in WooCommerce accepts arguments only up to 8000 characters when encoded as JSON. This can become an issue if you are using the “long description” with an exceptionally long description.

The character limit includes all of the characters in the JSON object, not just the individual fields so it is important to keep your total characters well under the 8000 character limit.

Matrix variations are showing up as single products in WooCommerce

↑ Back to top

This can happen after a matrix product’s attributes in Lightspeed were changed which results in orphaned variation products. The best thing to do here is to archive the products in Lightspeed and delete them in WooCommerce (both the import Woo products as well as the ones in the Lightspeed Import Table page) and then re-load the products in Lightspeed Import Table page. You should then see just one matrix product with the variations consolidated into the “parent” product.

My product is “synced” but nothing is updating

↑ Back to top

This can happen if you archive a product in Lightspeed and then create a similar or “new” product to replace it. The plugin uses an internal ID to keep track of products and does not strictly sync on the SKU value. Even after archiving the original product, the plugin will still sync to that specific product even though it is archived. The best work-around for this is to either:

  1. Delete the Woo product and the record in the Lightspeed Import Page, re-load products, and import the “new” product that is not archived
  2. If you are using CustomSKU – delete this value (or slightly change it) on the archived product, for example you can add a “_archived” suffix “SKU1234_ARCHIVED” – then delete the product record in the Lightspeed Import Table in Woo. Finally, go back to the product in Woo and click on “Re-link with Lightspeed”. This will force the plugin to search for the product in Lightspeed using the SKU value in the Woo product and pull down data for the “new” product and set up a sync relationship.

We also recommend checking your wclsi error logs and reaching out to support if the above solution does not match you problem.

I merged a product in Lightspeed and now it’s not syncing

↑ Back to top

Unfortunately the plugin does not support merging products as WooCommerce does not allow this. The best thing to do here is delete the Woo product and re-import or update the “parent” product the original product was merged with / into.

All products are added to the “Uncategorized Category”

↑ Back to top

The “uncategorized” is set because WordPress is taxonomy based and everything in WordPress requires a category- you can set the default category from uncategorized to something else in WordPress settings, read more here https://www.wpbeginner.com/beginners-guide/rename-the-uncategorized-category/.

Also please see the “Remove Uncategorized category” setting!

Can we sync / import products selectively for example by category only?

↑ Back to top

Yes! You can search by category on the import page after you’ve loaded all your Lightspeed products, and then use the “Bulk” actions menu to import those products.

Orders are not syncing inventory – the Order Thank You is stuck showing “Processing Products …”

↑ Back to top

Please upgrade to v1.9.0 or above! The newer versions of the plugin no longer use client side JavaScript to sync order inventory, and instead relies on Action Scheduler queueing.

Lightspeed API Error – 403 Not Authorized – “To continue, please complete the CAPTCHA below”

↑ Back to top

This error can happen if your Lightspeed backend is locked via a pin and the account you used to connect your Lightspeed to WooCommerce falls under this restriction. Either remove the pin or use your full Lightspeed account for connecting your Lightspeed to your WooCommerce store.

Another reason this error can happen is due to Lightspeed’s Cloudflare firewall. We would recommend to read this article and coordinate with your hosting company and Cloudflare to resolve the 403 error.

Lightspeed API Error –  400 Cannot set attribute1 on an Item with ItemAttributeSet type Size

This is a bug in the Lightspeed API. Here is a response from the Lightspeed API support team explaining the bug in more detail:

We encounter this issue if the Matrix attributes were modified from a 2 attributes set to just one. Our developers are aware of this and they are working on a solution.

As long as your inventory is syncing, you can probably just ignore it.

What about fields like short and long description and shipping dimensions?

↑ Back to top

Lightspeed used to offer these fields in their free Web Store feature. This has been replaced by “eCom”. While these fields are still available to you upon request via Lightspeed support, we have confirmation that these might be removed in the feature. We recommend using WooCommerce only for entering your short and long description and measurements.

The error “curl error 6 could not resolve api.merchantos.com” or “ERROR: BAD LIGHTSPEED REQUEST: cURL error 28: Operation timed out” frequently come up.

↑ Back to top

This is most likely a networking issue and something that your hosting provider should be able to resolve for you see this blog post.

“Lightspeed API Error – 429 Rate Limit Exceeded: Please decrease your request volume.

↑ Back to top

Lightspeed uses a “leaky bucket” algorithm to throttle requests sent to their API. Generally speaking, they ignore requests if they are coming through at more than 1 per second. The plugin will check this “bucket level” and if it is near the limit where it may have the request ignored – the plugin will re-schedule the sync event via the action scheduler and try again. If it still fails after rescheduling 20 times – this error is displayed for the user to let you know that it didn’t work (rather than Lightspeed just ignoring the request and you not being notified). If you save the product again in WooCommerce, another sync event will be triggered and it will attempt to sync the data again.

If you see the error “Lightspeed API Error – 429 Rate Limit Exceeded: Please decrease your request volume” than it is probably because either:

  • You have been using “manual sync” a bit too much in which case, slow down please ;).
  • Or you are syncing variable products with a lot of images and variations, which makes it difficult for our script to distribute your stores API calls evenly. In this case we recommend to remove the images and try again – image uploads are expensive API calls!

My Lightspeed is slow, not responding, not connecting.

If you experience continuous Lightspeed performance problem, it might be a good idea to also check the status of Lightspeed.

Do WooCommerce backorders get synced?

WooCommerce Backorders are not supported at the moment. We are investigating whether Lightspeed is able to handle this and if yes how we can implement this.

How is the price synced?

↑ Back to top

The WooCommerce product price is controlled and managed by what you set in Lightspeed as “Default” price. “Sale” prices can be synced as well. However be careful when activating the sale price on the Lightspeed side. Lightspeed will automatically fill in all “Sale” price values with what you set for “Default” prices. This means that on sync with WooCommerce, all of your WooCommerce products will have their “Sale” price value set. Prior sale prices you set in WooCommerce will be overwritten when you sync. This will not trigger them to go on sale in WooCommerce, but your WooCommerce sale prices will all get overwritten.

Lightspeed API Error – 404 Unknown PriceLevel Sale

↑ Back to top

Lightspeed by default does not have a Sale Price. You will have to set this up in order to sync these values back and forth between WooCommerce and Lightspeed.

In Lightspeed go to Settings >> Pricing levels.

Click on “New Pricing Level” and name it “Sale”. Exactly “Sale”.
Not “sale”, not “sales” or “Sales”. Please take note of our warning above for “How is the price synced?

The product count / amount in WooCommerce and Lightspeed are different.

↑ Back to top

While Lightspeed counts each Matrix item as one separate item, WooCommerce does not. It bundles together variable products as one thus the product count in WooCommerce and Lightspeed will be different if you use matrix products.

A previously imported product no longer shows up in the Lightspeed Import Page.

For this we recommend deleting the WooCommerce product instance and removing it from the recycle bin. After this simply re-import from Lightspeed.

Does WooCommerce Lightspeed support [fill in plugin name]?

↑ Back to top

Not at the moment. Please see our section on integrations for more information.

The plugin is not syncing eComm fields like short description, long description, and dimensions

↑ Back to top

Short description, long description, and product dimensions will not get synced over unless you have the legacy “Web Store” feature enabled in Lightspeed. If you do have it enabled, you will find these fields under the “Web Store” section under the product page:

As far as we know, eComm images will not automatically get synced over to Retail, we recommend to reach out to Lightspeed support and see if there is an easy way to move product images (and maybe other properties) from eComm to Retail.

How do you update product photos?

The photos are pulled in from Lightspeed upon import. You can change them on WooCommerce but they won’t synchronize back to Lightspeed because of the nature of the sync scenario. However if you change them on Lightspeed and select the “Update” action, then photos should be updated on your WooCommerce store.

How can I update product categories?

Right now category updates are only imported once. We currently do not support category updates but this feature is on our roadmap.

Does this integration support multiple Lightspeed stores?

↑ Back to top

You can import products from different stores, but inventory syncing will only occur across one store -the “Primary Inventory” store that is selected when configuring the plugin.

Does this work with Lightspeed Retail? How about other versions?

↑ Back to top

Yes, this integration works with the Retail cloud-based product only. It does not work with Lightspeed Onsite (server based) or Lightspeed Restaurant (does not integrate with WooCommerce). Additionally this extension does not support Lightspeed eCom, all eCom features must be unavailable.

No. This feature is not supported. Please import or create the product in WooCommerce anew instead.

Does Lightspeed connect and sync automatically to the same WooCommerce product upon import if it is already created in my WooCommerce store?

No. Lightspeed will not automatically detect the “right” product in your WooCommerce store because of the nature of a 1-way-sync scenario. Upon import a new WooCommerce product will be created. Instead you should either delete the WooCommerce product and then import & sync from Lightspeed.

What happens when there’s a change (e.g., stock) in my Lightspeed account?

Unfortunately Lightspeed’s integration does not send notifications whenever there are changes in a Lightspeed account, so there’s no way for your WooCommerce store to know immediately if a product’s data has changed, or if a Lightspeed store has been deleted or a new one added, for example.

However, this plugin has implemented polling (constant checks) against Lightspeed’s API to make sure that critical values such as inventory are up to date before a customer checks out on your WooCommerce store.

Do sales and WooCommerce order data get synced to Lightspeed?

No, this extension sync product and inventory data only. WooCommerce order data is currently not supported but it is something we hope to implement in the near future!

We have released a beta version of our sales syncing feature. Please be aware that it may not work as intended.

What’s the best way to request a feature for this plugin?

You can send us your feature request via our WooCommerce Lightspeed Ideas Board Section.  Our developer checks there frequently and popular requests get turned into features from time to time, so do drop us a line. We also try to monitor and reply to as many threads as we can.

Please do keep in mind though that customizations are not supported and your idea can take a long time to implement. If you need a customization fast, we encourage you to hire a WooExpert.

What’s the best way to test this plugin?

↑ Back to top

Lightspeed allows you to test their Retail POS offering for free via a 14-day trial. We recommend to sign up for the free trial in conjunction with setting up a test WooCommerce store to see if this plugin meets your business needs.

Are there any tutorials for Lightspeed available?

Sure, apart from their documentation found at: https://retail-support.lightspeedhq.com/hc/en-us (pick Getting Started or Retail Desktop to begin) – There are also some videos on Vimeo available. They are:

What is the maximum amount of action the auto sync can perform? Can I change 1000 items at once?

↑ Back to top

The auto-sync feature can handle 100 changes every 5 seconds as a maximum workload. If you need to batch edit a lot of items, you need to break it down into steps of 100 (better make that 95 for good measure). Keep in mind that each edit count as one action. Editing a handful of variation in matrix items will therefore trigger multiple actions in the amount of your total single edits.

How do I fix a duplicate product ID or SKU?

↑ Back to top

WooCommerce has a couple of methods in place to make sure, all SKU’s are unique but this can fail sometimes. Especially multi language plugins may  circumvent this on purpose. An example error message will look similar to this WordPress database error: [Duplicate entry '1234' for key 'item_id']

Here is a plugin that you can try to remove duplicate SKU values from your database. As always do take a database backup before running such methods.

Another option is to change your SKU strategy in WordPress > Lightspeed > Settings > Woo Product Sync to system SKU.
This will use The system ID in Lightspeed to give your products unique IDs.

I have created all my products in WooCommerce already. Can I bulk import my products from WooCommerce to Lightspeed?

↑ Back to top

Our plugin is designed with Lightspeed as the source of truth. You can only bulk send products from Lightspeed to WooCommerce not the other way around. This is also to prevent overloading the API.
What you can do is to look into importing the products via CSV. That might be faster than manually creating the items.

Please note that items imported to Lightspeed via CSV will not automatically be linked to products in WooCommerce.

https://retail-support.lightspeedhq.com/hc/en-us/articles/115004937274-About-Importing
https://retail-support.lightspeedhq.com/hc/en-us/articles/115005142408-1-a-Understanding-the-import-file

Are refunds in WooCommerce synced to Lightspeed

Yes! After a refund restock, the plugin should update the inventory in Lightspeed.


Troubleshooting

↑ Back to top

Logs

↑ Back to top

Under WooCommerce -> Status -> Logs there are two log files that the plugin automatically generates for you and one that is generated if debugging is turned on:

wclsi-errors.log

This log captures exceptions/errors and is very helpful to check on the health status of the plugin.

wclsi-sync-events.log

Captures general sync data that is pulled and pushed to/from Lightspeed.

wclsi-debugger.log (only generated if debugging is turned on)

Captures data related to debugging such as bucket level, etc.

Database Structure

↑ Back to top

The following tables are installed upon activation (with wp_ being the prefix):

 wp_wclsi_items 
 wp_wclsi_item_attribute_sets 
 wp_wclsi_item_categories 
 wp_wclsi_item_e_commerce
 wp_wclsi_item_images 
 wp_wclsi_item_prices 
 wp_wclsi_item_shops

wp_wclsi_items stores most essential info such as:

  • id a general item id to identify a product within the WooCommerce Lightspeed plugin tables.
  • item_id the item id used by Lightspeed.
  • wc_prod_id the post id used by WooCommerce. NULL if product has not been imported to WooCommerce.
  • wclsi_import_date shows date and time of the import. NULL if not imported.
  • wclsi_last_sync_date shows date and time of the import. NULL if never synced.
  • wclsi_is_synced shows 1 if a product has an active sync link to Lightspeed from WooCommerce. NULL if product is not linked from WooCommerce to Lightspeed.
The “Last updated”: information on the WooCommerce Lightspeed import page pulls info from date and time info that is set in the Lightspeed account. Not from the local server, not from WordPress.
Developers: This makes querying datasets simpler. For example:
SELECT * FROM wp_wclsi_items WHERE wc_prod_id IS NULL
gives you all products in your WooCommerce store that are not linked to a Lightspeed product.

Software Requirements

These software settings are required to run WooCommerce Lightspeed without issues.

  • PHP 7.2 – 7.4
  • MySQL 5.6 or higher,
  • PHP Max Execution time of 300s or higher.

You can use this plugin: WP-Serverinfo to check your environment settings.

For editing PHP parameters, please see this blog post.

PHP Version 8 not supported (yet)

↑ Back to top

The plugin does not support PHP Versions 8+ … yet. This is because of the limitation WordPress imposes around unit testing. There is a hard requirement to use PHPUnit 7+ which only supports PHP versions up to PHP 7.3 (although it technically seems to work up to 7.4).

Once WordPress expands support to PHPUnit 8+ (which supports PHP versions >= 7.2), then we will explore supporting PHP versions 8+. If you want to follow WordPress’s progress on this, you can follow the open issue here: https://core.trac.wordpress.org/ticket/46149.

Current Release

See the changelog for full details.

If you have current issues please open a support ticket with us, to access the most current development version which fixes outstanding issues.

Versioning

↑ Back to top

As of September 22nd, 2021, our future versions will be numbered in the following way:

  • Format: 0.0.0
  • First number represents major feature releases.
  • Second number represents regular updates.
  • Third number represents patches.

Read before updating

↑ Back to top
  • The most important step is to take a full backup. You must be prepared to rollback using a backup. Test your rollback first, before you update! An untested backup might still leave you stranded.
  • Your sync links and all other data prior to the update will be preserved. However we recommend three important steps besides a backup: testing, testing, testing. If you need assistance, please open a support ticket with us and we will guide you through the update process.

Integrations

↑ Back to top

General

↑ Back to top

All releases of this plugin get tested thoroughly with the current WooCommerce and WordPress version at the time of the release. No other plugin combinations are tested, therefore you should not assume automatic integration with other plugins. Here is a list of missing integrations that are frequently requested:

Missing integrations

↑ Back to top
  • GoDaddys inhouse plugins seem to be not compatible with the upcoming 1.4.3 release, they must be disabled.
  • This extension is not WordPress Multisite compatible.
  • This extension does not support Windows server. Use on Windows on your own risk.
  • This extension does not support WPML.
  • This extension does not support Archive, Layaway or backorders.
  • This extension does not support custom taxonomies of any kind. For example: WooCommerce  Brands and Lightspeed Brands are not supported. We recommend to setup Brands as categories instead.
  • Multiple stores can be read but are not supported for syncing data. If you have multiple Lightspeed stores, you must designate one of them as your primary store that the plugin will use to read inventory values from as well as sync inventory values to.
  • This extension does not sync sales data. Only inventory changes are sent. WooCommerce order data is not sent over. (sales syncing beta released Nov. 2021)
  • Product Vendors  is not supported.
  • Lightspeed eCom is not supported.
  • Caching is not supported. Any Varnish, object or other cache must exclude all WooCommerce product pages, cart and checkout.

Filter and Action Hooks

↑ Back to top

Note: This is a Developer level section. If you are unfamiliar with code, filters and hooks, and resolving potential conflicts, select a WooExpert or Developer for assistance. We are unable to provide support for customizations under our  Support Policy.

Lightspeed POS has been extended to support filters and actions that you can hook into. This allows for better customization. For example: You want the Update action to only update the inventory field and not override other fields such as title and content.

Note that this requires some technical and coding knowledge. More at WooCommerce Lightspeed Hooks.

Questions & Support

Have a question before you buy? Please fill out this pre-sales form.

Already purchased and need some assistance? Get in touch the developer via the Help Desk

Use of your personal data
We and our partners process your personal data (such as browsing data, IP Addresses, cookie information, and other unique identifiers) based on your consent and/or our legitimate interest to optimize our website, marketing activities, and your user experience.