Hurtownia Shortcodes — Admin Panel Documentation
Documentation

Admin Panel

Complete guide to the settings and features of the Hurtownia Shortcodes plugin. Learn how to configure your B2B store, manage customers, sales reps, and promotions.

WooCommerce B2B manage_woocommerce WordPress Plugin
📋

Introduction

Hurtownia Shortcodes is a comprehensive B2B wholesale store management system built on WordPress + WooCommerce. The admin panel is accessible under the Wholesale menu and is divided into thematic sections.

Panel access is granted to:

  • WordPress Administrator (role manage_options)
  • WooCommerce Store Manager (role manage_woocommerce)
💡
Shortcodes Shortcode attributes placed directly in page content override settings saved in the panel. HTML tags are supported in text fields: <strong>, <em>, <br>.
🛒

Wholesale — Store Settings

Product Grid

Configuration of the wholesale product catalog. Shortcode: [hurt_grid]

General Settings

Category
empty
WooCommerce category slug. Multiple slugs separated by commas: supplements,vitamins. Empty = all products
Columns (desktop)
4
Number of columns on large screens. Tablet: 3→2, mobile: 1 (automatic)
Min. quantity
1
Minimum quantity in the quantity field — useful for bulk pack sales
Max. products
50
Total number of products to display in the grid
Search bar
1
Search bar above the grid
Show SKU
1
SKU number displayed below the product name on the card
Price suffix
net
Text after the price: net, gross, etc.
Pre-Checkout URL
empty
URL of the pre-checkout page for sales reps. Empty = standard checkout for everyone
Currency
€
Currency symbol shown next to prices: €, $, £
Tier nudge text
Just {n} more → {price} {currency}/unit
Hint toward the next price tier. Variables: {n}, {price}, {currency}

Off-Canvas Menu

Slide-out menu with hamburger, cart button and user panel. Shortcode: [ah_offcanvas_menu]

Menu — Customers
empty
WordPress menu for Customer role and guests
Menu — Admin / Rep
empty
Separate menu for Administrators and Shop Managers
Logo — URL
empty
Full URL of the logo file (SVG, PNG, JPG) in the menu header
Logo — height (px)
40
Logo height in pixels. Width scales automatically
Menu item size
M — medium
Height and font size of menu items. Options: XS, S, M, L, XL
Toolbar height (px)
56
Height of the bar containing the cart and hamburger

Product Tabs

Tab builder for the product page. Drag & drop reordering, Heroicons icons, color picker, removal of unused tabs.

Login Page

GroupSample parameters
GeneralPage background color, logo URL, logo size and border radius
FormField background, border color, label text, focus effect
Login buttonBackground color, text color, button shadow
Links & messagesLink color, info message background, error style

Homepage (Landing Page)

SectionWhat you can configure
HeroBrand name, subtitle, headline, feature bullets, photo URL, footnote
Buttons & linksText and URL for: Login, Request Access, Quote Request, CTA
Three featuresIcon (emoji) and text for each of the three features shown below the hero
How it worksSection title and descriptions of the four purchasing process steps
ColorsPrimary color, hover, hero background, feature background, CTA background, text colors

Colors

Base palette (primary, accent, backgrounds, borders, text, prices, buttons), pre-checkout colors, product page colors, and bundle card colors.

Product Card — PDF

  • Choose which sections appear in the PDF via drag & drop (image, title+SKU, price, tabs, short description)
  • Toggle on/off: SKU, category, generation date, logo, footer
  • Upload logo displayed in the PDF header
  • Live PDF card preview
📦

Products

Availability

Bulk management of stock status and prices — without opening each product individually. Select a category, edit, and save with one click.

ColumnDescription
ProductProduct name with thumbnail and SKU number
PriceRegular product price — editable field
Sale priceSale price. Clearing the field removes the sale
Status"Unavailable" checkbox — marks the product as out of stock

Quantity Pricing (Price Tiers)

Builder for individual prices at specific purchase quantities (tiers). Up to 3 price tiers per product.

👥

Team

Sales Representatives

Representatives List

ColumnDescription
Name / IDFull details. BLOCKED badge on suspended accounts
PhoneEditable field — changes save on blur
Last loginDate and time + relative time ("2 weeks ago")
LoginsNumber of logins in the current month — green if > 0
Max discount %Maximum discount this rep can grant to a customer (0–100%)
ActionsBlock/unblock account (padlock) + permanent deletion (trash)

Maximum Combined Discount

Global cap on the sum of all discounts. Protects margins — even if a product already has promotions and tiers applied, the rep cannot push the combined total past this threshold.

⚠️
Example If the global cap = 55% and the product already carries a 45% store discount — the rep can add at most 10% more.

Substitute Commission (Commission Split)

Substitute %
30%
Commission share received by the rep actually serving the customer
Account manager %
70%
The remainder goes to the customer's regular account manager. Calculated automatically

Leave & Cover

  • Click Add leave and specify who is on leave, who covers, and the date range
  • Active leaves shown in the main view, completed leaves in the archive
  • The substitute automatically receives the commission split for orders placed during the leave period

Account Managers

  • List of all reps with the number of assigned customers
  • Count of unassigned customers
  • Bulk customer assignment — search + list + choose manager with one click
🏚

Customers

Customer Profile (CRM)

Search by company name, first/last name, or email. Filter by account manager. Detailed profile with order history, CRM tags, notes, and CSV export.

Customer Address Book

TabFields
Billing addressesCompany, first/last name, address, postcode, city, country, phone, email
Delivery addressesCompany, first/last name, address, postcode, city, country
💡
Limit & compatibility Limit: 60 addresses per customer. Data stored as thwma_custom_address — full compatibility with ThemeHigh Multiple Addresses. Admins can edit any customer's addresses; reps can only edit their own customers' addresses.

Quote Requests

Module activated under System → Modules.

Quote Statuses

StatusMeaning
NewQuote received — awaiting action
Offer sentRep has priced and sent the offer to the customer
AcceptedCustomer accepted the offer
RejectedCustomer or administrator rejected the request
ExpiredOffer validity period has passed
OrderedQuote has been converted into a WooCommerce order

Messenger (Chat)

RoleCapabilities
AdministratorSees all threads, can write to any user
Sales repSees threads for their own customers and unassigned ones; writes to their customers and admins
CustomerWrites to admin or their account manager; sees only their own threads

Registrations

Handles account applications from new customers. Three tabs: Pending, Approved, Rejected. Actions: Approve, Reject, Delete.

Activation Email

HTML template editor for the message sent after account approval. Available variables: {name}, {company}, {email}, {shop_name}, {login_url}

Discount Groups

Create named customer groups with an assigned percentage discount. Groups act as one source in the discount chain — the system always applies the highest available discount: individual, group, or volume-based.

Managing Groups

Group name
Any descriptive name, e.g. Premium pharmacies, Standard customers, Strategic partners
Discount (%)
Percentage discount off the regular price. The system applies max(individual, group, volume) — discounts never stack
  • Add group — name and discount percentage, instant save
  • Inline editing of name and percentage — no page reload
  • Deleting a group does not delete customers — they simply lose the group assignment

Assigning Customers to Groups

A separate Group Assignment tab with search by company name and email. Bulk assignment — select multiple customers and assign to a group in one click.

ColumnDescription
Company / EmailCustomer identification details
Current groupName of the assigned discount group, or — if none
Individual discountDiscount set directly on the customer's account
Effective discountHighest available discount — the one actually applied at checkout
AssignGroup selection dropdown — change takes effect immediately without saving a form
💡
Discount priority The system applies max(individual, group, volume). Customers always get the best available discount — no risk of accidentally reducing their rate when changing groups.
📈

Volume Discounts

An automated discount system based on the customer's cumulative turnover over a selected period. Each month the system calculates each customer's revenue from the last N months and awards a discount for the following month — with no manual work required from the rep or the customer.

ℹ️
Availability Included in the Business plan, or available as an add-on (+€37/mo) for Starter and Pro plans. Activate under System → Modules → Volume Discounts.

Threshold Configuration

Customers → Volume Discounts — configuration panel with four status cards and a threshold table.

Revenue Calculation Window

Calculation window
1 month
Time window for revenue aggregation. A single global setting for all thresholds. Available options:
  • 1 month — previous month. Best for industries with steady, even sales (FMCG, supplements)
  • 3 months — last quarter. Smooths out short-term seasonal dips
  • 6 months — last half-year. For seasonal industries (garden, construction)
  • 12 months — last year. For industries with infrequent large orders (HoReCa, industrial)
💡
New customers If a customer has 2 months of history and the window is set to 6 months, the system sums those 2 available months. A short purchase history does not block a discount from being awarded.

Threshold Table

FieldDescription
Revenue from (net)Minimum net total from the selected window for this threshold to activate
Discount (%)Percentage discount applied throughout the entire following month

The number of thresholds is unlimited. The system always applies the highest reached threshold. Example configuration:

Revenue fromDiscountTier label
€2,5003%Active customers
€6,0005%Regular customers
€12,0008%Strategic customers
€25,00012%Key accounts

Status Cards

CardWhat it shows
Last recalculationDate and time of the last automatic recalculation
Customers with discountNumber of customers currently holding an active volume discount
Customers checkedTotal number of customers evaluated in the last recalculation
Active windowCurrently configured calculation period (1/3/6/12 months)

Manual Recalculation

The Run now button forces an immediate recalculation for all customers outside the normal schedule. Useful after changing the threshold table or the calculation window.

⚠️
Automatic trigger The system runs recalculation automatically on the first page load of a new month (lazy trigger). No cron job or WordPress scheduled task is required.

Customers Near Threshold

Customers → Near Threshold — an operational list of customers sorted by their distance from the next discount tier. A working tool for reps: see at a glance who to call to close out revenue before the period ends.

ColumnDescription
CompanyCustomer name with a link to their CRM profile
Current revenueNet total from the current calculation window (including the current month)
ProgressBar visualising revenue relative to the next threshold
Needed for next tierNet amount separating the customer from the next discount — a concrete talking point for the sales call
Current discountVolume discount active this month (awarded based on the previous period)
  • Filter by status: Threshold reached / Close to threshold / No revenue
  • Filter by account manager — reps see only their own customers by default
  • Admins with the show_all="1" attribute see all customers
  • Search by company name and pagination at 50 records per page

The same view is available as the shortcode [hurt_turnover_watch] on front-end pages (e.g. a dedicated rep dashboard).

Customer View — My Account

Customers see their discount status under My Account → Volume Discounts. Full visibility without needing to call their rep.

ElementWhat it shows
Hero — current discountDiscount percentage active this month (green when > 0%). Caption: Based on revenue Jan – Mar 2026: €34,500
Revenue for periodNet total from the current window with a period label, e.g. from the last 3 months (Jan – Mar 2026)
Progress barVisual of revenue relative to the next threshold
"Needed" callout€X more to reach Y% — shown when the customer hasn't yet hit the highest tier
Threshold tableAll configured tiers with achieved ones marked (✓)
💡
Why this matters A customer who understands where their discount comes from and how close they are to the next tier motivates themselves to order more. Reps stop wasting time on phone explanations.

How Recalculation Works

1
Customer places an orderNet revenue (excluding shipping) is recorded in an internal table per month. Cancelled and refunded orders are automatically deducted.
2
Start of a new monthOn the first page load the system detects the new month and triggers recalculation (lazy trigger — no cron required).
3
Revenue aggregationFor each customer, revenue from the last N months is summed. New customers — available months are summed without blocking the discount.
4
Discount awardedEach customer receives the discount corresponding to the highest tier they've reached. The discount is valid for the entire following month regardless of current purchases.
💡
Discount priority Volume discount enters the same pool as individual and group discounts. The system applies max(individual, group, volume).

Order History Backfill

On first activation the module automatically imports order history from the last 12 months into the revenue table. The module works correctly from day one — no warm-up period needed. The backfill runs once in the background when the admin panel is opened.

💼

Accountant Module

A dedicated panel for the hurt_ksiegowy role. Manages the lifecycle of deferred payments — from order creation through overdue blocking, to payment confirmation and the exception workflow on request from a sales rep.

ℹ️
Role: hurt_ksiegowy A user with this role sees only the Accounting tab — no access to the rest of the Wholesale panel. Administrators assign the role in the WordPress user profile.

Settlement Panel

Table of all orders with deferred payment (7 / 14 / 21 / 30 days), sorted by default from the nearest due date.

ColumnDescription
OrderWooCommerce order number with a link to the order details
Customer / CompanyCompany data and the customer's assigned account manager
AmountGross order value
Payment dueDue date. Red when overdue, yellow when due today or tomorrow
StatusCurrent settlement status (see table below)
ActionsConfirm payment — marks the order as paid with one click and automatically lifts the customer block (if no other overdue orders remain)

Settlement Statuses

StatusMeaning
PendingDue date has not yet passed — customer can order normally, including on deferred payment
OverduePayment due date has passed — deferred payment option is blocked for this customer
PaidAccountant confirmed payment — block lifted
ExceptionTemporary block removal granted on request from a sales rep — valid for one order

How the Payment Block Works

⚠️
Block behaviour When a block is active, the deferred payment option ("pay later") disappears from the order form. The customer can only place an order with immediate payment by card or bank transfer (Stripe / Przelewy24). The block remains until every overdue order is confirmed as paid by the accountant.

Payment Confirmation Flow

1
Customer settles the overdue balanceBank transfer, cash, or card — outside of WooCommerce
2
Accountant clicks "Confirm payment"Next to the relevant order in the settlement panel
3
System marks the order as PaidMeta field _hurt_payment_settled → 1
4
Automatic block verificationIf the customer has no more overdue orders, the "pay later" option returns to the checkout form

Payment Exceptions — Rep Request

A sales rep can ask the accountant to temporarily lift the block for one of their customers — for example when the customer has a transfer in progress or a documented history of on-time payments. The mechanism keeps full control with the accountant at all times.

Exception Workflow

1
Rep opens the customer profile in CRMSees the active block and the button "Request payment exception"
2
Enters a justification (required)The text appears in the accountant's view. A request without justification cannot be submitted
3
Request appears in the accountant's panelWith the rep's name, date, and justification text
4
Accountant clicks "Grant exception"The customer immediately regains the "pay later" option for one order. Meta field: _hurt_payment_exception → 1
5
Exception expires after the order is placedThe block returns automatically — the outstanding invoice still requires confirmation from the accountant

Overdue Filter

A separate tab showing only overdue orders — no pending or paid ones. Columns sortable by due date and amount. Quick view: days overdue, total outstanding per customer. One-click CSV export.

📢

Promotions

Banners & Pop-ups

TypeWho sees itUse case
CustomerLogged-in customerPromotions, customer announcements
SystemSales repInternal team communications

For each banner: rich text editor, background/text color, targeting by account manager or CRM tags, start/end dates, drag & drop ordering.

Loyalty Programme — Capsules

Programme icon
12 options: capsule, star, heart, trophy, gift, lightning, fire, sparkles, coin, puzzle, crown, rocket
Number of capsules
How many points must be collected to complete a set
Min. order amount
Minimum net order value that earns a capsule
Discount on completion
Percentage discount awarded when a full set is collected
Nudge text
Message shown while collecting. Variables: {collected}, {total}, {discount}
Capsule colors
Color for filled, empty, and glow effect when a set is completed

Product Bundles

  • Create product sets with a special bundle price
  • Filter products by category when building a bundle
  • Drag & drop bundle ordering
  • Active/inactive toggle without deletion
📊

Statistics

  • Date range filter (From / To) and quick period selector (This month, Last month, This year)
  • Order status filter (Completed / Processing / On hold / Cancelled / Refunded)
  • Summary cards: total orders, sales value, average order value, number of customers
  • Order table: number, date, customer, manager, products, value, status
  • One-click CSV export of filtered results
📈

Reports

Rep Activity Reports

Activity types: Phone call, Meeting, Off-system order, Offer, New contact, Complaint. Each report: type, date, link to CRM customer or prospect, amount, notes.

📍 GPS Location — Retention Configuration

The GPS module configuration panel is available in the Reports tab in the admin panel — visible only when the GPS toggle is enabled under System → Modules. The GPS module does not activate without first setting a retention period — a GDPR safeguard.

Retention period (days)
none
Number of days location data is stored (7–365). No value = module inactive even if the toggle is on. Once a period is saved the module becomes active — reps see a GPS status indicator in the report form.
  • Last cleanup — date, time and number of deleted entries
  • Next automatic cleanup — WP Cron runs daily at midnight
  • Button Clean now — removes location data from all reports older than the configured period
  • Button Clear entire GPS history — removes all location data regardless of date (irreversible)
⚠️
GDPR & employment law responsibility Location data is collected and stored exclusively on the customer's server. The administrator is responsible for informing employees and establishing an appropriate legal basis in accordance with employment law provisions on monitoring. The plugin provides a technical retention tool — it does not replace the data controller's legal obligations.

Prospects — Sales Pipeline

Database of potential customers in the acquisition process. Prospect data: company name, pipeline stage, contact person, notes, contact history.

📱

Mobile App (PWA)

Configuration of the progressive web app for sales reps. Reps install the app directly on their phone (Android / iPhone).

Full app name
Shown during installation and in system settings
Short name
max 12 chars
Shown under the icon on the phone's home screen
Icon 192×192 px
Upload from WordPress Media
Icon 512×512 px
Upload from WordPress Media
Post-login redirect — rep
Landing page for reps after logging in via the app
Post-login redirect — customer
Landing page for customers after logging in
Post-logout redirect
Page shown after logging out of the app
⚙️

System — Modules

Toggle each module on or off via AJAX — no page reload. A disabled module does not load at all, with zero performance impact.

ModuleDescriptionDefault
🏠 Landing pageWholesale storefront [hurt_landing] with CTAs to login and registrationEnabled
📄 Product PDF cardGenerate and download product sheets as PDFs from the product pageEnabled
📩 Quote requestsQuote request form for new customers. Price negotiation, conversion to orderDisabled
📈 Volume discountsAutomatic discounts based on cumulative turnover. Requires Business plan or active add-onDisabled
📍 Report Location (GPS)Records GPS location from the rep's phone when saving an activity report. A Google Maps link appears in the reports table. Requires configuring a retention period (7–365 days) in the Reports tab before activation — GDPR safeguard. Requires PRO plan.Disabled
🗺️ Route PlanningShortcode [hurt_planner] — reps select customers, arrange stop order and open the optimal route in Google Maps. My / All customers toggle, drag & drop on desktop, ↑↓ arrows on mobile. Requires Business plan or add-on.Enabled
⚠️
After changing a module's state, reload the panel page to see the changes reflected in the menu and interface.
🔑

License

License key activation panel. Enter the key received after purchase and click Activate. License status is verified with the licensing server.

ℹ️
An active license is required to receive automatic plugin updates.
🔧

Shortcode Reference

All shortcodes are inserted into WordPress page content (block editor or classic editor). Each shortcode renders only for the appropriate role — unauthorised users see nothing, or a "No access" message.

💡
One page = one shortcode Create a dedicated WordPress page for each shortcode below, paste the code, and optionally restrict access by role using a plugin like Private Pages or Role-Based Menu.

Starter — all plans

ShortcodeSuggested pageWho sees itWhat it does
[hurt_landing]/wholesale/Everyone (guests)Wholesale storefront for non-logged-in visitors. Hero, 3 features, "How it works", CTAs to login and registration.
[hurt_rejestracja]/register/Everyone (guests)Public B2B registration form with VAT number field. Account requires admin approval.
[hurt_grid]/catalog/Logged-in customer / repB2B product grid with search, filters, AJAX cart, price tiers, bundles and loyalty capsules.
[hurt_checkout]/order/Sales rep (shop_manager)Pre-checkout for reps — customer selection (Mine / All), place an order on behalf of a customer.
[hurt_product]WooCommerce product page templateLogged-in customer / repProduct card with dynamic tabs, PDF button and price tiers.
[hurt_dodaj_klienta]/add-customer/Sales rep (shop_manager)Form for reps to add a new customer. Looks up company data by VAT number, auto-fills fields.
[hurt_klienci]/my-customers/Rep / adminCustomer CRM panel. Reps see their own customers; admins see everyone.
[hurt_chat]/messenger/Logged-in userBuilt-in messenger between customers, reps and admins.
[hurt_chat_badge url="/messenger/"]Header / any pageLogged-in userFloating 💬 icon with unread message count.
[ah_offcanvas_menu]Widget / headerEveryoneSlide-out menu with hamburger, cart button and user panel.

Pro and above

ShortcodeSuggested pageWho sees itWhat it does
[hurt_moje_wyniki]/my-results/Sales rep (shop_manager)Rep's sales statistics dashboard — revenue, order count, customer ranking, charts.
[hurt_raport]/reports/Rep / adminActivity reporting panel and prospect pipeline.
[hurt_tasks]/tasks/Rep / adminTask list with priorities and statuses.
[hurt_dashboard_prezes]/dashboard/Admin + email listManagement overview — rep rankings, sales, activity, pipeline.

Business and above

ShortcodeSuggested pageWho sees itWhat it does
[hurt_ksiegowy]/accounting/Role hurt_ksiegowy / adminDeferred payment settlement panel. Confirm payments, overdue filter, handle rep exception requests.
[hurt_planner]/route-planner/Sales rep (shop_manager) / adminRoute planner for customer visits. My / All customers toggle, search, route panel with drag & drop (desktop) and ↑↓ arrows (mobile), start point via GPS or typed address. Opens Google Maps with stops in the chosen order. Also available as an add-on for the Pro plan.

Add-ons à la carte

ShortcodeSuggested pageWho sees itWhat it does
[hurt_quote_form] /quote/ Everyone (logged in and guests) Quote request form — product catalog without prices, cart, contact form. Available without login for new customers. Requires the Quote Requests module under System → Modules.
[hurt_turnover_watch] /near-threshold/ Sales rep (shop_manager) / admin Customer list sorted by distance from the next discount threshold. Reps see only their own customers. Attributes: per_page (5–100, default 30), show_all="1" (admin only). Requires Volume Discounts module.
[hurt_planner] /route-planner/ Sales rep (shop_manager) / admin Route planner — available as an add-on for the Pro plan. Identical functionality to the Business plan. Requires the Route Planning module under System → Modules. See the Business and above section for the full description.
ℹ️
The Capsules and Bundles modules have no separate shortcodes — they render automatically inside [hurt_grid] and on product pages when the modules are active.

Page Map — Ready-to-use Installation Recipe

Create the WordPress pages below and paste the appropriate shortcode into each. Slugs are suggestions — you can change them.

#Page titleSlugShortcodePlan
1Wholesale storefront/wholesale/[hurt_landing]Module
2B2B Registration/register/[hurt_rejestracja]Starter
3Product catalog/catalog/[hurt_grid]Starter
4Place order (rep)/order/[hurt_checkout]Starter
5My customers/my-customers/[hurt_klienci]Starter
6Add customer/add-customer/[hurt_dodaj_klienta]Starter
7Messenger/messenger/[hurt_chat]Starter
8Quote request/quote/[hurt_quote_form]Add-on
9Near threshold (rep)/near-threshold/[hurt_turnover_watch]Add-on
10My results/my-results/[hurt_moje_wyniki]Pro
11Activity reports/reports/[hurt_raport]Pro
12My tasks/tasks/[hurt_tasks]Pro
13Management dashboard/dashboard/[hurt_dashboard_prezes]Pro
14Accounting (settlements)/accounting/[hurt_ksiegowy]Business
15Route planner (rep)/route-planner/[hurt_planner]Business / Add-on
⚠️
After creating the pages: Go to Wholesale Panel → Wholesale → Product Grid and enter the order page URL (/order/) in the "Pre-Checkout URL" field. Without this, the "Proceed to order" button sends customers to the standard WooCommerce cart instead of the rep pre-checkout.