WooCommerce allows you to sell a variety of products online, however, there are some stores who like to sell their products in-store and retain the stock inventory using WooCommerce. This plugin allows you to take your WooCommerce stock inventory and set up an in-store Point of Sale system. This includes registers, outlets, product grids, receipt templates, cashiers and barcode generators.
Use the table of contents on the right hand side to navigate to your relevant section, otherwise please proceed to the next section on Installation.
Before you proceed with setting up your Point of Sale, it is important to note that this plugin is an extension to the WooCommerce plugin. The WooCommerce plugin is free and can be downloaded from the WordPress.org website here. You cannot use this plugin without WooCommerce.
This plugin does not allow you to create products and add them to WooCommerce, it works from the existing products database which is created through WooCommerce. You can add custom products with custom meta data and prices from the register, but they will not be saved for future use.
In order for the Point of Sale plugin to communicate with the WooCommerce database, it needs to use the REST API which is built inside WooCommerce. To enable the REST API: –
- Go to WooCommerce > Settings.
- Go to the API > General Options.
- Check the box beside Enable the REST API.
- Click on Save Changes.
To process the transactions and keep inventory as well as order data up to date, an internet connection is required. Whilst this plugin does use IndexedDB to download the products and make them offline, it can’t process the order until there is an internet connection.
We recommend you use Google Chrome, however, we’ve tested the plugin with Safari and Mozilla Firefox and it works just as good. The recommendation is to look for a browser that supports IndexedDB, this can be found here.
- Download the extension from your Envato downloads page.
- Go to Plugins > Add New > Upload and select the ZIP file you just downloaded.
- Click Install Now, and then click Activate.
- Go to Point of Sale > Registers and read the sections below to learn how to setup and configure your Point of Sale.
Updating the plugin has never been easier, simply go to the Plugins > WooCommerce Point of Sale > Check for updates. This will reload the page and if you go back to the plugin, you should see an update notification.
If the option above is not possible, you can follow the manual method below. Please note that if you delete the plugin, you will lose your data. However, you will not lose the orders placed.
- Download the latest version from your Envato downloads page.
- Extract the ZIP and ensure the folder containing the files of the plugin is ‘woocommerce-point-of-sale‘.
- Log in to the WordPress dashboard, go to Plugins > WooComemrce Point of Sale > Deactivate.
- Connect to your website via FTP and upload to the wp-content/plugins/ folder. Be sure to overwrite the old folder which contained your previous WooCommerce Point of Sale installation.
- Return in to the WordPress dashboard, go to Plugins > WooCommerce Point of Sale > Activate.
Setup & Configuration
Before setting up, it is important to understand how the configuration of the Registers, Outlets, Receipts and Product Grids integrate on your WooCommerce store. The diagram below will help you understand this process: –
As you can see, a Register cannot exist if there is no Outlet, Product Grid or Receipt Template. The process to successfully setting up your POS should be as follows: –
- Products (this should be through WooCommerce, click here for more information on how to add and manage products).
- Product Grids
The outlet is your physical store where you are going to sell your products. There is no restriction to how many outlets you can set up. It is important to be as detailed as you can when setting up your outlet as this information is printed and displayed and printed on your receipt.
The table above displays an overview of all the outlets configured. To delete an outlet, simply check the box of the outlet and click on Delete in the Bulk Actions menu. If the checkbox is disabled, this means that the outlet is currently assigned to a register. You will have to either assign the register to a different outlet or delete the register completely. You can see a count of the number of registers assigned to the outlet on the far right of the table.
The name of the outlet is used to identify the outlet when assigning registers, users and filtering orders. The address of the outlet can be used for tax calculation purposes.
Contact details are used to inform your customers on how to contact and enquire about their in-store purchase, these details can be used and displayed on the receipt.
Social details allows your customers to reach out to you via their social network. Currently, the Point of Sale only supports the Facebook and Twitter handles.
Go to Point of Sale > Receipts > Add New and follow the instructions below. On this page, there are two columns of meta boxes. On the left is the specific data that you would like to be displayed and on the right is the preview of the receipt as well as an option to upload a logo to be displayed on the receipt.
The preview changes as you configure the options to the left. There will be information taken from the logged in user to display how it would look like if you served the order, this is dynamic information and so would not be shown on the real receipt.
[square brackets]represent the data from the order such as date, time and register name.
- Receipt Name – this is to identify the receipt when configuring it with the register.
- Receipt Title – enter the text of the title as you want it to appear on the receipt.
- Print Outlet Address – check this box to print the outlet address.
- Print Outlet Contact Details – check this box to print the outlet contact details.
- Telephone Label – enter the text for the label of the telephone field.
- Fax Label – enter the text for the label of the fax field.
- Email Label – enter the text for the label of the email field.
- Website Label – enter the text for the label of the website field.
- Print Tax Number – check this box if you’d like to include the tax number of your company in the receipt. This number is taken from the tax number field which is filled when creating a register.
- Tax Number Label – enter the text for the label of the tax number field.
- Order Number Label – enter the text for the label of the order number field.
- Print Order Date – check this box if you’d like the order date to be printed on the receipt.
- Order Date Label – enter the text for the label of the order date field.
- Date Format – select the order date format which is displayed on the receipt.
- Print Server – check this box if you’d like to include the information of who served the customer in the receipt. This will be the display name of the user logged in when the register is open.
- Served By Label – enter the text for the label of the server field.
- Tax Label – enter the text for the label of the tax field. This field will display the tax (for each rate) of the order.
- Total Label – enter the text for the label of the total field. This field will display the total amount of the order.
- Payment Label – enter the text for the label of the sales field. This field will display the sales made for each payment type.
- Print Number of Items – check this box if you’d like to include a count of the number of items in the order i.e. for bag checks.
- Number of Items Label – enter the text for the label of the number of items field.
- Print Order Barcode – check this box if you’d like a barcode of the order number generated and printed at the bottom of the receipt.
- Text Size – select the size of the text for the general receipt.
- Title Position – select the positioning of the receipt title.
- Logo Size – select the size of the logo for the receipt.
- Logo Position – select the positioning of the logo for the receipt.
- Address & Contact Position – select the positioning of the address & contact details on the receipt.
- Tax Number Position – select the positioning of the tax number for the receipt.
Header & Footer
These meta boxes contain a visual editor which allows you to enter custom information which is displayed on the receipt. As shown in the preview, the header is displayed below the outlet details and above the order details. The footer is displayed at the very bottom, after the order barcode.
You can upload a logo to be printed on the receipt. It is recommended to choose a logo that can be printed on a thermal printer as that is what is commonly used to print receipts. The recommended height to width ratio is 1:4. For example; 70px height and 280px width.
The preview is a good indicator on how your receipt will look like when it’s printed. The appearance as well as information shown is all dynamic and dependant on what is entered on the left side of the page.
Product grids lets you define the products that you want to show on each register. Using tiles which represent a produce, you can customise the product grid layout. Each register must have an assigned product grid.
You can have automatic product grids (that displays either All Products or a grid of the Category Taxonomy) or manual product grids which can be configured to exactly the way you want it from appearance to positioning.
The table above shows an overview of the product grids:
- Product Grid Name – the name of the product grid.
- Slug – slug of the product grid.
- Tiles – comma separated view of the tiles that are configured to this product grid.
- Configure Tiles – button which loads the Configure Tiles page allowing you to add tiles to the grid.
To set up your product grid, go to Point of Sale > Product Grids and enter the following information: –
- Name – this is to identify the product grid when configuring the register or assigning products to the grid.
- Slug – this is the slug of the product grid, usually lower case and contains no spaces.
- Default sort order – select how you want the tiles to be sorted; custom by order or default by global settings.
Once you’ve added your Product Grid, click on the gears icon on the right to configure and add tiles.
From this page, you can add tiles per product or per product category.
To add a tile that represents a product, follow the instructions below: –
- Select Product as the option to add the tile.
- Search for the Product you would like to add as a tile. See screenshots below for example on how to search for the product.
- Select the product you want this tile to represent.
- Select whether you want the product image as the tile or a defined colour.
- Image – a preview is shown with the product image, simply click on Add New Tile to add this tile to the grid. See screenshots below for example on how the product image is previewed.
- Colour – options to define the background colour and text colour is give. After selecting the colours, a preview is shown with the selected colours. Simply click on Add New Tile to add this tile to the grid. See screenshots below for example on how to configure the colours.
If a variable product is selected, you will be prompted to select a default selection. This is not required but if you would like this tile to represent a specific variation, then it is required.
Per Product Category
To add multiple tiles per product category, follow the instructions below: –
- Select Category as the option to add the tile.
- Select the category you want to add product from.
- Click Add New Tile to add the tiles from the selected category.
You can preview the product grid by clicking on the Configure Tiles button and scrolling to the bottom.
From Products Screen
You can assign product grids to a product directly from the product page. Select the product you would like to add to the product grid, locate the meta box titled ‘Point of Sale’ and select the product grids you want this product assigned to or you can add a product grid directly from there. See screenshot below for an example of this meta box.
In this set up, we are going to assign the current logged in user to the outlet. However, for other users you would go to their username i.e. to Users > Username > Profile.
Go to Users > Your Profile and then scroll down to Point of Sale. Here you can select the following options:
- Outlet – select the outlet which the user will be assigned to.
- Discount – enable or disable the option to give discounts to the orders.
The register is your physical Point of Sale, similar to the till or checkout. There is no restriction to how many registers you can set up. The register settings affect the process of when you take POS sales.
The table above shows an overview of the registers:
- Register Status – either open or closed.
- Register – the name of the register, product grid and receipt template.
- Outlet – outlet of which this regsiter is assigned to.
- Access – access button used to open the register. If this is disabled, it could either mean that the user is not assigned or the register is opened by someone else. See Register Status for more details.
To set up your register, go to Point of Sale > Registers and follow the instructions below: –
- Name – this is to identify the register when filtering orders, viewing which register the cashiers are logged in and where the receipt was printed from.
- Product Grid – select which product grid you want displayed in this register. You can also select: –
- All Products – this will display all products in store.
- Category Taxonomy – this will display the products in the category taxonomy of the store. This option uses the same configurations found under WooCommerce > Settings > Products > Display.
- Prefix – this is the prefix of the order number for all orders processed through this register.
- Suffix – this is the suffix of the order number for all orders processed through this register.
- Outlet – select which outlet this register belongs to. Remember, in order for the user to access this register, they must be assigned to this outlet.
- Tax Number – enter the tax number which is printed on the receipt of orders processed through this register.
- Default Customer – search and select the default customer for this register. This is useful if and when you would have commission based sales.
- Default Shipping Method – select the default shipping method for orders processed through this register.
End Of Sale
These settings affect what happens at the end of every sale made through this register.
- Change User – the user will be logged out and the login window will appear.
- Email Receipt – a copy of the receipt is emailed to the customer. If no customer is loaded, a window with a prompt asking for an email address is shown. You can click cancel or enter the email address and click Ok to send the email. See screenshots below for example on this prompt.
- Print Receipt – sets the default setting for the print receipt button displayed on the payments modal window. See screenshots below for example on this button.
- Note Request – choose whether to display the notes modal window before completing the order or not, or only display when saving orders. See screenshots below for example on this modal window.
The register can either be open or closed. The option to enter/open the register can vary depending on the circumstances.
Managing orders taken by your Point of Sale is no different to managing orders placed through your web store. To learn more about managing orders through WooCommerce, click here.
The plugin adds an extra column between the Order Status and Order columns. This column indicates whether this is a POS or WEB order. Hovering over this icon will indicate this in further detail. See screenshot below for an example of this in action.
The plugin adds extra information to the order details page which is stored under custom fields. See screenshot below for an example of this custom fields table.
- Amount Change – amount given back in change (when cash sale has taken place).
- Amount Pay – amount paid by customer, before change is given (when cash sale has taken place).
- Register ID – ID for the register in the WordPress database.
- Tax Number – tax number for the register where the order was taken place.
- Order Type – indicator for the order type; Point of Sale or Website Order.
- POS Order Number – order number for the POS order including the prefix and suffix.
You can reprint a receipt for an order at any time from the Orders screen. Simply locate the order and click on the ‘Reprint Receipts’ action icon. See screenshot below for an example of where this print receipt action icon is.
If you have the order number printed as a barcode on the receipt, you can scan this code from the Orders page and locate the order instantly. Simply click on the ‘Scan Order’ button and scan the order number. The plugin will automatically pull up the scanned order. See screenshots below for an example on this process.
The Point of Sale plugin is a very complex plugin and so there are many configurations to configure to meet everyone’s needs. You can view these configurations by going to Point of Sale > Settings.
Options here affect the general set up of the register.
Enabling the stock quantity identifier will show the remaining stock when a product is added to the basket.
Defines the preset buttons when applying discount to the order. You can only select a maximum of 4 presets.
Select which filters appear on the Orders page to filter. You can select out of Registers and Outlets.
Force SSL (HTTPS) on the POS page. An SSL certificate is required for this option to work correctly.
These options affect how the tiles appear on the product grid.
Enable this to show a quantity increment button when adding products to the basket using the product grid.
Enable this to show a quantity increment button and a keypad when adding products to the basket using the product grid. Quantity Increment needs to be enabled before enabling this option.
Enable this option to show image only tiles which displays the product image as the tile.
Default Tile Sorting
This controls the default sorting for the tiles when showing all products as the product grid.
These options affect the status of the order when using the register.
Select the order status of the completed orders when using the register. Custom statuses are also loaded within this field. A completed order is when payment is complete using the payment modal screen.
Select the order status of the saved orders when using the register. Custom statuses are also loaded within this field. A saved order is when the order is saved using the save button.
Select the order status of loaded orders when using the Load Orders button in the register. You can load orders from the register by clicking on the Load Orders button:
Load Web Orders
Check this box to include web orders placed through the web store in the load orders modal window.
These options affect the use of scanning hardware such as barcode scanners and magnetic card readers.
Enable this so that the plugin can listen to any barcode scanners inputting the scanned barcode result. Once scan is complete, the scanned item will automatically be added to the basket. If the item is a variable SKU, option to choose variations is shown.
It is recommend, although not required, that your barcode scanner includes a carriage return after every scan.
Credit/Debit Card Scanning
Enable this so that the plugin can parse the scanned output into the relevant checkout fields. This feature is only supported on specific payment gateways, a list of these gateways can be found here.
These options affect the account creation process when creating customers from the register.
Choose how the username should be generated when the customer is created through the registers customer details panel.
Enable this option to receive new order email notifications to the admin user. You can configure the settings of this email by going to WooCommerce > Settings > Emails > New Order.
Enable this option to send an email to the customer when an account is created using the register. You can configure the settings of this email by going to WooCommerce > Settings > Emails > New Account.
These settings affect how the tax is calculated when using the register.
Enable this option to allow the Point of Sale to calculate the tax using the WooCommerce configurations. This will follow the rates and values set under WooCommerce.
Calculate Tax Based On
This option determines which address is used to calculate tax. Most states/countries require you to calculate tax based on the Shipping Address.
- Default WooCommerce – this uses the option set under WooCommerce > Settings > Tax > Calculate Tax Based On.
- Customer shipping address – this uses the customer shipping address when customer details are entered.
- Customer billing address – this uses the customer billing address when customer details are entered.
- Shop base address – this uses the base country set under WooCommerce > Settings > General > Base Location.
- Outlet address – this uses the outlet address configured under Point of Sale > Outlets. It will use the outlet which the register is assigned to.
Default Customer Address
This option determines which address is used to calculate the tax for the default customer such as the Guest.
- No address – this does not use any address. For example, no calculation until an address is entered.
- Shop base address – this uses the shop base address set under WooCommerce > Settings > General > Base Location.
- Outlet address – this uses the outlet address configured under Point of Sale > Outlets. It will use the outlet which the register is assigned to.
The list of payment gateways in this table is populated based on what payment gateway plugins are installed and activated. If the plugin is installed and not activated, the gateway will not appear under this table. The payment gateway does not need to enabled under WooCommerce > Settings > Checkout.
To display the payment gateway in the payments modal screen, simply check the box next to relevant gateway and click ‘Save Changes’. Configurations of your payment gateway can be found under WooCommerce > Settings > Checkout.
These options affect the appearance of the register from the layout to the display of the WordPress admin bar.
Choose whether to display the product grid, company mage, text or company image and text. The basket on the left will remain unaffected.
If you select ‘Company Image’ or ‘Company Image + Text’ for the register layout, a company logo is required. Click on Upload to attach the company logo to the register page.
WordPress Admin Bar
Check this box to hide the black WordPress admin bar at the top of the page when the register is loaded. If this is disabled, you can always go back to WordPress backend by either closing the register or clicking on the ‘Back’ button as shown below:
Frequently Asked Questions
Q: I am using a receipt printer of a particular brand. The receipt is printing but not in a clear font. Is it possible to change the Point of Sale to print in the default font of the printer?
A: Our plugin runs in the browser, therefore, all prints are rendered and sent to the printer directly from the browser. We have removed all fonts so that printer does not have any overrides. A majority of users have reported this to work fine for their printers. However, some printers need to be adjusted so that they can print correctly from a HTML browser. Such printers that print well from HTML browsers is this one: http://www.epson.co.uk/gb/en/viewcon/corporatesite/site/192/products/mainunits/overview/11667
Advanced Custom Fields
Our plugin can integrate with the free version of the Advanced Custom Fields which can be downloaded from here. It can also be downloaded directly through Plugins > Add New and then search for Advanced Custom Fields.
You can find all the information you need to install, setup and use Advanced Custom Fields on their website here. It is important you have a custom field group already created before following this tutorial. If you do not know how to create a field group, please click here to read on their tutorial on this.
Save Information To User Profile
If you want the data in the custom fields to be saved to the user profile, set the location of the field group to ‘User’ or ‘Customer’ if you have the Customer Relationship Manager plugin isntalled.
Save Information To Order
If you want the data in the custom fields to be saved to the order, set the location of the field group to ‘shop_order’.
Questions & Feedback
Have a question before you buy? Have some feedback for us on this documentation? Have a great idea to add to this plugin? Please let us know so we can make the improvements and answer your queries. Click here to contact us through our contact form.