Skip to main content

Cannabis Module

The Cannabis (Flower) module is a dedicated product flow for cannabis products. It operates independently from the standard catalog and is designed for dispensaries and cannabis retailers.

Use the [pointless_pos_flower_prices] shortcode and the cannabis listing/product pages to display flower products on your site.


How It Works

The cannabis module follows a strict pipeline:

  1. Listing — Fetches flower products grouped by category from your POS
  2. Normalization — Parses product data (THC, CBD, inventory counts, tier IDs)
  3. Listing Render — Displays grouped categories and navigable product rows (without prices)
  4. Navigation — Customer clicks a product to navigate to its detail page
  5. Product Route — Server resolves the product and determines the applicable price tier
  6. Tier Pricing — Fetches pricing for the resolved tier (eighths, quarters, halves, ounces, etc.)
  7. Tier UI — Renders tier selection on the product page
  8. Inventory Check — Validates stock against the selected tier quantity
  9. Cart Mutation — Customer adds the selected tier variant to cart

This order is fixed. Prices are never displayed on the listing page and are never fetched until the customer reaches a specific product page.


Flower Listings

The flower listing page shows products grouped by strain or category. Each listing row is navigable but does not show prices. Key features:

  • Client-side search — Filter products by name without reloading the page
  • Client-side sorting — Sort by name, THC, CBD, or other available fields
  • Live inventory — Stock levels are pulled directly from your POS
  • SEO-friendly URLs — Each product gets a unique URL at /pointlesspos-flower/{slug}-{id}

Tier Pricing

Cannabis products use tier-based pricing driven by your POS system. Common tiers include eighths, quarters, halves, and ounces — but your actual tiers depend on how your POS is configured.

  • Tiers are resolved server-side using authoritative data from your POS
  • The customer does not select a tier by URL or hidden parameter — the system determines which tier applies
  • Tier pricing is fetched only on the product detail page, never on the listing

Product Page

Each cannabis product gets a dedicated detail page showing:

  • Product name and description
  • THC and CBD percentages
  • Product image (if available)
  • Available tiers with pricing
  • Live inventory count
  • Add-to-cart button (enabled only when inventory is sufficient for the selected tier)

Inventory Enforcement

The plugin enforces inventory at the point of adding to cart:

  • A product is addable to cart only when inventory count > tier quantity
  • This check happens after tier resolution on the product page
  • Inventory is never enforced on the listing page — products appear in listings regardless of stock level

Group Props (Effects, Flavors, Terpenes)

If your POS product data includes group props, the plugin renders them on the product detail page between the description and the attribute details. Group props support:

  • Top Effects — Displayed with icon indicators
  • Top Flavors — Displayed with icon indicators
  • Terpenes — Displayed with colored dots for visual distinction
  • Custom groups — Any group prop from your POS data renders automatically

Each group is labeled and its items flow side-by-side on wide screens, wrapping gracefully on mobile.


Flower Price List

The [pointless_pos_flower_prices] shortcode renders a simplified price list for flower products. This is useful for displaying a quick-reference pricing table on a dedicated page.


Route Structure

Cannabis products use dedicated routes separate from the main catalog:

Route TypeURL Pattern
Flower product page/pointlesspos-flower/{slug}-{id}

These routes are handled by the plugin's routing system and do not require individual WordPress pages.


Important Notes

  • The cannabis module is independent from the standard catalog and menu display
  • It does not reuse pricing logic from other modules
  • Product routes carry only productId — tier identifiers are never passed via URL
  • Computing prices client-side is not supported — all pricing is resolved server-side