The Products page is where you can manage your store’s merchandise, complete with images, pricing parameters, shipping values, and more. This guide will go over some of the definitions and values surrounding adding a product, while the Tutorials will walk you through more specifics and advanced set up. Lastly, the Cheat Sheet will give you some code examples for displaying products in themes.

Finding a Product

Our List Views tabbed structure makes finding a product a cinch. See below for an example of our list, which you can filter by category using the tabs and by product name and other text fields using the search bar. You can also sort by columns and there's a fancy floating bar for selected products that allows you to perform bulk actions such as enabling, disabling, cloning/copying and deleting products:

Adding a Product - Tutorial Video

Product Values

Name: The value inputted here will be the name displayed for your product on the front-end of your store.

Enabled: This toggle determines whether the product is visible in your store.

Short Description and Long Description: Values of these fields can appear on the front-end website, depending on implementation of the product list and product page.

Pricing Values

Base Price: The price of the product before taxes and discounts. If your store is tax-inclusive, then enter the base price with the tax applied.

Tax Class: Specifies the tax class that a product belongs to. A tax class determines the rate of tax to apply to the product price, depending on customer shipping address. You can configure tax classes from the Business Settings > Tax Classes page.

Cost: The product cost is used to calculate the revenue value for the reports. This field is not visible on the store front-end.

On Sale: Check this box to enable a sale price for the product and show the product as on sale in the front-end of your store. Checking this box will also make the "Sale Price or Discount" field appear in the pricing section.

Sale Price or Discount: The sale price or discount amount for the product. Only available if the product is set to "On Sale". Amount can be a fixed price (e.g. 5.00), a discount amount (e.g. -5.00) or a discount percentage (e.g. 5.00%).

Sell By Subscription

Only sell this product by subscription: If checked then the product can only be purchased on a recurring subscription. If unchecked, but one or more subscription billing plans are checked (below), then it will be possible to purchase this product as a one-time standard retail purchase as well as on subscription.

Plans: A list of all subscription billing plans for this store will be displayed. For any billing plans which are checked, they'll show up as billing plan selection options for purchasing this product on subscription on the store's product page. If no plans are checked, this product can not be sold on subscription and no selection options will be displayed on the store's product page. 

Product Details

SKU: A unique identifier of a product.

URL name: The URL name parameter is a string which identifies a product in URLs. A value of this parameter must be unique.

Manufacturer: You can assign a manufacturer to each product and display the information on the product page of your site.

Product Type: This field lets you assign a product type which controls if the product is shippable if it has downloadable files. It can also be applied as a filter for different types of discount rules

Barcode: This field lets you optionally add a numeric barcode, UPC Code or GTIN for your product. 

Sort Order: This field lets you apply a sort order override filter for products on the front-end. Note that this is not built into themes by default, so if you want to use a custom sort order with this field, you'll need to do some customization of your theme code. The default sort order with no filters applied is based on the order products are created in.

Uploading Images

You can upload one or more product images to show off your product to prospective customers. All image uploads should be in JPG, GIF, or PNG formats. You can add alternative text and descriptions, and click the 3 horizontal bars to drag to sort the order of your images. Note that different themes may make use of multiple product images differently. 

Volume Pricing

Volume Pricing: With this feature, you can set a different price for different customer groups or quantity tiers. The volume pricing will apply per order, per cart item. When determining the product price, LS will use the lowest price that applies. For an example, check Volume Pricing in the Tutorial section.

Category Values

Categories: A list of categories the product belongs to. A product can belong to one or more categories. In the above example, the parent category is "Men's", and the subcategory is "Tops".

Inventory Settings

Track Product Inventory: Enables inventory tracking for the product.

Hide When Out of Stock: When enabled the product will not show up on the front-end of your store when out of stock.

Allow Negative Stock: When enabled allows the product to have negative stock.

Out of Stock Threshold: The number of units at which the product is considered "out of stock".

Allow Pre-Order: Allows the product to be purchased even when out of stock.

Inventory Tracking

If the Track Product Inventory setting is enabled as described above, this section allows you to track and adjust inventory levels for your product.

Units in Stock: The current amount of units in stock for the product. Cannot be altered directly.

Inventory Correction: Using the inventory correction you can add or remove units from the product stock. Positive number increase stock, negative number decrease stock.

Inventory with Variants: When tracking product variants, set the inventory of the parent to 0.

Shipping Values

Dimensions: These fields are used for evaluating the cost of shipping. Units for the length and weight are configured on the Settings/Shipping Config page under the Units section. Product weights are rounded to two decimal points. 

Per-Product Shipping Rate: This allows you to specify a shipping rate for a specific product. In the case that a cart contains only a product with a per-product shipping rate, the quote for that rate will appear itself as a selectable shipping option. Otherwise, the rate quoted for the individual product will be added to shipping quotes yielded for a set of checkout items. The rates are enforced in the same nature as table rates, in that their order determines their precedence, and therefore the rate you'll be quoted for a given location. If a product exists in a cart in multiple quantities, the rate quoted will be multiplied by that quantity (for example - two baseball caps with a per-product shipping rate of $5.00 are added to a cart - the resulting quote provided would be $10). If your per product shipping rates are taxable, you can assign a tax class if desired.

SEO Settings

Title Tag: Set the title for the product's page. If left empty, the product name will be used.

Meta Description: Enter a meta description to be used on the product's page.

Meta Keywords: Set the meta keywords to be used on the product's page.

Product Attributes

Attributes are structured text information assigned to a product and displayed on the product details page. To add an attribute to the product, click the "add attribute" button, and the attribute's name and value fields will appear. If you want to have multiple attributes you can just click the plus sign again to bring up more attribute fields.

Attribute Name: This field will display the name of the attribute on the product page of your store.

Value: The value is used to describe the attribute.

Product Options

Product Options are product parameters which a customer can select from the drop-down menus, and you will see them in the order details.

To add a new option to the product, click the insert row button under the options heading. This will create a new row where you can specify the name and values of the option.

Name: This column describes the option available for the product.

Values: This column allows you to enter multiple values for the customer to choose from. After entering a value press the Enter key to finish editing the value and to start a new one. The values are NOT comma separated.

Generate Product Variants: This button will generate a list of all possible combinations for each option.

This is what the front end of your site might look like once you add Attributes and Product Options:

Product Variants

The Product Variants feature allows you to quickly create products based on combinations of product options, which allows you to have individual stock management, price and images for each option combination. See the Tutorial section for more information on adding a Product Variant.

SKU: A unique identifier of a product variant.

Status: This toggle determines whether the product variant is visible in your store.

Dimensions: These fields overwrite the product dimensions if the variant is selected.

Base Price: Overwrites base price of the product if the variant is selected.

Cost: Overwrites cost of the product if the variant is selected.

On Sale: Check this box to enable a sale price for the product variant and show the product variant as on sale in the front-end of your store. Checking this box will also make the "Sale Price or Discount" field appear in the pricing section.

Sale Price or Discount: The sale price or discount amount for the product variant. Only available if the product variant is set to "On Sale". Amount can be a fixed price (e.g. 5.00), a discount amount (e.g. -5.00) or a discount percentage (e.g. 5.00%).

Track Product Variant: The product variants can track their own inventory when the track variant inventory option is enabled. If it is not enabled, the variant will use the parent product's inventory.

Variant Images: You can upload product images specific to the variant in this section. If no image is uploaded the main product image will be used.

Product Extras

Product extras are like attachments for products. They are similar to products, but can only be added with a parent product. For example, a product extra could be an optional case that comes with a cell phone purchase. Product extras can be added as checkboxes on the front end of your product page. When a product extra is selected, the product view is updated with the correct price.

See the Tutorials page for Adding Product Extras, and more.

Related Products are products which are similar to the item a shopper is viewing. LemonStand's Related Products feature now includes Cross-sells and Upsells. They can be found when editing a product, on the sidebar:

Cross-Sells are standard related products with a new name. Upsells, however, let you define discount rules and display rules for related products. The Cross-Sells tab allows to relate to another products (without specifying a discount), and the floating function bar (when clicked on an added product), includes a delete button.

For example, you could offer someone a 20% discount if they purchase some pants and a related t-shirt together. You can even choose to only show the t-shirt discount if they've already added the pants to their shopping cart if you want. 

This feature gives you even more promotion tools to drive more sales!

The Upsells tab has 3 additional settings: limit cart quantity to 1 item (if checked will not allow more than 1 to be purchased at a discount), discount (either an amount or % value), and display (always show/only show when product in cart).

See our theme documentation to see how Upsells work in theming the Product Page.

Displaying Related Products

You can easily display related products on the product page with a little bit of theme code. If the product does not have any related products, the code is simply ignored. The example below also ensures that any related products are enabled before displaying them.

{% set enabledProdCount = 0 %}
{% if product.related.count %}
    {% for relatedProduct in product.related %} 
        {% if relatedProduct.enabled %} 
            {% set enabledProdCount = enabledProdCount + 1 %} 
        {% endif %} 
    {% endfor %}
{% endif %} 
{% if product.related.count and enabledProdCount > 0 %} 
<h1>Related products</h1>
<ul class="row">
  {% for relatedProduct in product.related %}
    {% if relatedProduct.enabled %}
    <li class="four columns mobile-two">
        {% if relatedProduct.image %}
            <img temprop="image"  class="lazy product-img" alt="{{ relatedProduct.image.title }}" src="{{ relatedProduct.image.thumbnail(64, 'auto') }}" />
        {% endif %}
        <a href="{{ site_url('/product') }}/{{ relatedProduct.url_name }}">{{ }}</a>
    {% endif %}
  {% endfor %}
{% endif %}

You can use the same Twig variables as you normally do for products. For example, in the example above, you could add {{ relatedProduct.price }}

Volume Pricing

Okay, let’s set up some Volume Pricing.

For example, let's look at a product priced at $39.99; a customer in the "Registered" customer group will get the maximum price of $35.95. If they purchase 5 or more of the product in an order, it will be priced at $29.99. For any other customer, if they buy 1 or 2 of the product, they will be paying $39.99 (full price) per product. If they buy 3 or 4 of the product, the price will be $32.99. If they purchase 5 or more in an order, it will be priced at $29.99.

A wholesale customer group, however, is only charged 50% of the original price, at $20.00, no matter the quantity.

Adding Product Variants

Product Variants take product options, such as Color and Size, a step further. A product in LemonStand can have Options such as Color, Size, or anything else that you define. Each Option can have any number of values, such as Red, Green and Blue, or Small, Medium and Large. You can use these options on their own, or you can use them to build a list of Variants, which are like virtual-products with their own characteristics such as SKU, price, images, etc.

Step 1 - Setting Up Variants

Start by going to Product Catalog > Products, and creating a new product. It's best to set up the base product by entering a name, price, SKU, description, some images, selecting a category, and clicking save.

Now you're ready to set up some options, and then variants!

Step 2 - Adding Options

Expand the Options section while editing a Product, and click the button to add an Option. Give it a name such as "Colour". Then click the black plus icon, or hit Tab on your keyboard to add some Values. After typing in a value's name such as "White", just hit Enter on your keyboard. Add as many Options and values for each that you want.

Here's an example of what you could end up with:

From there, click the "Generate product variants" button below your options. This will generate a variant for every possible combination of options. In this example, there are 2 Colours in 3 Sizes. 2 x 3 options equals 6 variants in total.

You can now proceed to editing each variant by expanding the Variants section.

Step 3 - Editing Variants

In the example above, you would end up with a Variants section that looks like this:

From here, you can click on each individual variant and edit its characteristics. Let's edit the Yellow / Medium variant and do 3 things:

  1. Make the price higher.
  2. Add a SKU and enable inventory tracking.
  3. Upload an image specific to this variant.

Editing variants is similar to editing the base product. Any details that you fill in specific to a variant will override the base product.

For example, if you make the base product $10, we can make the Yellow/Medium shirt $16 by editing this variant's price.

We can add a SKU specific to this variant, and enable inventory tracking for this variant as well.

Images can also be uploaded specific to variants, which will be displayed to your customers when they select the options that match that particular variant.

What the customer would see:

Once you've edited your variant, click the blue save button and you'll be taken back to the parent product, where you can click on another variant and edit its characteristics if you want.

Tips For Product Variants

  • By default, variants inherit the characteristics of the parent product. For example, if price is set to $10 for the parent product, all variants will also be $10 unless you specifically set them to be a different price.
  • Anything that is defined specifically for a variant will override the base product. For example, if you set the weight of the base product to 3lbs, but set the weight of a variant to 1lbs, the variant's weight (1lbs) will be used for things such as shipping calculation.
  • If you do not sell a particular combination of options, for example Black / Small, you can click on that variant and disable it using the toggle. This will prevent customers from ordering it.
  • Variants can be added and updated via the CSV import feature, or the API.

Adding Product Extras

You can add extras on the product page, under the tab "Extras".

The only required field for a product extra is the "Name". If no other fields are entered then the price is 0.00, and the extra will be disabled. After you enter a product extra and save the product you can edit it further. You can see the product extra now has a "Edit" link which will direct to a page with more options.

Sale Price

As of right now, sale pricing is not available for product extras. Currently, when a product is on sale, the price of an extra is added to the product price without any discount applied. For example, if you have a product set to $100, and the sale is set to 10%, and you add an extra where the price is $5, the total checkout price for that product will be (100 - (100 * 0.1)) + 5, which is $95. That is the sale price of the product, added with the base price of the extra. In the future we will support sale prices for individual product extras as well.


Product extras for variants are currently not available. However, this will be implemented as soon as possible.

Importing Products via CSV

Refer to Product CSV Import and Export docs

Render Product Extras

Add a partial to your product page to render the product extras:

{% if product.extras.count %}
  <div class="clearfix">
    {% for index, extra in product.extras %}
       <div class="extra">
            <label class="title" for="{{ 'extra-'~index }}">{{ }} ({{ extra.price|currency }})</label>
            {% if extra.enabled %}
                <input type="checkbox" id="{{ 'extra-'~index }}" {{ checkbox_state(postedExtras[], }} name="extras[{{ }}]" data-ajax-handler="shop:product" data-ajax-update="#product-page=shop-product">
            {% else %}
                <input type="checkbox" disabled="disabled">
            {% endif %}
    {% endfor %}
{% endif %}

You can also add some code to your cart items partial, to indicate that extras are included with the product.

{% set extras = item.extrasString() %}{% if extras %}
     {{ extras|unescape }}
{% endif %}

You can show the product price without the price of the extras included by calling the priceNoExtras method, or the fullPriceNoExtras method which returns the price with sale and tax as well

{{ item.fullPriceNoExtras()|currency }}
{{ item.priceNoExtras()|currency }}