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.
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)
<strong>, <em>, <br>.Wholesale — Store Settings
Product Grid
Configuration of the wholesale product catalog. Shortcode: [hurt_grid]
General Settings
supplements,vitamins. Empty = all products{n}, {price}, {currency}Off-Canvas Menu
Slide-out menu with hamburger, cart button and user panel. Shortcode: [ah_offcanvas_menu]
Product Tabs
Tab builder for the product page. Drag & drop reordering, Heroicons icons, color picker, removal of unused tabs.
Login Page
| Group | Sample parameters |
|---|---|
| General | Page background color, logo URL, logo size and border radius |
| Form | Field background, border color, label text, focus effect |
| Login button | Background color, text color, button shadow |
| Links & messages | Link color, info message background, error style |
Homepage (Landing Page)
| Section | What you can configure |
|---|---|
| Hero | Brand name, subtitle, headline, feature bullets, photo URL, footnote |
| Buttons & links | Text and URL for: Login, Request Access, Quote Request, CTA |
| Three features | Icon (emoji) and text for each of the three features shown below the hero |
| How it works | Section title and descriptions of the four purchasing process steps |
| Colors | Primary 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.
| Column | Description |
|---|---|
| Product | Product name with thumbnail and SKU number |
| Price | Regular product price — editable field |
| Sale price | Sale 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
| Column | Description |
|---|---|
| Name / ID | Full details. BLOCKED badge on suspended accounts |
| Phone | Editable field — changes save on blur |
| Last login | Date and time + relative time ("2 weeks ago") |
| Logins | Number of logins in the current month — green if > 0 |
| Max discount % | Maximum discount this rep can grant to a customer (0–100%) |
| Actions | Block/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.
Substitute Commission (Commission Split)
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
| Tab | Fields |
|---|---|
| Billing addresses | Company, first/last name, address, postcode, city, country, phone, email |
| Delivery addresses | Company, first/last name, address, postcode, city, country |
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
| Status | Meaning |
|---|---|
| New | Quote received — awaiting action |
| Offer sent | Rep has priced and sent the offer to the customer |
| Accepted | Customer accepted the offer |
| Rejected | Customer or administrator rejected the request |
| Expired | Offer validity period has passed |
| Ordered | Quote has been converted into a WooCommerce order |
Messenger (Chat)
| Role | Capabilities |
|---|---|
| Administrator | Sees all threads, can write to any user |
| Sales rep | Sees threads for their own customers and unassigned ones; writes to their customers and admins |
| Customer | Writes 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
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.
| Column | Description |
|---|---|
| Company / Email | Customer identification details |
| Current group | Name of the assigned discount group, or — if none |
| Individual discount | Discount set directly on the customer's account |
| Effective discount | Highest available discount — the one actually applied at checkout |
| Assign | Group selection dropdown — change takes effect immediately without saving a form |
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.
Threshold Configuration
Customers → Volume Discounts — configuration panel with four status cards and a threshold table.
Revenue Calculation Window
- 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)
Threshold Table
| Field | Description |
|---|---|
| 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 from | Discount | Tier label |
|---|---|---|
| €2,500 | 3% | Active customers |
| €6,000 | 5% | Regular customers |
| €12,000 | 8% | Strategic customers |
| €25,000 | 12% | Key accounts |
Status Cards
| Card | What it shows |
|---|---|
| Last recalculation | Date and time of the last automatic recalculation |
| Customers with discount | Number of customers currently holding an active volume discount |
| Customers checked | Total number of customers evaluated in the last recalculation |
| Active window | Currently 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.
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.
| Column | Description |
|---|---|
| Company | Customer name with a link to their CRM profile |
| Current revenue | Net total from the current calculation window (including the current month) |
| Progress | Bar visualising revenue relative to the next threshold |
| Needed for next tier | Net amount separating the customer from the next discount — a concrete talking point for the sales call |
| Current discount | Volume 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.
| Element | What it shows |
|---|---|
| Hero — current discount | Discount percentage active this month (green when > 0%). Caption: Based on revenue Jan – Mar 2026: €34,500 |
| Revenue for period | Net total from the current window with a period label, e.g. from the last 3 months (Jan – Mar 2026) |
| Progress bar | Visual 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 table | All configured tiers with achieved ones marked (✓) |
How Recalculation Works
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.
Settlement Panel
Table of all orders with deferred payment (7 / 14 / 21 / 30 days), sorted by default from the nearest due date.
| Column | Description |
|---|---|
| Order | WooCommerce order number with a link to the order details |
| Customer / Company | Company data and the customer's assigned account manager |
| Amount | Gross order value |
| Payment due | Due date. Red when overdue, yellow when due today or tomorrow |
| Status | Current settlement status (see table below) |
| Actions | Confirm payment — marks the order as paid with one click and automatically lifts the customer block (if no other overdue orders remain) |
Settlement Statuses
| Status | Meaning |
|---|---|
| Pending | Due date has not yet passed — customer can order normally, including on deferred payment |
| Overdue | Payment due date has passed — deferred payment option is blocked for this customer |
| Paid | Accountant confirmed payment — block lifted |
| Exception | Temporary block removal granted on request from a sales rep — valid for one order |
How the Payment Block Works
Payment Confirmation Flow
_hurt_payment_settled → 1Payment 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
_hurt_payment_exception → 1Overdue 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
| Type | Who sees it | Use case |
|---|---|---|
| Customer | Logged-in customer | Promotions, customer announcements |
| System | Sales rep | Internal 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
{collected}, {total}, {discount}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.
- 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)
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).
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.
| Module | Description | Default |
|---|---|---|
| 🏠 Landing page | Wholesale storefront [hurt_landing] with CTAs to login and registration | Enabled |
| 📄 Product PDF card | Generate and download product sheets as PDFs from the product page | Enabled |
| 📩 Quote requests | Quote request form for new customers. Price negotiation, conversion to order | Disabled |
| 📈 Volume discounts | Automatic discounts based on cumulative turnover. Requires Business plan or active add-on | Disabled |
| 📍 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 Planning | Shortcode [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 |
License
License key activation panel. Enter the key received after purchase and click Activate. License status is verified with the licensing server.
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.
Starter — all plans
| Shortcode | Suggested page | Who sees it | What 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 / rep | B2B 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 template | Logged-in customer / rep | Product 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 / admin | Customer CRM panel. Reps see their own customers; admins see everyone. |
[hurt_chat] | /messenger/ | Logged-in user | Built-in messenger between customers, reps and admins. |
[hurt_chat_badge url="/messenger/"] | Header / any page | Logged-in user | Floating 💬 icon with unread message count. |
[ah_offcanvas_menu] | Widget / header | Everyone | Slide-out menu with hamburger, cart button and user panel. |
Pro and above
| Shortcode | Suggested page | Who sees it | What 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 / admin | Activity reporting panel and prospect pipeline. |
[hurt_tasks] | /tasks/ | Rep / admin | Task list with priorities and statuses. |
[hurt_dashboard_prezes] | /dashboard/ | Admin + email list | Management overview — rep rankings, sales, activity, pipeline. |
Business and above
| Shortcode | Suggested page | Who sees it | What it does |
|---|---|---|---|
[hurt_ksiegowy] | /accounting/ | Role hurt_ksiegowy / admin | Deferred payment settlement panel. Confirm payments, overdue filter, handle rep exception requests. |
[hurt_planner] | /route-planner/ | Sales rep (shop_manager) / admin | Route 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
| Shortcode | Suggested page | Who sees it | What 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. |
[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 title | Slug | Shortcode | Plan |
|---|---|---|---|---|
| 1 | Wholesale storefront | /wholesale/ | [hurt_landing] | Module |
| 2 | B2B Registration | /register/ | [hurt_rejestracja] | Starter |
| 3 | Product catalog | /catalog/ | [hurt_grid] | Starter |
| 4 | Place order (rep) | /order/ | [hurt_checkout] | Starter |
| 5 | My customers | /my-customers/ | [hurt_klienci] | Starter |
| 6 | Add customer | /add-customer/ | [hurt_dodaj_klienta] | Starter |
| 7 | Messenger | /messenger/ | [hurt_chat] | Starter |
| 8 | Quote request | /quote/ | [hurt_quote_form] | Add-on |
| 9 | Near threshold (rep) | /near-threshold/ | [hurt_turnover_watch] | Add-on |
| 10 | My results | /my-results/ | [hurt_moje_wyniki] | Pro |
| 11 | Activity reports | /reports/ | [hurt_raport] | Pro |
| 12 | My tasks | /tasks/ | [hurt_tasks] | Pro |
| 13 | Management dashboard | /dashboard/ | [hurt_dashboard_prezes] | Pro |
| 14 | Accounting (settlements) | /accounting/ | [hurt_ksiegowy] | Business |
| 15 | Route planner (rep) | /route-planner/ | [hurt_planner] | Business / Add-on |
/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.