# ProductBay — Complete Documentation
> This file contains the complete documentation for ProductBay,
> compiled into a single text file for consumption by AI assistants and LLMs.
> Generated automatically — do not edit by hand.
> Documentation website: https://docs.wpanchorbay.com/productbay
> Plugin homepage: https://wpanchorbay.com/plugins/productbay/
> WordPress.org: https://wordpress.org/plugins/productbay/
> GitHub: https://github.com/wpanchorbay/productbay/
## Table of Contents
### Guide — Getting Started
- Introduction: https://docs.wpanchorbay.com/productbay/guide/introduction
- Requirements: https://docs.wpanchorbay.com/productbay/guide/requirements
- Installation: https://docs.wpanchorbay.com/productbay/guide/installation
- Quick Start: https://docs.wpanchorbay.com/productbay/guide/getting-started
### Guide — Advanced
- Admin Bar: https://docs.wpanchorbay.com/productbay/guide/admin-bar
- Clear All Data: https://docs.wpanchorbay.com/productbay/guide/clear-all-data
- Uninstallation: https://docs.wpanchorbay.com/productbay/guide/uninstallation
### Features — Core
- Table Dashboard: https://docs.wpanchorbay.com/productbay/features/table-dashboard
- Create Table: https://docs.wpanchorbay.com/productbay/features/create-table
- Creation Wizard: https://docs.wpanchorbay.com/productbay/features/creation-wizard
- Manual Table Creation: https://docs.wpanchorbay.com/productbay/features/create-page
- Show Table: https://docs.wpanchorbay.com/productbay/features/show-table
- Gutenberg Blocks: https://docs.wpanchorbay.com/productbay/features/gutenberg-blocks
- Shortcodes: https://docs.wpanchorbay.com/productbay/features/shortcodes
### Features — Table Configuration
- Product Sources: https://docs.wpanchorbay.com/productbay/features/product-sources
- Column Editor: https://docs.wpanchorbay.com/productbay/features/column-editor
- Custom Field Column (Pro): https://docs.wpanchorbay.com/productbay/features/custom-field-column
- Combined Column (Pro): https://docs.wpanchorbay.com/productbay/features/combined-column
- Display Customization: https://docs.wpanchorbay.com/productbay/features/display-customization
- Available Options: https://docs.wpanchorbay.com/productbay/features/available-options
- Import / Export (Pro): https://docs.wpanchorbay.com/productbay/features/import-export
### Features — Frontend
- WooCommerce Integration: https://docs.wpanchorbay.com/productbay/features/woocommerce
- Variable & Grouped Modes (Pro): https://docs.wpanchorbay.com/productbay/features/variable-grouped-modes
- Search & Filters: https://docs.wpanchorbay.com/productbay/features/search-and-filters
- Price Filter (Pro): https://docs.wpanchorbay.com/productbay/features/price-filter
### Features — Settings
- Default Configuration: https://docs.wpanchorbay.com/productbay/features/default-configuration
- Plugin Settings: https://docs.wpanchorbay.com/productbay/features/plugin-settings
- Activity Log: https://docs.wpanchorbay.com/productbay/features/activity-log
- License: https://docs.wpanchorbay.com/productbay/features/license
### Developer Reference
- Architecture: https://docs.wpanchorbay.com/productbay/developer/architecture
- REST API: https://docs.wpanchorbay.com/productbay/developer/rest-api
- Hooks & Filters: https://docs.wpanchorbay.com/productbay/developer/hooks
- Contributing: https://docs.wpanchorbay.com/productbay/developer/contributing
### Support
- FAQ: https://docs.wpanchorbay.com/productbay/faq
- Known Issues: https://docs.wpanchorbay.com/productbay/known-issues
### Release History
- Changelog: https://docs.wpanchorbay.com/productbay/changelog
- Pro Changelog: https://docs.wpanchorbay.com/productbay/pro-changelog
---
============================================================
SECTION: GUIDE — GETTING STARTED
============================================================
## Introduction
> Source: https://docs.wpanchorbay.com/productbay/guide/introduction
# Introduction
**ProductBay** is a modern, high-performance WordPress plugin that completely transforms how your WooCommerce products are displayed to your customers. Designed with both aesthetics and speed in mind, it replaces the standard grid view with an advanced, interactive spreadsheet-like table layout. Powered by a robust React-driven admin dashboard and a lightweight, extremely fast frontend rendering engine, ProductBay ensures your customers get a fluid, intuitive, and conversion-optimized browsing experience.
## Who Should Use ProductBay?
ProductBay is explicitly engineered to serve a variety of WooCommerce businesses, making it the perfect solution if your store fits into any of these categories:
- **Wholesale and B2B Stores:** Buyers need to order bulk quantities of products rapidly without navigating back and forth across multiple pages. ProductBay's bulk add-to-cart system makes this trivial.
- **Restaurant Menus & Takeouts:** Customers ordering food need a readable list where they can select variations (e.g., sizes, extras) quickly from a single view.
- **Audio, Digital, and Software Stores:** When visual imagery isn’t the primary selling point, a clean table listing product titles, descriptions, and prices converts significantly better.
- **Hardware, Spare Parts, and Technical Equipment:** Customers shopping for specific technical products often search by SKU, part numbers, or exact product names, where a dense data display is essential.
- **General E-commerce & Retail:** Any WooCommerce store looking to modernize their product listings with a clean, high-converting list view that drastically reduces checkout friction.
## Key Highlights
### Hybrid Architecture
Unlike traditional table plugins, ProductBay uses a modern hybrid approach:
| Layer | Technology | Purpose |
|-------|-----------|---------|
| **Admin Panel** | React SPA | Responsive, dynamic table builder |
| **Frontend Display** | Lightweight PHP rendering | SEO-friendly, fast-loading tables |
### What You Can Do
- Create unlimited product tables with a guided wizard
- Choose products by category, sale status, specific IDs, or all products
- Drag-and-drop column reordering, responsive visibility rules and ability to rename columns as you wish
- Customize every visual detail — colors, fonts, borders, padding, hover effects
- See **Live Preview** of table changes while building
- Enable AJAX add-to-cart (single and bulk) without page reloads
- Embed tables anywhere using simple **shortcodes** or **Gutenberg blocks**
- View tables on dedicated pages instantly via **auto-generated Permalinks**
- Support for **Simple**, **Variable**, **Grouped**, and **External/Affiliate** product types
---
## Requirements
> Source: https://docs.wpanchorbay.com/productbay/guide/requirements
# Requirements
Before installing ProductBay, make sure your environment meets the following requirements.
## System Requirements
| Requirement | Minimum Version | Recommended |
|-------------|----------------|-------------|
| **WordPress** | 6.0+ | Latest stable |
| **WooCommerce** | 6.1+ | Latest stable |
| **PHP** | 7.4+ | 8.0+ |
> **Warning: WooCommerce Required**
> ProductBay is a WooCommerce extension. It **will not activate** without WooCommerce installed and active.
## Product Requirements
ProductBay is designed to display your existing WooCommerce products. To create and preview tables, you must have:
- **At least one published product** in your WooCommerce store.
- If using category-based tables, products must be assigned to those categories.
> **Tip: If you're just starting out, we recommend adding a few test products or [importing sample data](https://docs.woocommerce.com/document/importing-woocommerce-sample-data/) from WooCommerce.**
>
## Browser Compatibility
### Admin Panel (Table Builder)
The React-based admin panel works best in modern evergreen browsers:
- Chrome / Edge (latest)
- Firefox (latest)
- Safari (latest)
### Frontend Tables
Product tables rendered on the frontend are built with standard HTML, CSS, and minimal JavaScript. They work in all modern browsers, including mobile browsers.
## Hosting
ProductBay works on any standard WordPress hosting. No special server configuration is required. All assets (JavaScript, CSS) are bundled locally within the plugin — **no external CDN or remote scripts are loaded**.
---
## Installation
> Source: https://docs.wpanchorbay.com/productbay/guide/installation
# Installation
ProductBay can be installed like any standard WordPress plugin.
## Method 1: WordPress Plugin Directory
1. In your WordPress admin, go to **Plugins → Add New**.
2. Search for **"ProductBay"**.
3. Click **Install Now**, then **Activate**.
### Download
You can download the plugin in two ways:
- Go to [WordPress.org plugin repository](https://wordpress.org/plugins/productbay/) and click **Download**. or
- Get the `productbay.zip` file from the [github releases page](https://github.com/wpanchorbay/productbay/releases/latest).
## Method 2: WordPress Plugin Upload
1. [Download](#download) the plugin.
2. In your WordPress admin, go to **Plugins → Add New → Upload Plugin**.
3. Choose the `productbay.zip` file and click **Install Now**.
4. After installation completes, click **Activate**.
## Method 3: Manual Upload (FTP)
1. [Download](#download) and extract the `productbay.zip` file.
2. Upload the `productbay` folder to `/wp-content/plugins/` on your server via FTP.
3. In your WordPress admin, go to **Plugins** and activate **ProductBay**.
## Installing ProductBay Pro [Pro]
If you've purchased ProductBay Pro, here is how to install and activate it:
1. **Purchase** — Buy a license from [wpanchorbay.com](https://wpanchorbay.com/plugins/productbay/).
2. **Download** — Log in to your account and download the `productbay-pro.zip` file.
3. **Upload** — In your WordPress admin, go to **Plugins → Add New → Upload Plugin**.
4. **Install and Activate** — Choose the `.zip` file, install, and click **Activate**.
5. **Activate License** — Navigate to **ProductBay → Settings → License** and enter your key.
> **Note:** ProductBay Pro is an add-on. The free version of ProductBay (v1.2.0 or higher) must be installed and active for the Pro features to work.
For detailed instructions on licensing and updates, see the [License Management docs](/features/license).
## Post-Installation
After activation:
1. **Verify WooCommerce is active** — ProductBay requires WooCommerce. If WooCommerce is not active, you'll see a notice prompting you to activate it.
2. **Navigate to ProductBay** — Find the **ProductBay** menu item in your WordPress admin sidebar.
3. **Complete Onboarding** — The first time you open ProductBay, you'll see a welcome/onboarding screen to get you started.
> **Tip: If you don't see the ProductBay menu item after activation, try refreshing the admin page or clearing your browser cache.**
>
---
## Quick Start
> Source: https://docs.wpanchorbay.com/productbay/guide/getting-started
# Quick Start
This guide walks you through creating your first product table and embedding it on a page, in under a few seconds.
## Step 1: Open ProductBay
Navigate to **ProductBay** in your WordPress admin sidebar and click on the **"ProductBay"** button.
You'll see a wizard to create a new table:
if not, click on the wizard button located at the bottom-right corner of the page, it will open the wizard:
## Step 2.1: Setup New Table
- Give your table a **name** (e.g., "Summer Sales Products")
- Choose a **product source**:
- **All Products** - display everything in your store
- **By Category** - select specific categories
- **On Sale** - only show products currently on sale
- **Specific Products** - hand-pick products by name, ID, or SKU
Click **Next** to proceed.
## Step 2.2: Columns
- Configure which columns (1) to display (Image, Name, Price, SKU, Stock, Summary, etc.)
- **Drag and drop** to reorder columns
- Toggle visibility per device size (desktop, tablet, mobile)
- See live preview (2) of table changes while building
Click **Next** to proceed.
## Step 2.3: Display
Customize the visual design of your table:
- Header and body colors
- Button styles and hover effects
- Border styles and cell padding
- Typography settings
*(Scroll down to see all the options)*
**Live preview** updates in real-time as you make changes.
Click **Next** to proceed.
## Step 2.4: Options
Configure table behavior:
- Enable/disable **search**, **pagination**, **image lightbox**
- Set **products per page** and **pagination style**
- Configure **add-to-cart** options (AJAX, quantity selectors)
- Enable **category filters** and **product type filters**
- Choose **variable/grouped product display modes**
Click **Create Table** button to save your table.
## Step 2.5: Finish
Congratulations! You've created your first product table. 🎉 A celebratory confetti animation confirms your table is live!
1. You can close the wizard by clicking on the close button (X) in the top-right corner of the wizard.
2. You can view/edit your table by clicking on the **"View/Edit this table"** button.
3. You can see all tables list by clicking on the **"Show all tables"** button.
## Step 3: Copy the Shortcode
After publishing, you'll see a shortcode like:
```
[productbay id="1"]
```
**Copy this shortcode.** You can copy the shortcode by clicking on the copy button (Copy) in the shortcode box or select the shortcode and copy it manually.
You can also copy the shortcode from the **"Show all tables"** page.
## Step 4: Embed on a Page
1. Go to **Pages → Add New** (or edit an existing page)
2. Add a **Shortcode** block (or paste directly in a Classic Editor)
3. Paste the shortcode: `[productbay id="1"]`
4. **Publish** or **Update** the page
## Step 5: View Your Table
Visit the page on the frontend. You should see your product table with all the columns, styling, and features you configured!
> **Tip: You can embed the same table on multiple pages, or place multiple different tables on a single page, each with its own independent styling.**
>
## What's Next?
- Explore [Table Dashboard](/features/table-dashboard.html) to manage your tables
- Learn how to [Create Tables](/features/create-table.html) for best conversion rates
- See how to use [Shortcodes](/features/shortcodes.html) to embed tables anywhere
---
============================================================
SECTION: GUIDE — ADVANCED
============================================================
## Admin Bar
> Source: https://docs.wpanchorbay.com/productbay/guide/admin-bar
# Admin Bar Integration
This guide explains how to control the ProductBay quick-access menu in the WordPress Admin Bar.
## What is the Admin Bar Menu?
The WordPress Admin Bar (the toolbar at the top of your site when logged in) can include a ProductBay menu. This provides quick shortcuts to ProductBay menu options.
## Enabling or Disabling the Menu
By default, the Admin Bar menu is enabled for administrators. You can toggle this setting based on your preference.
1. Go to **ProductBay → Settings** in your WordPress admin.
2. Select the **Plugin Settings** tab.
3. Look for the **Admin Bar** section.
4. Toggle the **Show in Admin Bar** switch.
- **Enabled**: The ProductBay menu will appear in the top toolbar.
- **Disabled**: The ProductBay menu will be hidden.
## Visual Example
1. Admin Bar Disabled
2. Enabled Admin Bar
3. Reload the page.
4. Admin Bar Appeared. On mouse hover, you can see menu options.
## Benefits of the Admin Bar Menu
The Admin Bar integration is designed to speed up your workflow:
- **Quick Links**: Jump straight to your table list without having to find the sidebar menu.
- **Front-end Access**: When viewing your site's front-end, you can quickly navigate back to the plugin settings or create a new table.
---
## Clear All Data
> Source: https://docs.wpanchorbay.com/productbay/guide/clear-all-data
# Clear All Data
This guide explains how to completely reset ProductBay and remove all its data from your WordPress site.
## When to Use "Clear Data"
You might want to use the Clear Data feature if:
- You want to start from scratch with a clean installation.
- You are moving from a staging environment to production and want to remove test tables.
- You want to troubleshoot issues by resetting to factory defaults.
## How to Reset Data
The Clear Data feature is a powerful tool that resets the plugin to its "freshly installed" state.
1. Go to **ProductBay → Settings** in your WordPress admin.
2. Select the **Plugin Settings** tab.
3. Scroll down to the **Clear Data** section.
4. Click the **Reset Data** button.
5. A confirmation modal will appear. To prevent accidental resets, you must type **"RESET"** (all caps) into the confirmation field.
6. Click **Yes, Reset Everything**.
> **Danger: Resetting is Permanent**
> This action is **irreversible**. Once you confirm the reset, all your saved tables, custom styles, and plugin configurations will be permanently deleted from the database.
## Visual Example
- Click on **Reset Data** button.
- Type **"RESET"** (all caps) into the confirmation field and then click **Yes, Reset Everything** button.
Do not refresh the page until the process is complete. And that's it. You will see a success notification.
## Success Notification
Once the process is complete, you will see a success notification indicating how many tables were deleted. The page will automatically reload to reflect the clean state.
## What Gets Reset
When you perform a factory reset, the following happens:
- **Product Tables are Deleted**: Every table you've created will be permanently removed.
- **Settings are Restored**: All plugin settings are reverted to their default values.
- **Onboarding is Reset**: The onboarding wizard will reappear the next time you visit the plugin dashboard.
- **Styles are Cleared**: Any custom CSS or design configurations are removed.
---
## Uninstallation
> Source: https://docs.wpanchorbay.com/productbay/guide/uninstallation
# Uninstallation
This page explains how to properly remove ProductBay from your WordPress site and what happens to your data.
## Deactivation vs. Uninstallation
| Action | What Happens |
|--------|-------------|
| **Deactivate** | The plugin is disabled but your tables, settings, and data are preserved. You can reactivate later without losing anything. |
| **Delete (Uninstall)** | The plugin is removed from your site. Whether data is deleted depends on your settings. |
## Controlling Data Removal
ProductBay gives you control over what happens when the plugin is deleted:
1. Go to **ProductBay → Settings** in your WordPress admin
2. Select **Plugin Settings** tab
3. Look for the **"Delete data on uninstall"** toggle
4. Toggle it based on your preference:
| Setting | Effect on Uninstall |
|---------|-------------------|
| **Enabled** (default) | All ProductBay data is permanently deleted: tables, table configurations, plugin settings, and onboarding state |
| **Disabled** | Data is preserved in the database even after the plugin is deleted. Useful if you plan to reinstall later. |
> **Danger: Data Deletion Is Permanent**
> When "Delete data on uninstall" is enabled, deleting the plugin will **permanently remove** all your tables and settings. This cannot be undone. Make sure to export or back up any important configurations before uninstalling.
## What Gets Deleted
When the plugin is uninstalled with data deletion enabled, the following is removed:
- **All ProductBay table posts** (custom post type: `productbay_table`)
- **Table configuration metadata** (`_productbay_config` post meta)
- **Plugin settings** (`productbay_settings` option)
- **Onboarding state** (`productbay_onboarding_completed` option)
## How to Uninstall
1. Go to **Plugins** in your WordPress admin
2. Click **Deactivate** next to ProductBay
3. Click **Delete** to remove the plugin
4. If "Delete data on uninstall" was enabled, all data is now removed
## Reinstalling
If you previously disabled data deletion before uninstalling, your tables and settings will still be in the database. Simply reinstall and activate ProductBay — your data will be restored automatically.
---
============================================================
SECTION: FEATURES — CORE
============================================================
## Table Dashboard
> Source: https://docs.wpanchorbay.com/productbay/features/table-dashboard
# Table Dashboard
The Table Dashboard is the homepage of the plugin and your central hub for managing all product tables in ProductBay.
## Overview
When you navigate to **ProductBay** in the WordPress admin, you'll see the **Product Tables** view. This dashboard provides a complete overview of your tables with powerful management tools.
### Dashboard States
**Empty State**
If you haven't created any tables yet, the dashboard displays a clean empty state.
**Active Tables List**
Once tables are created, they appear in a structured list. Hovering over a table row reveals a contextual action menu directly below the title, allowing you to **Edit**, **Duplicate**, **Toggle Status**, or **Delete** the table instantly.
## Table List
Each table in the list displays:
| Column | Description |
|--------|-------------|
| **Checkbox** | Select tables for bulk actions |
| **Title** | The name you gave your table |
| **Shortcode** | The embed code (e.g., `[productbay id="1"]`) - click to copy |
| **Permalink** | The shareable URL for the table's dedicated page - click to copy |
| **Source** | Where products come from (All, Category, Sale, Specific) |
| **Status** | Published or Private |
| **Date** | When the table was created/published and modified |
## Search & Filtering
### Search
Use the search bar at the top to quickly find tables by name.
### Filters
Filter your tables by:
- **Status**: Published, Private, or All
- **Source**: All Products, Category, Sale, or Specific
You can combine multiple filters and use the **Clear all filters** option to reset.
## Table Actions
### Bulk Actions
To manage multiple tables at once:
1. **Select** tables using the checkboxes on the left.
2. Click the **Bulk Actions** dropdown menu.
3. Choose an action: **Delete**, **Set Published**, **Set Private** or **Export Selected (PRO)**.
4. Click **Apply** to execute the changes.
### Individual Actions
Hover over any table row to reveal the following management options:
- **Edit**: Opens the table in the edit page for deep configuration.
- **Duplicate**: Instantly creates a complete copy of the table and its settings.
- **Set Private / Publish**: Quickly toggle the visibility status of the table.
- **Preview**: View the table on the frontend using the [permalink](#permalinks).
- **Delete**: Permanently removes the table (requires user confirmation).
> **Warning: Deleted tables cannot be recovered. Ensure you have backups or no longer need the data before confirming deletion.**
>
## Permalinks [Since v1.3.0]
Every saved product table automatically receives a **native WordPress permalink** — a clean, shareable URL that displays the table on a standalone page.
### How It Works
- Permalinks use the `productbay_table` Custom Post Type registered by the plugin.
- The URL structure follows your WordPress permalink settings (e.g., `yoursite.com/productbay/product-table/my-table-slug/`).
- The permalink is displayed in both the **table listing page** and the **table editor sidebar** for quick copying.
- **Automatic Setup**: ProductBay automatically flushes WordPress rewrite rules upon activation, ensuring permalinks work instantly after installation.
### Use Cases
- **Share direct links** to a specific product table via email, social media, or chat.
- **Embed via URL** in platforms that support oEmbed or link previews.
- **Dedicated landing pages** — each table has its own page without needing to manually create a page and paste a shortcode.
> **Tip: Troubleshooting**
> If your permalinks give a 404 error, you can manually force a refresh by going to **Settings → Permalinks** in WordPress and clicking **Save**.
## Table Statuses
Maintenance of table visibility is controlled by two primary statuses:
| Status | Visibility |
|--------|-----------|
| **Published** | Publicly visible on your site via Gutenberg block or shortcode and permalink. |
| **Private** | Invisible to visitors. Admins will see a placeholder notice where the table would normally appear. |
### How to Change Status
You can toggle a table's visibility in three ways:
1. **Bulk Actions**: Select one or more tables and use the "Set Published" or "Set Private" bulk options.
2. **Quick Toggle**: Hover over a table row and click the status action (**Publish** or **Set Private**).
3. **Table Editor**: Click the table title to enter the editor, change the status in the top-right sidebar, and **Save**.
---
## Create Table
> Source: https://docs.wpanchorbay.com/productbay/features/create-table
# Create Table
ProductBay provides two primary workflows for building your product tables, depending on your needs. Whether you want a guided walkthrough or direct manual access, the core configuration engine remains the same.
## Creation Workflows
### [Guided Wizard](./creation-wizard)
Perfect for first-time users or those who prefer a structured, step-by-step setup.
- **Onboarding**: automatically launches when you first activate the plugin.
- **Floating Button**: available in the bottom-right corner. On click, it quickly launches the wizard from anywhere on the admin panel.
- **5-Step Flow**: guides you through Source, Columns, Design, Options, and Publishing.
### [Manual Methods](./create-page)
For administrators who want to jump straight into the creation screen from any WordPress admin area.
- Accessible via the **Plugin Navbar**, **WordPress Menu**, and **Topbar Menu**.
- Click on **Create New Table**
## Real-Time Live Preview
One of ProductBay's most powerful features is the **Real-Time Live Preview** available during the entire creation process.
Regardless of which method you use to start, you will see exactly how your table looks as you built it. Every change to columns, product sources, colors, and layouts is reflected **instantly** in a side-by-side preview panel, no need to save or refresh the page.
> **Warning: Note**
> Actions such as search, pagination, and Add to Cart do not function in the Live Preview. Please save the table and view it on a live page to test these features.
---
## Creation Wizard
> Source: https://docs.wpanchorbay.com/productbay/features/creation-wizard
# Guided Wizard
The Guided Wizard is designed to make building product tables effortless, whether you're a first-time user or an experienced administrator.
## Entry Points
### Welcome Wizard
When you first install and activate ProductBay, the **Welcome Wizard** automatically launches to guide you through creating your very first table. This ensures you can get a table live on your site in under a minute.
### Floating Action Button
A **Floating Action Button (FAB)** is available at the bottom-right corner of the admin panel. Click this button at any time to quickly launch the wizard and start a new build.
## Wizard Steps
The wizard consists of **5 focused steps**:
1. **Setup** — Name your table and choose a product source
2. **Columns** — Select and arrange the columns to display
3. **Display** — Customize the visual design
4. **Options** — Configure behavior and features
5. **Finish** — Review and publish
You can navigate between steps freely, changes are preserved as you move back and forth.
## Step 1: Setup
### Table Name
Give your table a descriptive name. This is for your reference only — it's not shown on the frontend.
### Product Source
Choose where your products come from:
| Source | Description |
|--------|-------------|
| **All Products** | Displays all published products in your WooCommerce store |
| **On Sale** | Only products currently on sale |
| **By Category** | Select one or more product categories |
| **Specific Products** | Hand-pick products by searching name, ID, or SKU |
#### Source: Category
1. Select 'By Category' as source
2. Open/Close category list
3. Select/deselect catrgories
4. Search category
5. If needed, reload categories
6. Clear all selected categories
#### Source: Specific Products
1. Select 'Specific Products' as source
2. Search products by name, id or sku
3. Select desired product(s)
4. See selected product(s), you can also remove any selected product from here.
5. Remove all selected product
> **Tip: For each source type, you'll see live statistics showing how many products and categories match your selection.**
>
### Default Sort Order
Configure how products are initially sorted:
- Name (A-Z or Z-A)
- Price (Low to High or High to Low)
- Date (Newest or Oldest first)
- Popularity
## Step 2: Columns
### Available Column Types
| Column | Description |
|--------|-------------|
| **Image** | Product thumbnail image |
| **Name** | Product title (linked to product page) |
| **Price** | Current price (including sale prices) |
| **SKU** | Stock Keeping Unit identifier |
| **Summary** | Product short description |
| **Stock** [v1.2.0+] | Stock status indicator |
| **Date** [v1.2.0+] | Product published date |
| **Taxonomy** [v1.2.0+] | Terms from any registered taxonomy |
| **Rating** [v1.2.0+] | Average customer review rating |
| **Custom Field** [Pro] [v1.2.0+] | Any product meta field or ACF data |
| **Combined** [Pro] [v1.2.0+] | Merge multiple data points into one cell |
### Drag-and-Drop Reordering
Drag columns to change their display order. The live preview updates instantly.
### Responsive Visibility
For each column, you can configure visibility across seven modes — from "All devices" (default) to device-specific options like "Desktop only", "Hide on mobile", or "Hidden". See [Column Editor — Responsive Visibility](/features/column-editor#responsive-visibility) for the full list.
This lets you create streamlined mobile layouts by hiding less essential columns.
## Step 3: Display
The Display step gives you full control over the visual appearance of your table. See [Design Customization](/features/display-customization) for detailed documentation.
Key areas:
- Header styling (background, text color, font weight, text transform)
- Body styling (background, text, alternating rows toggle)
- Button styling (colors, hover colors)
- Layout (border style, border radius toggle, cell padding)
- Hover effects (row hover toggle with custom colors)
## Step 4: Options
### Table Controls
- **Search** — Enable the AJAX search bar
- **Pagination** — Enable paginated results
- **Image Lightbox** — Enable full-size image popup on click
### Pagination Settings
- **Products per page** — Set how many products display per page (default: 10)
- **Pagination Style** — Choose between Standard (numbers), Load More button [Pro], or Infinite Scroll [Pro]
### Taxonomy & Type Filters
- **Enable Categories Filter** — Show a category dropdown filter
- **Enable Product Type Filter** — Show a product type dropdown (Simple, Variable, etc.)
### Cart Functionality
- **Enable Add to Cart** — Show add-to-cart buttons
- **AJAX Add to Cart** — Add to cart without page reload
- **Show Quantity Selector** — Display quantity input fields
- **Variation Badges** — Show badges indicating which variations were added
- **Show Clear All Button** — Display a button to clear all selected products
- **Selected Items View Panel** — Show a floating summary of selected items
### Variable & Grouped Products
- **Variable Product Mode** — Choose display mode: Inline Dropdown (Free), Popup Modal [Pro], Nested Rows [Pro], or Separate Rows [Pro]
- **Grouped Product Mode** — Choose display mode: Inline Dropdown (Free), Popup Modal [Pro], Nested Rows [Pro], or Separate Rows [Pro]
- **Show Options Count** — Display "X options available" subtitle on parent products
- **Expand Nested Rows** [Pro] — Start nested rows expanded by default (only when Nested mode is selected)
## Step 5: Finish
The final step provides:
- A summary of your table configuration
- The option to set the table status (**Published** or **Private**)
- A **Publish** / **Update** button
After publishing, a confetti animation celebrates your success! 🎉 You'll also see the shortcode to copy and embed.
## Editing an Existing Table
To edit a table, click **Edit** from the [Table Dashboard](/features/table-dashboard). The wizard opens with all your existing settings loaded, and you can modify any step.
---
## Manual Table Creation
> Source: https://docs.wpanchorbay.com/productbay/features/create-page
# Manual Methods
While the [Guided Wizard](/features/creation-wizard) provides a guided onboarding experience, you can also initiate table creation through a more straightforward interface.
## Manual Entry Points
You can open the table creation interface from multiple locations:
### 1. Plugin Navbar
Inside the ProductBay admin dashboard, you'll find a **Create New Table** button in the top navigation bar. This is the most common way to start a new table when you're already managing your existing ones.
### 2. WordPress Admin Menu
You can jump directly to the creation screen from any page in the WordPress admin by navigating to **ProductBay → Create New Table** in the left-hand sidebar menu.
### 3. WordPress Topbar
When the plugin is active, a specialized **ProductBay** menu is added to the WordPress admin topbar. Hover over it and select **Create New Table** for instant access. You can turn this feature on or off in the [Plugin Settings](/features/plugin-settings) page.
### 4. Dashboard Empty State
If you haven't created any tables yet, a prominent **Create New Table** call-to-action will appear in the center of the [Table Dashboard](/features/table-dashboard).
## Configuring Your Product Table
Once you've clicked **Create New Table**, you'll be directed to the table configuration screen. This interface allows you to define exactly how your product table looks and behaves.
There are **three tabs** on the table configuration page:
### 1. Table Tab
The **Table Tab** contains the foundational settings for your table, including its name and source data.
1. **Table Name**: Give your table a descriptive name. This is required for internal organization.
2. **Product Source**: Choose where the products for this table come from. By default, this is set to "All Products," but you can filter by category, select specific products, or products on sale.
3. **Table Columns**: Select and order the columns you want to display (e.g., Image, Title, Price, Add to Cart).
4. **Bulk Actions & Selection**: Enable checkboxes for users to select multiple products and perform bulk "Add to Cart" actions.
5. **Live Preview**: This dynamic preview updates in real-time as you adjust settings, allowing you to see your changes instantly.
6. **Status**: Control the visibility of your table. "Published" tables are ready for use, while "Private" tables are only visible to administrators.
7. **Save Table**: Click this button to commit your changes.
### 2. Display Tab
The **Display Tab** allows you to customize the visual aesthetics of your table to match your store's branding.
1. **Colors**: Personalize the table's color scheme.
- **Add to Cart Button Color**: Change the background and text color of the primary action button.
- **Table Header Color**: Set the background color for the table's header row.
- **Table Rows Color**: Set the default background color for rows.
- **Alternating Rows Color**: Apply a different color to every other row for better readability.
- **Row Hover Color**: Define the color when a user hovers their cursor over a row.
2. **Layout & Spacing**: Adjust the structural feel of the table.
- **Border Style**: Choose from solid, dashed, or no border.
- **Border Color**: Set the color of the table and cell borders.
- **Border Radius**: Round the corners of your table for a softer look.
- **Cell Padding**: Control the space between the content and the cell borders.
3. **Typography**: Fine-tune the text appearance for the header.
- **Header Font Weight**: Choose between Normal, Bold, or Extra Bold.
- **Header Text Transform**: Set text to Uppercase, Lowercase, Capitalize, or leave as Normal.
### 3. Options Tab
The **Options Tab** provides advanced controls for table functionality, filters, and cart behavior.
1. **Table Controls**: Configure how users interact with the table.
- **Enable Search Bar**: Allow users to filter products via a search input.
- **Enable Pagination**: Break long lists into multiple pages.
- **Products Per Page**: Define how many products show before pagination kicks in.
- **Pagination Style**: Choose Standard (numbers), Load More button [Pro], or Infinite Scroll [Pro].
- **Enable Image Lightbox**: Open full-size product images in a popup on click.
2. **Taxonomy & Type Filters**: Frontend filter dropdowns.
- **Enable Categories Filter**: Show a category dropdown filter above the table.
- **Enable Product Type Filter**: Show a product type dropdown (Simple, Variable, etc.).
3. **Cart Functionality**: Enhance the shopping experience.
- **Enable Add to Cart**: Show add-to-cart buttons.
- **AJAX Add to Cart**: Add to cart without page reload.
- **Show Quantity Selector**: Allow quantity input per row.
- **Variation Badges**: Show badges for variations added to cart.
- **Show Clear All Button**: Display a bulk deselect button.
- **Selected Items View Panel**: Show a floating summary of selected items.
5. **Variable & Grouped Products**: Configure display modes for complex product types.
- **Variable Product Mode**: Inline Dropdown (Free), Popup Modal [Pro], Nested Rows [Pro], Separate Rows [Pro].
- **Grouped Product Mode**: Inline Dropdown (Free), Popup Modal [Pro], Nested Rows [Pro], Separate Rows [Pro].
- **Show Options Count**: Display "X options available" subtitle.
- **Expand Nested Rows** [Pro]: Start nested rows expanded by default.
> **Info: The **Table Name**, **Live Preview**, **Status**, and **Save Table** controls are persistent and remain accessible regardless of which tab you are currently viewing. Once you are satisfied with your table configuration, click **Save Table** to create your table and add it to the [Table Dashboard](/features/table-dashboard).**
>
---
## Show Table
> Source: https://docs.wpanchorbay.com/productbay/features/show-table
# Show Table
Once you've finished creating your product table, you can easily display it anywhere on your frontend site. ProductBay provides two methods to embed your tables depending on your workflow:
### [Gutenberg Blocks](./gutenberg-blocks) [Since v1.1.0]
The modern and recommended approach. Use the native ProductBay blocks inside the WordPress Block Editor to get a live visual preview and manage tabbed configurations directly inside the post editor.
### [Shortcodes](./shortcodes)
The classic approach. Perfect for embedding tables into older page builders, footer widgets, Classic Editor content, or custom PHP templates.
### [Permalinks](./table-dashboard#permalinks) [Since v1.3.0]
The instant approach. Every table automatically receives a dedicated URL. Share the direct link without needing to create a separate WordPress page.
---
## Gutenberg Blocks
> Source: https://docs.wpanchorbay.com/productbay/features/gutenberg-blocks
# Gutenberg Blocks [Since v1.1.0]
ProductBay 1.1.0 introduces **two native Gutenberg Blocks** to elevate the table building experience directly inside the WordPress Block Editor. Unlike shortcodes, blocks offer a live visual preview and a streamlined configuration interface seamlessly integrated into WordPress.
## Product Table Block
The standard **Product Table** block securely embeds a single ProductBay table into any page or post while giving you a 1:1 preview of the live table.
### How to use it:
1. Open any page or post in the WordPress Block Editor.
2. Click the **`+` (Add Block)** button and search for "Product Table".
3. Insert the **ProductBay - Product Table** block.
4. If you have not selected a table yet, the block will show a placeholder.
- You can click **"Create New Table"** to jump straight to the wizard.
- Or, select an existing table from the dropdown menu in the block toolbar or sidebar.
5. The block will instantly render a live visual preview of your table, matching the frontend exactly.
## Tabbed Product Table Block
The **Tabbed Product Table** block enables you to display multiple ProductBay tables inside a clean, interactive tabbed layout. It's incredibly useful for separating product catalogs by category or separating wholesale vs. retail price lists on a single page.
### How to use it:
1. Insert the **ProductBay - Tabbed Product Table** block into your editor.
2. In the block sidebar inspector, select the tables you want to display by checking the boxes or using the dropdown selector.
3. For each selected table, you can optionally define a **Custom Tab Label** (e.g., "Men's Clothing", "Electronics"). If left blank, it will default to "Tab 1", "Tab 2", etc.
4. The editor will render the tabs. Clicking the tabs in the editor will let you preview each table exactly as visitors will see it.
> [!NOTE]
> Interaction with the tables inside the Gutenberg Editor (like sorting, filtering, and clicking 'Add to Cart') is suppressed so that clicking the block opens the block settings smoothly instead of interacting with the embedded table. All interactivity works perfectly on the live frontend.
---
## Shortcodes
> Source: https://docs.wpanchorbay.com/productbay/features/shortcodes
# Shortcodes
ProductBay uses WordPress shortcodes to embed product tables on any page, post, or widget area.
## Basic Usage
After creating a table, you'll receive a shortcode:
```
[productbay id="1"]
```
Paste this shortcode into any page or post to display the table.
## Parameters
| Parameter | Required | Description | Example |
|-----------|----------|-------------------------|-----------------------|
| `id` | Yes | The table ID to display | `[productbay id="1"]` |
> **Info: Currently, the shortcode accepts a single `id` parameter.**
>
## How to Embed
### Block Editor (Gutenberg)
1. Add a new **Shortcode** block
2. Paste the shortcode: `[productbay id="1"]`
3. Publish or update the page
### Classic Editor
1. Paste the shortcode directly into the editor content
2. Publish or update the page
### Widgets
1. Go to **Appearance → Widgets**
2. Add a **Text** or **Custom HTML** widget
3. Paste the shortcode
4. Save the widget
### Page Builders
Most page builders (Elementor, Beaver Builder, Divi, etc.) support WordPress shortcodes. Look for a "Shortcode" element or module and paste the code.
## Multiple Tables on One Page
You can embed multiple tables on the same page by using multiple shortcodes:
```html
Sale Products
[productbay id="1"]
New Arrivals
[productbay id="2"]
```
Each table is rendered with **instance-scoped CSS**, meaning their styles won't conflict with each other.
## Finding the Shortcode
There are two ways to find a table's shortcode:
1. **Table Dashboard** — The shortcode is displayed in the "Shortcode" column. Click it to copy.
2. **After Creating/Editing** — The shortcode is shown on the Finish step of the wizard.
## Troubleshooting
### Table not showing?
- Verify the **table ID** is correct
- Check that the table status is **Published** (Private tables won't render for non-admin users)
- Make sure **WooCommerce is active**
### Empty table?
- Verify your product source has matching products
- Check that products are **published** in WooCommerce
- Review any query modifiers (stock status filters, price ranges, excluded IDs)
> **Tip: Admin Notice**
> If a table is set to **Private**, administrators will see a yellow notice saying the table is private. Regular visitors will see nothing.
---
============================================================
SECTION: FEATURES — TABLE CONFIGURATION
============================================================
## Product Sources
> Source: https://docs.wpanchorbay.com/productbay/features/product-sources
# Product Sources
Product sources determine **which products** appear in your table. ProductBay offers several flexible source options.
## Source Types
### All Products
Displays all published products from your WooCommerce store.
- **Best for:** General product catalogs, store-wide listings
- **Products included:** All products with "Published" status
### On Sale
Automatically includes only products currently on sale. This uses WooCommerce's native sale detection, which accounts for:
- Regular sale prices
- Scheduled sales (start/end dates)
- Variable product sales (if any variation is on sale)
- **Best for:** Sale pages, promotional landing pages
- **Dynamic:** Products automatically appear/disappear as sales start and end
### By Category
Select one or more WooCommerce product categories to populate your table.
- **Best for:** Category-specific pages, seasonal collections
- **Search:** Type to search and select categories from a dropdown
- **Multiple categories:** You can select multiple categories — products from all selected categories will be included.
1. Select "By Category" as the product source.
2. You will selected categories here and you can also remove any category by clicking on the cross icon.
3. You can also search for categories by typing in the search bar.
4. You reload categories by clicking on the reload icon if needed.
5. You can clear all categories by clicking on the clear icon if needed.
Select one or more categories to include in the table and the table will display all the products from the selected categories.
### Specific Products
Hand-pick individual products by searching for them.
- **Search by name** — Type a product name for fuzzy matching
- **Search by ID** — Enter an exact product ID
- **Search by SKU** — Enter a full or partial SKU
- **Best for:** Curated lists, featured products, comparison tables
1. Select "Specific Products" as the product source.
2. You will see a search bar to search for products, you can search for products by typing in the search bar.
3. You will see a dropdown of products that match your search query. You can select one or more products from the dropdown. By default, some products will be visible in the dropdown.
4. You will see selected products here and be able to remove them by clicking on the cross icon. On hover of the product, you will see the product name, id and sku.
5. You can clear all products by clicking on the clear icon if needed.
Select one or more products to include in the table and the table will display all the products from the selected products.
---
## Column Editor
> Source: https://docs.wpanchorbay.com/productbay/features/column-editor
# Column Editor
The Column Editor lets you choose which data columns appear in your product table, arrange their order, and control responsive visibility.
1. Clicking on **Manage Columns** button will open the column editor.
2. Select or deselect columns to include in the table.
3. Selected Columns will appear in the table in the order they are arranged.
1. Open column settings by clicking on the chevron expand button on the right side of any column card.
2. You can edit a column name by clicking on the column name text field.
3. You can open column editor by clicking on the **Manage Columns** button.
4. You can reorder columns by dragging and dropping them in the column list on the left side of the column editor.
5. Set the column width by clicking on the width dropdown on the right side of any column card.
6. Set the column visibility by clicking on the visibility dropdown on the right side of any column card.
7. You can also hide or show a column name on the table header by clicking on the eye icon on the right side of any column card.
8. You can remove a column by clicking on the trash icon.
## Available Columns
ProductBay includes a variety of column types to build your perfect product table.
### Product Image
Displays the product's featured thumbnail. Optionally includes a built-in lightbox for full-size viewing on click.
### Product Name
The product title, linked directly to the single product page.
### Price
The current price of the product, appropriately formatted with strike-throughs for products on sale.
### SKU
The Stock Keeping Unit of the product.
### Description
The product's short description (summary).
### Stock [Since v1.2.0]
Displays the product's stock status (In Stock, Out of Stock, On Backorder) and optionally the exact stock quantity.
### Date [Since v1.2.0]
Shows the product's published date or last modified date, formatted according to your WordPress date settings.
### Taxonomy [Since v1.2.0]
Displays terms from any registered taxonomy, such as standard Categories and Tags, or any custom taxonomy you've registered.
### Rating [Since v1.2.0]
Renders the average customer review rating. Three display formats are available:
| Format | Description |
|--------|-------------|
| **Stars (Custom)** | Visual star icons styled by ProductBay (default) |
| **Text Based** | Numeric rating displayed as text (e.g., "4.5 / 5") |
| **WooCommerce Default** | Uses WooCommerce's native rating template |
To change the display format, expand the Rating column's settings panel and select a format from the **Display Format** dropdown.
### Custom Field [Pro] [Since v1.2.0]
Display any product meta field, Advanced Custom Fields (ACF) data, or WooCommerce internal data. Includes intelligent auto-formatting for images, links, dates, and numbers. [Read the full Custom Field guide →](/features/custom-field-column)
### Combined Column [Pro] [Since v1.2.0]
Merge multiple data points into a single column using a powerful template syntax. For example, combine a product's SKU and Stock status into one cell. [Read the full Combined Column guide →](/features/combined-column)
## Adding & Removing Columns
- Toggle columns on/off using the checkboxes in the column list
- At least one column must be active
## Drag-and-Drop Reordering
Columns can be reordered by dragging them in the column list. The order in the editor corresponds directly to the order in the rendered table (left to right).
The live preview updates instantly as you rearrange columns.
## Column Settings
Each column card can be expanded to reveal advanced settings. Click the chevron expand button on the right side of any column card.
### Column Heading
Every column has an **inline editable heading** — click the text on the column card to rename it. Additionally, you can toggle the heading's visibility using the **eye icon**:
- **Eye open** — Heading text is displayed in the table header row
- **Eye closed** — The column header cell is empty (useful for icon-only columns like Image)
### Column Width
Control the width of each column with three options:
| Mode | Description |
|------|-------------|
| **Auto** | The browser distributes width automatically based on content (default) |
| **px** | Fixed width in pixels (e.g., 150px) |
| **%** | Percentage of the total table width (e.g., 25%) |
### Responsive Visibility
For each column, you can configure when it appears using seven visibility modes:
| Mode | Description |
|------|-------------|
| **All devices** | Visible on all screen sizes (default) |
| **Desktop only** | Visible only on large screens (≥1024px) |
| **Tablet only** | Visible only on medium screens (768px–1023px) |
| **Mobile only** | Visible only on small screens (<768px) |
| **Hide on mobile** | Visible on desktop and tablet, hidden on mobile |
| **Hide on desktop** | Visible on tablet and mobile, hidden on desktop |
| **Hidden** | Always hidden — useful for temporarily removing a column without deleting it |
> **Tip: Start with all columns visible on desktop, then progressively hide non-essential columns for smaller screens. The most critical columns (Name, Price, Add to Cart) should typically remain visible across all devices.**
>
## Cart Column
When add-to-cart is enabled in the [Options step](/features/creation-wizard#step-4-options), a cart action column is automatically appended to your table. This column includes:
- **Add to Cart button** for simple products
- **Variation selectors** for variable products
- **Quantity input** (if enabled)
- **Bulk select checkbox** for bulk add-to-cart
---
## Custom Field Column (Pro)
> Source: https://docs.wpanchorbay.com/productbay/features/custom-field-column
# Custom Field Column [Pro] [Since v1.2.0]
The Custom Field column is one of the most powerful features in ProductBay Pro. It allows you to expose virtually any piece of data associated with your products — including core WooCommerce meta, custom fields added by themes, or data from third-party plugins like Advanced Custom Fields (ACF).
1. Click on chevron icon to expand the custom field column settings.
2. You can browse and search all available meta keys here.
3. You can select any avaiable keys just by click on it.
4. You can select the formatting mode.
5. **Meta Key** (Manual Override), this is the actual field that fetchs data in the custome field. You put your meta key here.
6. You can add **suffix** which will be added at the end of the content in each row for that custom field.
7. You can add **prefix** which will be added at the beginning of the content in each row for that custom field.
8. Like any other column, you can drag to change order, hide column name in the table header, or remove the custom field column.
## Adding the Column
While creating or editing a table, click on **Manage Columns** button and select **Custom Field** option.
## Meta-Key Discovery Panel
Instead of forcing you to remember and manually type raw database meta keys (like `_regular_price` or `_stock`), ProductBay Pro features an intelligent discovery panel.
When you click to select a meta key, the panel will automatically scan your product database and present available keys grouped into logical categories:
- **WooCommerce Fields:** Native WooCommerce data (Weight, Length, Width, Height, Total Sales, etc.).
- **ACF Fields:** If Advanced Custom Fields is active, keys will be labeled with their friendly names and grouped by Field Group.
- **Custom Post Meta:** Any other custom fields discovered in the `wp_postmeta` table.
## Display Formats
Because custom fields can contain anything from a simple text string to an image ID or a Unix timestamp, ProductBay allows you to choose exactly how the data should be rendered.
Choose from 7 distinct formats:
### Auto (Smart Detection)
The default setting. ProductBay attempts to aggressively deduce the data type. For example:
- If the value is a known Attachment ID, it renders an image thumbnail.
- If it looks like a URL, it renders a clickable link.
- If it's a known date format, it formats it according to your site's timezone.
### Text
The safest option. The data is escaped and rendered as plain text. Arrays or complex objects are flattened to a comma-separated string.
### Image
Tells ProductBay that the field contains an Image/Attachment ID (e.g., from an ACF Image field returning an ID) or a direct Image URL. It will render an `
` tag in the table cell.
### Link
Forces the value to be wrapped in a clickable anchor tag (``).
### Date
Interprets the data (whether a Unix timestamp like `1712743821` or a string like `20240410`) as a date and formats it using your WordPress **Settings → General** date format.
### Number
Formats the custom field value according to your site's locale (e.g., adding thousands separators).
### Boolean
If the custom field stores a true/false value (e.g., `1`/`0`, `true`/`false`, `yes`/`no`, `on`/`off`), this format will render a stylized "Yes" or "No" badge.
## Prefix and Suffix
You can inject static text immediately before or after the custom field value.
- **Prefix Example:** If your field returns `14`, setting a prefix of `Aisle ` will render `Aisle 14`.
- **Suffix Example:** If your field returns `220`, setting a suffix of ` V` will render `220 V`.
## Fallback Value
Not all products will have data for a specific custom field. By default, ProductBay will display an em-dash (`—`) for empty cells. You can change this behavior by entering a custom **Fallback Value**.
## Third-Party Plugin Support
ProductBay's custom field discovery is fully compatible with, and can automatically detect fields registered by:
- Advanced Custom Fields (ACF) & ACF Pro
- Meta Box
- Pods
- JetEngine
(Note: For complex fields like repeating groups or galleries, ProductBay will attempt to render a summarized, flattened string).
---
## Combined Column (Pro)
> Source: https://docs.wpanchorbay.com/productbay/features/combined-column
# Combined Column [Pro] [Since v1.2.0]
The Combined Column allows you to merge multiple disparate data points into a single, clean table cell. This is particularly useful when you want to display dense information without taking up horizontal screen space.
## Use Cases
- **Merging Identifiers:** Display the Product SKU and the Stock Status together (e.g., `SKU: 12345 | In Stock`).
- **Dimensions:** Combine Weight, Length, Width, and Height custom fields into a single "Dimensions" column.
- **Pricing & Rating:** Show the Price and the Star Rating in the same cell.
## Configuration
To set up a Combined Column:
1. Add the **Combined** column from the Column Editor.
2. Under the column settings, enter your **Template Syntax**.
### Sub-Elements Builder
The Combined Column features a drag-and-drop builder interface rather than using complex template tags.
Inside the Combined Column settings, you can:
1. **Add Elements:** Click the "Add Element" dropdown to add any standard column type (Name, Price, SKU, custom fields, etc.) as sub-elements.
2. **Layout Options:** Choose between:
- **Inline:** Elements display side-by-side (flex row). You can optionally define a character or symbol (like `|` or `-`) as a **Separator** between elements.
- **Stacked:** Elements display one below the other (block).
3. **Prefix & Suffix:** Each added sub-element has its own settings, allowing you to easily add text before or after its dynamic value (e.g., Prefix: `SKU: ` or Suffix: ` kg`).
4. **Reorder:** Drag and drop elements up or down in the list to rearrange how they appear in the final output.
---
## Display Customization
> Source: https://docs.wpanchorbay.com/productbay/features/display-customization
# Display Customization
ProductBay gives you granular control over the visual appearance of each table. Every table has its own scoped CSS, so styles never leak between tables.
## Header Styling
| Property | Description | Default |
|----------|-------------|---------|
| **Background Color** | Header row background | `#f0f0f1` |
| **Text Color** | Header text color | `#333333` |
| **Font Weight** | Header font weight (Normal, Bold, Extra Bold) | Bold |
| **Text Transform** | Header text capitalization (Uppercase, Lowercase, Capitalize, Normal) | Uppercase |
## Body Styling
| Property | Description | Default |
|----------|-------------|---------|
| **Background Color** | Body rows background | `#ffffff` |
| **Text Color** | Body text color | `#444444` |
### Alternating Rows (Zebra Striping)
Enable the **Alternate Rows** toggle to apply different background colors to even and odd rows. This improves readability for tables with many rows.
When toggled **on**, two additional color pickers appear:
| Property | Description | Default |
|----------|-------------|---------|
| **Alternate Background** | Background for even rows | `#f9f9f9` |
| **Alternate Text** | Text color for even rows | `#444444` |
When toggled **off**, all rows use the same Body background and text colors.
## Button Styling
The add-to-cart button can be fully customized with both default and hover states:
| Property | Description | Default |
|----------|-------------|---------|
| **Background Color** | Button background | `#2271b1` |
| **Text Color** | Button text | `#ffffff` |
| **Hover Background** | Background on hover | `#135e96` |
| **Hover Text Color** | Text color on hover | `#ffffff` |
## Layout
| Property | Description | Default |
|----------|-------------|---------|
| **Border Style** | Table border style (None, Solid, Dashed) | Solid |
| **Border Color** | Table border color (disabled when border style is None) | `#e5e5e5` |
| **Border Radius** | Toggle on/off + numeric px value for corner rounding | On, `0px` |
| **Cell Padding** | Space inside each cell (Compact, Normal, Spacious) | Normal |
### Border Radius
The border radius has its own **enable toggle**. When off, the table has sharp corners regardless of the px value. When on, you can set a custom pixel value (0–24px).
### Cell Padding Options
- **Compact** — Tight spacing for dense tables
- **Normal** — Standard spacing (default)
- **Spacious** — Extra spacing for readability
## Hover Effects
The **Row Hover Effect** has its own **enable toggle**. When on, rows are visually highlighted when the cursor passes over them.
| Property | Description | Default |
|----------|-------------|---------|
| **Row Hover** | Enable/disable row hover highlighting | Enabled |
| **Hover Background** | Row background on hover | `#f5f5f5` |
| **Hover Text Color** | Row text color on hover | *(inherit)* |
When the toggle is off, the hover color pickers are greyed out.
## Instance-Scoped CSS
Each table generates a unique CSS scope. This means:
- Multiple tables on the same page won't share or override each other's styles
- Table styles won't interfere with your theme's CSS
- Your theme's CSS won't break the table layout
## Live Preview
All design changes are shown in real-time in the preview panel during the [Creation Wizard](/features/creation-wizard). What you see in the preview is exactly what visitors will see on the frontend.
---
## Available Options
> Source: https://docs.wpanchorbay.com/productbay/features/available-options
# Available Options
The **Options Panel** provides comprehensive control over the functionality, display, and user experience of your product tables. Below is a detailed breakdown of all available options categorized by their respective sections.
## Table Controls
Configure core table functionality and user controls.
* **Enable Search Bar**
* **Functionality**: Adds a search input field to the table.
* **Option Type**: Toggle
* **Description**: Allows users to quickly search through products directly within the table.
* **Enable Pagination**
* **Functionality**: Activates pagination for the table.
* **Option Type**: Toggle
* **Description**: Breaks down large product lists into smaller, manageable pages.
* **Products Per Page**
* **Functionality**: Determines the number of items per page limit.
* **Option Type**: Number Input
* **Description**: How many products to display on each page (min: 1, max: 500). Only relevant when pagination or load more styles are active.
* **Pagination Style**
* **Functionality**: Defines how extra products are loaded or navigated.
* **Option Type**: Select Dropdown
* **Sub-options**:
* `Standard (Numbers)`: Classic numbered pagination links at the bottom.
* `Load More Button`: Displays a button to append more products to the current list. [Pro]
* `Infinite Scroll`: Automatically loads more products as the user scrolls down the page. [Pro]
* **Enable Image Lightbox**
* **Functionality**: Adds an interactive image viewer.
* **Option Type**: Toggle
* **Description**: Shows the full-size product image in a popup overlay when a user clicks on the product thumbnail.
---
## Taxonomy & Type Filters
Configure frontend dropdown filters to help users find specific products.
* **Enable Categories Filter**
* **Functionality**: Adds a category filter dropdown.
* **Option Type**: Toggle
* **Description**: Allows users to filter table products by their WooCommerce product categories.
* **Enable Product Type Filter**
* **Functionality**: Adds a product type filter dropdown.
* **Option Type**: Toggle
* **Description**: Allows users to filter the table by basic product types (e.g., Simple, Variable, Grouped).
* **Price Range Filter** [Pro]
* **Functionality**: Adds a slider for price-based filtering.
* **Option Type**: Slider / Range Input
* **Description**: Allows users to dynamically filter products by a specific price range.
---
## Cart Functionality
Configure Add to Cart behavior and selection tracking.
* **AJAX Add to Cart**
* **Functionality**: Toggles AJAX-powered add to cart requests.
* **Option Type**: Toggle
* **Description**: When enabled, adds products to the cart inline without reloading the page. When disabled, the cart button functions as a link that redirect users to the single product page.
* **Show Quantity Selector**
* **Functionality**: Enables quantity adjustment for products.
* **Option Type**: Toggle
* **Description**: Displays a quantity input slider/field next to the Add to Cart button for simple products.
* **Show Clear All Button**
* **Functionality**: Adds a bulk clear control.
* **Option Type**: Toggle
* **Description**: Displays a standalone button to instantly clear or uncheck all selected products currently tracked in the active list.
* **Selected Items View Panel**
* **Functionality**: Enables the floating selected items overview.
* **Option Type**: Toggle
* **Description**: Shows a floating, collapsible panel that displays all the items a user has selected or added to cart, along with their individual quantities.
---
## Variable & Grouped Products
Advanced configuration for complex WooCommerce product types. Some display modes and variations require the PRO plugin.
* **Grouped Products**
* **Functionality**: Defines the display behavior when viewing products containing multiple child simple products.
* **Option Type**: Select Dropdown
* **Sub-options**:
* `Inline Dropdown`: Shows a dropdown allowing the selection of child nested products directly in the row.
* `Popup Modal`: Opens a modal displaying all child products within the group. [Pro]
* `Nested Rows`: Renders child products directly in expandable rows nested under the parent product. [Pro]
* `Separate Rows`: Displays the child products in the main table layout, separated into standard individual rows. [Pro]
* **Variable Products**
* **Functionality**: Defines the display behavior for products with attribute variations.
* **Option Type**: Select Dropdown
* **Sub-options**:
* `Inline Dropdown`: Supported natively. Allows variations selection through inline dropdown elements on the parent row.
* `Popup Modal`: Opens a targeted popup to easily select exact variations. [Pro]
* `Nested Rows`: Variations are displayed logically beneath the main product row as sub-rows. [Pro]
* `Separate Rows`: Every variation gets injected as a completely separate row entity. [Pro]
* **Expand Nested Rows**
* **Functionality**: Determines initial state for nested products.
* **Option Type**: Toggle
* **Dependancy**: Only available when `Nested Rows` is selected as a Group or Variable display mode.
* **Description**: Show nested variation/child rows expanded by default instead of having them initially collapsed. AJAX Add to Cart
* **Show Options Count**
* **Functionality**: Displays the total count of variation options.
* **Option Type**: Toggle
* **Description**: Renders an "X options available" subtitle directly below the main product name to clarify variant availability.
* **Variation Badges**
* **Functionality**: Highlighting tracked cart configurations.
* **Option Type**: Toggle
* **Description**: Shows visual badges indicating exactly which variations have been added to the active cart flow.
---
## Import / Export (Pro)
> Source: https://docs.wpanchorbay.com/productbay/features/import-export
# Import & Export [Pro] [Since v1.2.0]
ProductBay Pro includes a robust Import/Export utility that allows you to back up, migrate, and share your table configurations across different WordPress installations using simple JSON files.
You can access these tools by navigating to **ProductBay → Tables → Import / Export**.
1. Click on the **Export** button to open export modal.
2. You can select one or more tables and click on the **Export Selected** unders Actions and click Apply to open Export Modal with those table selected.
3. Click on the **Import** button to open import modal.
## Exporting Tables
The Export tool generates a `.json` file containing all configuration data for your selected tables.
### How to Export:
After clicking on the **Export** button you will see the Export Modal.
1. You can select **Plugin Global Settings** at the top to include your configuration under the General and Styling settings tabs.
2. You can select specific tables to export by checking the checkbox next to each table.
3. You can **Select All** or **Deselect All** tables using the buttons at the top.
4. Click on the **Generate Export** button to generate the export file. A `productbay-export-[date].json` file will download to your device.
## Importing Tables
The Import tool allows you to upload a previously exported `.json` file to restore or migrate tables.
### How to Import:
After clicking on the **Import** button you will see the Import Modal.
1. Under the **Import** section, browse for your `.json` export file.
2. Select an **Overlap Handling Mode** (see below).
3. Choose whether to **Import Global Settings** (if they exist in the file). *Warning: This will overwrite your current global settings.*
4. Click the **Import Tables** button.
1. Click on the upload box or drag and drop your `productbay-export-[date].json` file that you exported earlier into the box.
2. Select how to manage **Conflict Resolution**.
3. **Rename Imported**: If enabled, it will appends "(Imported)" to titles of imported tables.
4. Click the **Start Import** button.
### Conflict Resolution
- **Create New (Keep both):** If two tables have the same configuration, it will create a new table with the imported configuration, keeping your existing table as well.
- **Overlap Existing:** If two tables have the same configuration, it will update the existing table with the imported configuration.
- **Skip Duplicates:** If two tables have the same configuration, it will skip the import process for that table.
## Cross-Site Product Matching
While importing tables to a different website, you may encounter an issue where the product IDs do not match (e.g., Product ID `10` on your staging site might be an orange, but ID `10` on production might be an apple), this mostly happens when you are importing with **Specific Products** source. This is because each website has its own set of product IDs.
**ProductBay Pro's Smart Matching:**
During the import process, ProductBay attempts to resolve this issue automatically:
1. **SKU Matching:** It first tries to find a product on the new site with the exact same SKU.
2. **Title Matching:** If no SKU matches, it attempts to find a product with the exact same title.
3. If neither matches, that specific product condition is dropped from the imported table to prevent errors.
## Use Cases
- **Staging to Production:** Build your perfect tables on a staging server and migrate them to your live server without rebuilding them from scratch.
- **Cross-site Syncing:** Agencies can build a master configuration and import it across multiple client sites.
- **Safe Backups:** Export your table configurations before making major changes.
---
============================================================
SECTION: FEATURES — FRONTEND
============================================================
## WooCommerce Integration
> Source: https://docs.wpanchorbay.com/productbay/features/woocommerce
# WooCommerce Integration
ProductBay is built as a WooCommerce extension, providing deep integration with WooCommerce's product system, cart, and checkout.
## Supported Product Types
| Product Type | Support | Notes |
|-------------|---------|-------|
| **Simple** | Full | Standard add-to-cart with quantity |
| **Variable** | Full | Inline attribute selectors (Free) or Popup/Nested/Separate rows (Pro) |
| **Grouped** | Full | Inline dropdown (Free) or Popup/Nested/Separate rows (Pro) |
| **External / Affiliate** | Full | "Buy Now" button linking to external URL |
## Add to Cart
### AJAX Add to Cart
When enabled, products are added to the cart **without a page reload**. A success message appears inline, confirming the item was added.
This provides a seamless shopping experience, especially for tables with many products.
### Quantity Selector
Enable per-row quantity inputs so customers can specify how many units to add. The input respects WooCommerce's min/max and step settings for each product.
### Bulk Add to Cart
ProductBay supports adding multiple products at once:
1. Enable the checkbox column by turning on cart features
2. Customers select multiple products using checkboxes
3. Click the "Add Selected to Cart" button
4. All selected products are added in a single AJAX request
> **Tip: Bulk add-to-cart works with simple products. Variable products need their attributes selected individually before they can be added.**
>
### Variation Badges
When enabled, small badges appear on each row indicating which specific variations have been added to the cart. This helps customers keep track of their selections without opening the cart.
Toggle **Variation Badges** in the **Options** step under **Cart Functionality**.
### Show Clear All Button
When bulk selection is active, a **Clear All** button can be shown to instantly deselect all currently selected products. This saves customers from having to individually uncheck each product.
Toggle **Show Clear All Button** in the **Options** step under **Cart Functionality**.
### Selected Items View Panel
A floating panel that displays all currently selected items with their individual quantities. This gives customers a running summary of what they're about to add to cart before clicking the bulk action button.
Toggle **Selected Items View Panel** in the **Options** step under **Cart Functionality**.
## Variable Products
By default, ProductBay displays variable products using inline attribute selectors:
- **Dropdowns** appear for each attribute (e.g., Size, Color)
- Selecting attributes updates the **price** in real-time
- The **Add to Cart** button activates once all required attributes are selected
- **Out of stock** variations are automatically disabled
### Advanced Variable Modes [Pro] [Since v1.2.0]
ProductBay Pro unlocks **3 additional display modes** for variable products, allowing for a vastly superior shopping experience:
1. **Popup Modal:** Opens a full-featured modal where customers can see all variations, select quantities, and add multiple variations at once using bulk selection.
2. **Nested Rows:** Expandable child rows that display all variations directly below the parent row.
3. **Separate Rows:** Each variation is split into its own independent row in the main table.
[Read the Advanced Modes guide →](/features/variable-grouped-modes)
## Grouped Products
Grouped products are displayed using an **Inline Dropdown** by default. [Since v1.3.0] Customers can select a child product from the dropdown, set a quantity, and add to cart — all without leaving the table.
### Advanced Grouped Modes [Pro] [Since v1.2.0]
ProductBay Pro allows you to display grouped products directly within the table using 3 additional modes:
1. **Popup Modal:** A full modal listing all child products for easy selection.
2. **Nested Rows:** Expandable child rows containing grouped items underneath the parent.
3. **Separate Rows:** Treats each child product as a separate standalone table row.
[Read the Advanced Modes guide →](/features/variable-grouped-modes)
## Show Options Count
When enabled, a subtle **"X options available"** subtitle appears below the product name for Variable and Grouped products. This gives customers a quick indication of how many choices are available without expanding anything.
Toggle **Show Options Count** in the **Options** step under **Variable & Grouped Products**.
## Price Display
Prices are rendered using WooCommerce's native formatting:
- **Currency symbol** and position (before/after)
- **Decimal separator** and thousand separator
- **Sale prices** shown with strikethrough on the regular price
- **Variable price ranges** (e.g., "$10.00 – $25.00") when no variation is selected
## Cart URL
After adding a product to cart, a "View Cart" link appears, directing customers to the WooCommerce cart page.
---
## Variable & Grouped Modes (Pro)
> Source: https://docs.wpanchorbay.com/productbay/features/variable-grouped-modes
# Variable & Grouped Product Modes [Pro] [Since v1.2.0]
ProductBay Pro transforms how your customers interact with complex products (Variable and Grouped). You can configure display modes per-table in the creation wizard under **Step 4: Options**.
## Variable Product Modes
Variable products contain multiple variations (e.g., a T-shirt available in different sizes and colors).
### Inline Dropdown (Default / Free)
Attribute dropdowns are embedded directly in the main table row. Selecting all attributes calculates the price, and the customer can add exactly one variation to the cart at a time.
### Popup Modal [Pro]
When the customer clicks "Select Options", a sleek modal overlay appears:
- Every variation is listed as a separate row in the modal.
- Customers can adjust quantities for multiple variations simultaneously.
- **Bulk Selection:** Select All checkboxes allow customers to quickly add all desired variations to their cart in a single click.
- The modal automatically adopts your main table's styling settings.
### Nested Rows [Pro]
A "toggle" button is added to the parent product row. When clicked, it expands via AJAX to reveal a nested sub-table showing all variations.
#### Expand by Default
By default, nested rows are collapsed and require the customer to click to expand. You can change this by enabling **Expand Nested Rows by Default** in the Options step. When enabled, all nested sub-tables are shown in their expanded state on initial page load.
### Separate Rows [Pro]
Each variation is forcefully detached from the parent product and rendered as an entirely independent row in the main table. The parent product is hidden, and its children appear alongside simple products. This is excellent for hardware stores or catalogs where every SKU needs instant visibility.
---
## Grouped Product Modes
Grouped products are collections of related simple products sold together (e.g., a "Complete Bed Set" that includes pillows, sheets, and a comforter).
### Inline Dropdown (Default / Free) [Since v1.3.0]
A dropdown selector is added to the table row, allowing customers to select a child product, set a quantity, and add to cart — all without leaving the table.
### Popup Modal [Pro]
Similar to the variable product modal, clicking the parent button opens an overlay listing all child products with their individual checkboxes, quantities, and direct add-to-cart buttons.
### Nested Rows [Pro]
The grouped product acts as a collapsible container. Clicking it drops down a nested table showing all child items, keeping the main table view clean while providing instant drill-down access.
#### Expand by Default
Same as Variable nested rows — enable **Expand Nested Rows by Default** in Options to have grouped nested rows start expanded.
### Separate Rows [Pro]
Breaks the group apart completely, rendering each child item as its own row in the main table.
---
## Search & Filters
> Source: https://docs.wpanchorbay.com/productbay/features/search-and-filters
# Search & Filters
ProductBay includes built-in frontend search, filtering, and pagination — all powered by AJAX for a seamless, no-reload experience.
## Search
When search is enabled, a search bar appears in the main toolbar above the table. Customers can type to search products by:
- **Product name** — Partial or full match
- Results update instantly as the user types (with a debounce delay)
- Search is case-insensitive
> **Info: Search operates on the products loaded by the table's [product source](/features/product-sources). It does not search your entire WooCommerce catalog — only the products that match the table's source configuration.**
>
## Category Filter
When enabled, a category filter dropdown appears in the dedicated Filter Bar above the main table tools.
- Select a product category to filter the table
- Clear the filter to show all products again
- Combine filtering with search for precise results
### Configuration
Enable the category filter in the **Options** step of the [Creation Wizard](/features/creation-wizard#step-4-options):
1. Under **Taxonomy & Type Filters**, toggle **Enable Categories Filter** to on
## Product Type Filter [Since v1.2.0]
A separate toggle adds a **Product Type** dropdown to the frontend Filter Bar, allowing customers to filter by WooCommerce product type:
- **Simple** — Standard products
- **Variable** — Products with attribute variations
- **Grouped** — Products containing child items
- **External** — Affiliate or external products
### Configuration
Enable the product type filter in the **Options** step:
1. Under **Taxonomy & Type Filters**, toggle **Enable Product Type Filter** to on
## Pagination
When pagination is enabled, products are split across multiple pages with navigation controls at the bottom of the table.
### Configuration
| Setting | Options | Default |
|---------|---------|---------|
| **Enable Pagination** | On / Off | On |
| **Products per page** | Any number (1–500) | 10 |
| **Pagination Style** | Standard, Load More [Pro], Infinite Scroll [Pro] | Standard |
### Pagination Styles
#### Standard (Numbers)
The default mode. Numbered page buttons appear at the bottom of the table, allowing customers to jump between pages.
#### Load More Button [Pro]
Replaces page numbers with a single **"Load More"** button. Clicking it appends the next batch of products below the existing rows without replacing them.
#### Infinite Scroll [Pro]
Products load automatically as the customer scrolls down, creating a seamless, never-ending browsing experience. No buttons or page numbers needed.
## Image Lightbox
When enabled, clicking a product's thumbnail image opens a **full-size popup** of the image with a smooth zoom animation. This lets customers inspect product photos without leaving the table.
### Configuration
Toggle **Enable Image Lightbox** in the **Options** step under **Table Controls**. Enabled by default.
## Price Range Filter [Pro] [Since v1.2.0]
ProductBay Pro includes a powerful price filter that allows customers to refine products by an exact price range. It can display as a dual-handle slider, number inputs, or both. The filter auto-detects the minimum and maximum prices of the products in your table.
[Read the full Price Filter guide →](/features/price-filter)
## Feature Toggles
All frontend features can be individually enabled or disabled in the **Options** step:
| Feature | Default | Description |
|---------|---------|-------------|
| **Search** | ✅ On | AJAX search bar |
| **Pagination** | ✅ On | Paginated results |
| **Image Lightbox** | ✅ On | Full-size image popup on click |
| **Categories Filter** | ✅ On | Category dropdown filter |
| **Product Type Filter** | ✅ On | Product type dropdown filter |
| **Price Filter** [Pro] | ❌ Off | Price range slider and inputs |
Configure these in the **Options** step of the [Creation Wizard](/features/creation-wizard).
---
## Price Filter (Pro)
> Source: https://docs.wpanchorbay.com/productbay/features/price-filter
# Price Range Filter [Pro] [Since v1.2.0]
The Price Range Filter allows your customers to zero in on products that fit their budget. Built to be lightning-fast, it uses AJAX to update the table instantly as the user drags the slider or types a price.
## Enabling the Filter
To enable the price filter:
1. Navigate to Step 4 (**Options**) in the creation wizard.
2. Toggle **Price Filter** to the `On` position.
3. The Price Filter settings panel will appear.
## Display Modes
You can choose how the filter is presented to the user. There are 3 display modes:
- **Both (Default):** Combines the visual slider with the precision of number inputs.
- **Slider:** Shows a sleek, dual-handle range slider. Customers drag the handles to set their min and max budget. Hovering over a handle displays a tooltip with the current value.
- **Input:** Shows two simple number input fields (Min and Max).
## Custom Bounds (Min / Max)
By default, ProductBay Pro automatically scans the products in your table and dynamically sets the minimum and maximum limits of the slider based on the cheapest and most expensive items currently available.
If you prefer, you can override this behavior by entering fixed **Min Price** and **Max Price** values in the configuration panel.
## Step Size
The step size dictates how large the increments are when sliding the handle.
- The default step size is `1`.
- If you sell very expensive items (e.g., cars, properties), you might want to set the step size to `100` or `1000`.
- If you want fractional precision, you can set it to `0.50` or `0.01`.
## How it Works
When the filter is applied, ProductBay Pro intercepts the query and applies a standard WordPress meta query against the WooCommerce `_price` meta key. This happens instantly via AJAX without page reloads, and it works flawlessly with all product sources (categories, specific IDs, sale products, etc.).
---
============================================================
SECTION: FEATURES — SETTINGS
============================================================
## Default Configuration
> Source: https://docs.wpanchorbay.com/productbay/features/default-configuration
# Default Configuration
ProductBay allows you to define global defaults that serve as the starting point for every new table you create. These settings ensure consistency across your site and save time during the creation process.
Access these settings from **ProductBay → Settings → Default Configuration** tab.
## Default Source
Configure the default data source settings that will be pre-selected while creating a new table each time.
- **Source Type**: Choose between All Products, Category, On Sale, or Specific Products.
## Default Columns
Define which columns should be enabled by default for new tables. You can select from:
- Image
- Name
- Price
- SKU
- Summary
- Stock [v1.2.0+]
- Date [v1.2.0+]
- Taxonomy [v1.2.0+]
- Rating [v1.2.0+]
- Custom Field (Pro) [v1.2.0+]
- Combined Column (Pro) [v1.2.0+]
## Bulk Select
Configure the default state and behavior of the bulk selection feature, allowing customers to add multiple products to the cart at once.
## Default Styling
Set the factory-default look and feel. These styles will be applied to every new table unless overridden in the **Display** step of the wizard.
#### **Colors**
Personalize the table's color scheme.
- **Add to Cart Button Color**: Change the background and text color of the primary action button.
- **Table Header Color**: Set the background color for the table's header row.
- **Table Rows Color**: Set the default background color for rows.
- **Alternating Rows Color**: Apply a different color to every other row for better readability.
- **Row Hover Color**: Define the color when a user hovers their cursor over a row.
#### **Layout & Spacing**
Adjust the structural feel of the table.
- **Border Style**: Choose from solid, dashed, or no border.
- **Border Color**: Set the color of the table and cell borders.
- **Border Radius**: Round the corners of your table for a softer look.
- **Cell Padding**: Control the space between the content and the cell borders.
#### **Typography**
Fine-tune the text appearance for the header.
- **Header Font Weight**: Choose between Normal, Bold, or Extra Bold.
- **Header Text Transform**: Set text to Uppercase, Lowercase, Capitalize, or leave as Normal.
## Default Functionality
Configure which features are enabled by default:
#### **Table Controls**
- **Enable Search Bar**: Allow users to filter products via a search input.
- **Enable Pagination**: Break long lists into multiple pages.
- **Enable Image Lightbox**: Open full-size images in a popup on click.
#### **Pagination Settings**
- **Products Per Page**: Define how many products are shown before pagination kicks in.
- **Pagination Style**: Choose Standard (numbers), Load More [Pro], or Infinite Scroll [Pro].
#### **Taxonomy & Type Filters**
- **Enable Categories Filter**: Show a category dropdown filter above the table.
- **Enable Product Type Filter**: Show a product type filter dropdown.
#### **Cart Functionality**
- **Enable Add to Cart**: Show add-to-cart buttons.
- **AJAX Add to Cart**: Add to cart without page reload.
- **Show Quantity Selector**: Allow quantity input per row.
- **Variation Badges**: Show badges for variations added to cart.
- **Show Clear All Button**: Display a bulk deselect button.
- **Selected Items View Panel**: Show a floating summary of selected items.
#### **Variable & Grouped Products**
- **Variable Product Mode**: Inline Dropdown (Free), Popup Modal [Pro], Nested Rows [Pro], Separate Rows [Pro].
- **Grouped Product Mode**: Inline Dropdown (Free), Popup Modal [Pro], Nested Rows [Pro], Separate Rows [Pro].
- **Show Options Count**: Display "X options available" subtitle.
- **Expand Nested Rows** [Pro]: Start nested rows expanded by default.
---
## Reset to Defaults
After making any changes, if you decide to reset back default settings, you can do so by clicking **Reset Defaults** button at the top.
---
## Plugin Settings
> Source: https://docs.wpanchorbay.com/productbay/features/plugin-settings
# Plugin Settings
Plugin-wide configuration options that control administrative behavior, data persistence, and system-level maintenance.
Access these settings from **ProductBay → Settings**.
## Plugin Settings Tab
This tab contains plugin-wide configurations that control administrative behavior.
### Admin Bar Options
Control the visibility of the ProductBay quick-access link in the WordPress admin topbar.
- **Show Admin Bar**: When enabled, a "ProductBay" menu appears in the topbar, providing quick links to "Product Tables" and "Create New Table".
[Learn more about admin bar](/guide/admin-bar.html)
## Uninstall Options
Determine what happens to your data when the ProductBay plugin is deleted from your WordPress site.
- **Delete on Uninstall**:
- **Enabled**: All tables, configurations, and settings will be permanently removed from the database on deletion.
- **Disabled**: Plugin data is preserved, allowing you to pick up where you left off if you reinstall later.
> **Warning: Data Permanence**
> We recommend keeping this **Disabled** unless you are certain you want to perform a completely clean removal of all ProductBay data.
[Learn more about uninstall](/guide/uninstallation.html)
## Clear Data (Reset)
ProductBay includes a master reset tool to restore the plugin to its factory state.
### What gets cleared?
1. **Tables**: All created tables are permanently deleted.
2. **Metadata**: All configuration data associated with those tables is removed.
3. **Settings**: All global and default configurations are reset to factory defaults.
4. **Onboarding**: The "Welcome Wizard" state is reset, and it will appear again on the next visit.
> **Danger: Irreversible Action**
> Resetting data is **permanent** and cannot be undone. Always ensure you have a database backup before performing a full reset.
[Learn more about clear data](/guide/clear-all-data.html)
---
## Activity Log
> Source: https://docs.wpanchorbay.com/productbay/features/activity-log
# Activity Log [Since v1.3.0]
ProductBay includes a powerful, built-in recording system that tracks important actions like table creation, setting updates, and system events. This helps you monitor changes, audit user actions, and troubleshoot issues without checking server-level logs.
## Overview
The Activity Log is a diagnostic tool that provides transparency into how your product tables are being managed. It records:
- **Major Events**: Table creation, updates, and deletions.
* **Administrative Actions**: Global settings changes, licensing updates, and log clearing.
- **System Events**: Background tasks like log pruning and automatic data cleanup.
## Managing Logs
You can access the log viewer by navigating to **ProductBay > Settings > Activity Log**.
### Enabling & Disabling
Logging is enabled by default. To change this:
1. Click the **Gear Icon (⚙️)** in the top-right of the Log Viewer.
2. Toggle the **Enable Logging** switch.
3. Click **Save & Close**.
### Live Mode
For real-time monitoring, you can enable **Live Mode** in the settings modal. When active, the log list will automatically refresh every 10 seconds to show new entries as they happen.
### Exporting Logs
If you need to share your logs with support or analyze them externally:
1. Click the **Export** button in the header.
2. Choose a range: **Day**, **Week**, or **Month**.
* The system will automatically combine all relevant daily files into a single download.
### Clearing History
To permanently remove all recorded logs:
1. Click the **Trash Icon (🗑️)** in the header.
2. Confirm the action in the popup.
> [!WARNING]
> This action is permanent and cannot be undone.
## Troubleshooting
If you see an **Error** level entry in your logs, click the entry to see the full details. ProductBay often captures technical environment data (like PHP version and system state) during errors to help developers identify the root cause faster.
---
## License
> Source: https://docs.wpanchorbay.com/productbay/features/license
# License [Since v1.2.0]
The **License** tab, found under **ProductBay → Settings**, is the control center for your ProductBay Pro subscription.
Depending on your active plugin, this tab displays different content:
## Free Version
If you are using the free version of ProductBay, this tab serves as an overview of what **ProductBay Pro** unlocks. It shows:
- A promotional view highlighting premium features (like Custom Fields, Combined Columns, and Advanced Variable Modes).
- A quick link to upgrade to the Pro version.
## Pro Version
Once you install and activate the Pro version, this tab transforms into your license management center. It allows you to:
- Enter and activate your license key to unlock the Pro features.
- View your current license status (Active, Expired, Invalid).
- Check your license expiration dates.
- Manage site activations (useful if you are changing URLs or migrating from staging to live).
## Activating Your License
To gain access to premium features, fast support, and automatic updates directly from your WordPress dashboard, you must activate your license key.
### Finding Your License Key
After [purchasing ProductBay Pro](https://wpanchorbay.com/plugins/productbay/), your license key will be available in two places:
1. **Purchase Email:** The confirmation email sent to the address you provided during checkout.
2. **Account Dashboard:** Log in to your account on [WPAnchorBay](https://wpanchorbay.com/my-account/) and navigate to the **Licenses** tab.
### Activation Steps
To activate your license and enable Pro features:
1. In your WordPress admin, go to **ProductBay → Settings**.
2. Click on the **License** tab.
3. Paste your license key into the input field.
4. Click the **Activate** button.
Once successfully activated, the status will change to "License Active" and display the expiration date.
### Removing License
If needed, you can remove your license by going to **Settings → License**, where you’ll find the **Remove License** button.
Once removed, the license must be activated again to continue using Pro features. You can reactivate it using the same license key.
Note: Removing a license from one site does not allow you to use it on a different site.
## License Status Indicators
Your license tab will display one of the following statuses:
- **Active:** Your license is valid, and you have full access to features and updates.
- **Expired:** Your subscription has ended. You'll lose access to automatic updates and premium support, but the plugin will continue to function.
- **Invalid / Deactivated:** The key is incorrect or has been deactivated from this site.
## Moving a License
When a license is activated for the first time, it becomes locked to that specific domain. To transfer the license to a different website, you will need to contact the support team for assistance.
## Automatic and Manual Updates
**Automatic Updates:**
ProductBay Pro integrates seamlessly with the standard WordPress update system. Whenever a new version is released, you will see an update notification on the **Plugins** page, provided your license is active.
**Manual Updates:**
If you prefer not to use automatic updates or your license has expired:
1. Download the latest `productbay-pro.zip` from your WPAnchorBay account.
2. Upload the zip in WordPress via **Plugins → Add New → Upload Plugin**.
3. Overwrite the existing plugin when prompted.
## Troubleshooting
- **Firewall Blocking License Server:** Ensure your hosting environment doesn't block outgoing connections to the WPAnchorBay license server. This is required to validate the key.
- **Domain Mismatch:** Once you activate your license, your domain is locked to that license. So you can't use the same license key on two different domains. If you change your domain name, you may need to contact us to reactivate the license key on new domain.
- **"Requires ProductBay Free Version" Notice:** ProductBay Pro requires the free version of ProductBay (v1.2.0 or higher) to be active simultaneously. Please install and activate the free version of ProductBay to use ProductBay Pro.
---
============================================================
SECTION: DEVELOPER REFERENCE
============================================================
## Architecture
> Source: https://docs.wpanchorbay.com/productbay/developer/architecture
# Architecture
This page provides a technical overview of ProductBay's internal architecture. It's intended for developers who want to understand how the plugin is built or contribute to it.
## High-Level Architecture
ProductBay follows a **Hybrid Architecture** pattern:
```
┌──────────────────────────────────────────────────────────┐
│ WordPress Core │
├────────────────────────┬─────────────────────────────────┤
│ Admin (React SPA) │ Frontend (PHP Render) │
│ │ │
│ React 18 + TypeScript │ TableRenderer + AjaxRenderer │
│ Tailwind CSS v4 │ Pure PHP + minimal jQuery │
│ Zustand State │ Scoped CSS per instance │
│ React Router (Hash) │ SEO-friendly HTML │
│ │ │
│ ┌──────────────────┐ │ ┌───────────────────────────┐ │
│ │ REST API │◄─┼──│ Shortcode System │ │
│ │ /productbay/v1 │ │ │ [productbay id="X"] │ │
│ └────────┬─────────┘ │ └───────────────────────────┘ │
│ │ │ │
├───────────┼────────────┴─────────────────────────────────┤
│ ▼ │
│ ┌─────────────────┐ ┌──────────────────────────────┐ │
│ │ Controllers │ │ TableRepository │ │
│ │ (API Layer) │──│ (Data Layer / CPT) │ │
│ └─────────────────┘ └──────────────────────────────┘ │
└──────────────────────────────────────────────────────────┘
```
## Backend (PHP)
### Directory Structure
```
app/
├── Admin/ # WP admin page registration, asset enqueuing
├── Api/ # REST API controllers
│ ├── ApiController.php # Base controller
│ ├── TablesController.php # Table CRUD operations
│ ├── ProductsController.php # Product search & categories
│ ├── SettingsController.php # Plugin settings management
│ ├── SystemController.php # System status & onboarding
│ └── PreviewController.php # Live preview rendering
├── Core/ # Plugin bootstrapper, activation/deactivation
├── Data/ # Data repositories (TableRepository)
├── Frontend/ # Shortcode, TableRenderer, AjaxRenderer
├── Http/ # Router (REST route registration), Request wrapper
└── Utils/ # Utility classes
```
### Key Classes
| Class | Responsibility |
|-------|---------------|
| `Core\Plugin` | Main plugin bootstrapper — initializes all components |
| `Http\Router` | Registers all REST API routes with permission checks |
| `Http\Request` | Wraps `$_REQUEST` with sanitization helpers |
| `Data\TableRepository` | CRUD operations for the `productbay_table` custom post type |
| `Frontend\Shortcode` | Registers `[productbay]` shortcode and triggers rendering |
| `Frontend\TableRenderer` | Generates the full HTML table from table config |
| `Frontend\AjaxRenderer` | Handles AJAX requests (search, filter, pagination, add-to-cart) |
### Data Storage
- **Tables** are stored as a custom post type (`productbay_table`)
- **Table configurations** are stored in post meta (`_productbay_config`)
- **Plugin settings** are stored in `wp_options` (`productbay_settings`)
## Frontend (React/TypeScript)
### Directory Structure
```
src/
├── components/ # Reusable UI components
├── context/ # React context providers
├── hooks/ # Custom React hooks
├── layouts/ # Page layout wrappers
├── pages/ # Main page components
│ ├── Dashboard.tsx # Welcome/onboarding dashboard
│ ├── Tables.tsx # Product Tables list view
│ ├── Table.tsx # Table creation/edit wizard
│ └── Settings.tsx # Plugin settings page
├── store/ # Zustand state stores
├── styles/ # Tailwind CSS entry point
├── types/ # TypeScript type definitions
└── utils/ # Utility functions
```
### Tech Stack
| Technology | Purpose |
|-----------|---------|
| React 18 | UI library (via `@wordpress/element`) |
| TypeScript | Type-safe JavaScript (ES2020, strict mode) |
| Tailwind CSS v4 | Utility-first styling, scoped to `#productbay-root` |
| Zustand | Lightweight state management |
| React Router DOM v7 | SPA routing (HashRouter) |
| Lucide React | Icon library |
| dnd-kit | Drag-and-drop for column reordering |
## Build System
| Tool | Purpose |
|------|---------|
| Webpack | Module bundler (extends `@wordpress/scripts`) |
| `@wordpress/scripts` | WP build toolchain (JS/TS transpilation) |
| `@tailwindcss/cli` v4 | CSS compilation |
| Bun | Package manager and script runner |
| Composer | PHP dependency management (PSR-4 autoloading) |
---
## REST API
> Source: https://docs.wpanchorbay.com/productbay/developer/rest-api
# REST API
ProductBay registers its own REST API endpoints under the `productbay/v1` namespace. All endpoints require the `manage_options` capability (WordPress administrator).
> **Warning: Internal API**
> These REST API endpoints are used internally by the ProductBay admin panel. They are not intended as a public API and may change in future versions. Do not build external integrations against these endpoints.
## Authentication
All endpoints require:
- The user to be **logged in** to WordPress
- The user to have the **`manage_options`** capability
- A valid **WordPress REST API nonce** (handled automatically by the admin panel)
## Base URL
```
/wp-json/productbay/v1/
```
## Endpoints
### Tables
#### List Product Tables
```http
GET /wp-json/productbay/v1/tables
```
Returns an array of all ProductBay tables with their metadata.
**Response:**
```json
[
{
"id": 1,
"title": "All Products",
"status": "publish",
"source": { "type": "all" },
"shortcode": "[productbay id=\"1\"]",
"created": "2026-01-15T10:30:00",
"modified": "2026-01-20T14:22:00"
}
]
```
--------|------|-------------|
| `id` | integer | Table post ID |
---
#### Create / Update Table
```http
POST /wp-json/productbay/v1/tables
```
Creates a new table or updates an existing one. Send the full table configuration in the request body.
| Body Parameter | Type | Description |
|---------------|------|-------------|
| `data` | object | Complete table configuration (title, source, columns, style, settings) |
---
#### Delete Table
```http
DELETE /wp-json/productbay/v1/tables/{id}
```
Permanently deletes a table.
| Parameter | Type | Description |
|-----------|------|-------------|
| `id` | integer | Table post ID |
---
### Products
#### Search Products
```http
GET /wp-json/productbay/v1/products
```
Search WooCommerce products by name, ID, or SKU.
| Parameter | Type | Description |
|-----------|------|-------------|
| `search` | string | Product name search (fuzzy match) |
| `include` | integer | Exact product ID |
| `sku` | string | SKU exact or prefix match |
| `limit` | integer | Results per page (default: 10) |
| `page` | integer | Page number (default: 1) |
---
#### List Categories
```http
GET /wp-json/productbay/v1/categories
```
Returns all WooCommerce product categories.
**Response:**
```json
[
{
"id": 15,
"name": "Clothing",
"count": 42,
"slug": "clothing"
}
]
```
---
#### Source Statistics
```http
GET /wp-json/productbay/v1/source-stats
```
Returns product and category counts for a source type.
| Parameter | Type | Description |
|-----------|------|-------------|
| `type` | string | Source type: `all` or `sale` |
**Response:**
```json
{
"categories": 5,
"products": 120
}
```
---
### Settings
#### Get Settings
```http
GET /wp-json/productbay/v1/settings
```
Returns current plugin settings merged with defaults.
---
#### Update Settings
```http
POST /wp-json/productbay/v1/settings
```
Updates plugin settings.
| Body Parameter | Type | Description |
|---------------|------|-------------|
| `settings` | object | Settings key-value pairs to update |
---
#### Reset All Data
```http
POST /wp-json/productbay/v1/settings/reset
```
> **Danger: Destructive Action**
> This endpoint deletes **all tables**, clears all metadata, and resets settings to defaults. This cannot be undone.
**Response:**
```json
{
"success": true,
"deleted_tables": 5,
"settings": { ... }
}
```
---
### System
#### System Status
```http
GET /wp-json/productbay/v1/system/status
```
Returns system information (table counts, WooCommerce status, etc.).
---
#### Mark Onboarded
```http
POST /wp-json/productbay/v1/system/onboard
```
Marks the onboarding process as completed.
---
### Preview
#### Generate Preview
```http
POST /wp-json/productbay/v1/preview
```
Renders a table preview from the provided configuration. Used by the Creation Wizard's live preview feature.
---
### Logs
#### Get Activity Logs
```http
GET /wp-json/productbay/v1/logs
```
Returns paginated activity log entries.
| Parameter | Type | Description |
|-----------|------|-------------|
| `limit` | integer | Results per page (default: 50) |
| `page` | integer | Page number (default: 1) |
---
#### Export Logs
```http
GET /wp-json/productbay/v1/logs/export
```
Downloads all activity logs as a CSV file.
---
#### Clear Logs
```http
POST /wp-json/productbay/v1/logs/clear
```
Permanently deletes all activity log entries. This action cannot be undone.
---
## Hooks & Filters
> Source: https://docs.wpanchorbay.com/productbay/developer/hooks
# Hooks & Filters
ProductBay provides an extensive set of WordPress action hooks and filters, enabling developers to extend, customize, and integrate with the plugin without modifying its core source files.
> **Info: Since v1.0.0**
> All hooks listed on this page were introduced in ProductBay **1.0.0**.
## Hook Naming Convention
All hooks are prefixed with `productbay_` to avoid collisions:
- **Actions** — Use `do_action( 'productbay_*' )`
- **Filters** — Use `apply_filters( 'productbay_*' )`
---|--------|
| **Parameters** | `$plugin` *(Plugin)* — The main plugin instance |
| **File** | `app/Core/Plugin.php` |
```php
add_action( 'productbay_loaded', function( $plugin ) {
// Your add-on logic here
} );
```
### `productbay_admin_init`
Fires after the admin component is set up (inside `is_admin()` context only).
| Type | Action |
|------|--------|
| **Parameters** | `$admin` *(Admin)* — The admin instance |
| **File** | `app/Core/Plugin.php` |
---
## Data Layer
Hooks around table CRUD operations in `TableRepository`.
### `productbay_before_save_table`
Filters table data before it is persisted.
| Type | Filter |
|------|--------|
| **Parameters** | `$data` *(array)*, `$id` *(int)* |
| **Returns** | `array` — Modified table data |
| **File** | `app/Data/TableRepository.php` |
```php
add_filter( 'productbay_before_save_table', function( $data, $id ) {
// Validate or modify data before save
return $data;
}, 10, 2 );
```
### `productbay_after_save_table`
Fires after a table is successfully saved.
| Type | Action |
|------|--------|
| **Parameters** | `$post_id` *(int)*, `$data` *(array)* |
| **File** | `app/Data/TableRepository.php` |
### `productbay_after_delete_table`
Fires after a table is deleted.
| Type | Action |
|------|--------|
| **Parameters** | `$id` *(int)* — The deleted post ID |
| **File** | `app/Data/TableRepository.php` |
### `productbay_table_data`
Filters the formatted table data returned by the repository.
| Type | Filter |
|------|--------|
| **Parameters** | `$table_data` *(array)*, `$post` *(WP_Post)* |
| **Returns** | `array` — Modified table data |
| **File** | `app/Data/TableRepository.php` |
```php
add_filter( 'productbay_table_data', function( $data, $post ) {
$data['my_pro_field'] = get_post_meta( $post->ID, '_my_pro_meta', true );
return $data;
}, 10, 2 );
```
---
## API Layer
Hooks for extending the REST API and settings.
### `productbay_register_routes`
Fires after all core REST routes are registered. Use this to register additional endpoints.
| Type | Action |
|------|--------|
| **Parameters** | `$router` *(Router)* — The router instance |
| **File** | `app/Http/Router.php` |
```php
add_action( 'productbay_register_routes', function( $router ) {
register_rest_route( 'productbay/v1', '/my-endpoint', [ /* ... */ ] );
} );
```
### `productbay_default_settings`
Filters the default plugin settings array.
| Type | Filter |
|------|--------|
| **Parameters** | `$defaults` *(array)* |
| **Returns** | `array` — Modified defaults |
| **File** | `app/Api/SettingsController.php` |
### `productbay_get_settings`
Filters settings before they are returned to the frontend.
| Type | Filter |
|------|--------|
| **Parameters** | `$settings` *(array)* |
| **Returns** | `array` — Modified settings |
| **File** | `app/Api/SettingsController.php` |
### `productbay_settings_updated`
Fires after settings are saved.
| Type | Action |
|------|--------|
| **Parameters** | `$settings` *(array)* — The saved settings |
| **File** | `app/Api/SettingsController.php` |
### `productbay_system_status`
Filters the system status data (used by the Dashboard).
| Type | Filter |
|------|--------|
| **Parameters** | `$status` *(array)* |
| **Returns** | `array` — Modified status data |
| **File** | `app/Api/SystemController.php` |
```php
add_filter( 'productbay_system_status', function( $status ) {
$status['pro_license'] = 'active';
return $status;
} );
```
---
## Frontend Rendering
The most critical layer for extending table output. All hooks are in `TableRenderer.php` unless noted otherwise.
### `productbay_query_args`
Filters `WP_Query` arguments before the product query executes.
| Type | Filter |
|------|--------|
| **Parameters** | `$args` *(array)*, `$source` *(array)*, `$settings` *(array)* |
| **Returns** | `array` — Modified query args |
| **File** | `app/Frontend/TableRenderer.php` |
```php
add_filter( 'productbay_query_args', function( $args, $source, $settings ) {
// Example: only show featured products
$args['tax_query'][] = [
'taxonomy' => 'product_visibility',
'field' => 'name',
'terms' => 'featured',
];
return $args;
}, 10, 3 );
```
### `productbay_table_columns`
Filters the columns array before rendering.
| Type | Filter |
|------|--------|
| **Parameters** | `$columns` *(array)*, `$table_id` *(int)* |
| **Returns** | `array` — Modified columns |
### `productbay_cell_output`
Filters a single cell's HTML output.
| Type | Filter |
|------|--------|
| **Parameters** | `$cell_html` *(string)*, `$col` *(array)*, `$product` *(WC_Product)* |
| **Returns** | `string` — Modified HTML |
```php
add_filter( 'productbay_cell_output', function( $html, $col, $product ) {
if ( $col['type'] === 'my_custom_type' ) {
return '' . esc_html( $product->get_attribute('brand') ) . '';
}
return $html;
}, 10, 3 );
```
### `productbay_table_output`
Filters the complete table HTML before it is returned.
| Type | Filter |
|------|--------|
| **Parameters** | `$html` *(string)*, `$table` *(array)* |
| **Returns** | `string` — Modified HTML |
### `productbay_table_styles`
Filters the generated scoped CSS for a table.
| Type | Filter |
|------|--------|
| **Parameters** | `$css` *(string)*, `$table` *(array)* |
| **Returns** | `string` — Modified CSS |
### `productbay_before_table` / `productbay_after_table`
Actions fired before and after the table wrapper ``.
| Type | Action |
|------|--------|
| **Parameters** | `$table` *(array)* |
### `productbay_before_row` / `productbay_after_row`
Actions fired before and after each product row `
`.
| Type | Action |
|------|--------|
| **Parameters** | `$product` *(WC_Product)*, `$table` *(array)* |
### `productbay_toolbar_start` / `productbay_toolbar_end`
Actions to inject content at the start or end of the toolbar area (above the table, where search and bulk actions live).
| Type | Action |
|------|--------|
| **Parameters** | `$table` *(array)* |
---
## Frontend AJAX
Hooks for AJAX operations in `AjaxRenderer.php`.
### `productbay_ajax_filter_response`
Filters the AJAX response for table filtering/search/pagination.
| Type | Filter |
|------|--------|
| **Parameters** | `$response` *(array)*, `$table` *(array)* |
| **Returns** | `array` — Modified response |
### `productbay_after_bulk_add_to_cart`
Fires after a bulk add-to-cart operation completes.
| Type | Action |
|------|--------|
| **Parameters** | `$added_count` *(int)*, `$errors` *(array)* |
---
## Shortcode
Hooks in `Shortcode.php`.
### `productbay_shortcode_atts`
Filters the parsed shortcode attributes.
| Type | Filter |
|------|--------|
| **Parameters** | `$atts` *(array)* |
| **Returns** | `array` — Modified attributes |
### `productbay_enqueue_frontend_assets`
Action to enqueue additional frontend assets when a ProductBay shortcode is rendered.
| Type | Action |
|------|--------|
| **Parameters** | *(none)* |
---
## Admin
Hooks in `Admin.php`.
### `productbay_after_register_menu`
Fires after all admin menu items are registered.
| Type | Action |
|------|--------|
| **Parameters** | *(none)* |
### `productbay_admin_script_data`
Filters the data passed to the React admin app via `wp_localize_script`.
| Type | Filter |
|------|--------|
| **Parameters** | `$data` *(array)* |
| **Returns** | `array` — Modified script data |
```php
add_filter( 'productbay_admin_script_data', function( $data ) {
$data['proActive'] = true;
$data['license'] = 'valid';
return $data;
} );
```
### `productbay_enqueue_admin_assets`
Action to enqueue additional admin assets on ProductBay pages.
| Type | Action |
|------|--------|
| **Parameters** | *(none)* |
---
## Contributing
> Source: https://docs.wpanchorbay.com/productbay/developer/contributing
# Contributing
Thank you for your interest in contributing to ProductBay! This guide will help you set up a local development environment.
## Prerequisites
| Tool | Version | Purpose |
|------|---------|---------|
| **Node.js** | 18+ | JavaScript runtime |
| **Bun** | Latest | Package manager & script runner |
| **Composer** | 2+ | PHP dependency manager |
| **PHP** | 7.4+ (8.0+ recommended) | Backend language |
| **WordPress** | 6.0+ | CMS platform |
| **WooCommerce** | 6.1+ | E-commerce dependency |
You'll also need a local WordPress development environment such as XAMPP, LAMP, LocalWP, or similar.
## Setup
### 1. Clone the Repository
```bash
cd wp-content/plugins
git clone https://github.com/wpanchorbay/productbay.git
cd productbay
```
### 2. Install Dependencies
Install JavaScript dependencies:
```bash
bun install
```
Install PHP dependencies:
```bash
composer install
```
### 3. Configure Environment
Copy the example environment file:
```bash
cp .env.example .env
```
Edit `.env` and set the appropriate values for your local setup.
### 4. Start Development
```bash
bun start
```
This runs both Webpack (for JS/TS compilation) and Tailwind CLI (for CSS) in parallel watch mode. Changes hot-reload automatically.
### 5. Build for Production
```bash
bun run build
```
This creates optimized, minified assets in the `assets/` directory.
## Project Structure
```
productbay/
├── app/ # PHP backend (Admin, Api, Core, Data, Frontend, Http)
├── src/ # React/TypeScript frontend source
├── assets/ # Compiled JS/CSS output
├── languages/ # Translation files
├── scripts/ # Build helper scripts
├── docs/ # This documentation site (VitePress)
├── vendor/ # Composer dependencies
└── node_modules/ # JavaScript dependencies
```
## Coding Standards
### PHP
- Follow [WordPress PHP Coding Standards](https://developer.wordpress.org/coding-standards/wordpress-coding-standards/php/)
- Run PHPCS: `./vendor/bin/phpcs`
- Use `snake_case` for functions/variables, `PascalCase` for classes
- Add PHPDoc blocks to all classes and methods
- Sanitize all inputs, escape all outputs
### JavaScript / TypeScript
- TypeScript strict mode (ES2020)
- Use `@wordpress/i18n` for translatable strings
- Path alias: `@/*` → `src/*`
- Use CVA + clsx + tailwind-merge for dynamic class names
### CSS
- Tailwind CSS v4 with utility-first approach
- All styles scoped to `#productbay-root`
- Frontend table classes prefixed with `productbay-`
## Internationalization (i18n)
All user-facing strings must be translatable:
**PHP:**
```php
__( 'Text', 'productbay' ) // Return translated string
_e( 'Text', 'productbay' ) // Echo translated string
```
**React/TypeScript:**
```typescript
import { __ } from '@wordpress/i18n';
const label = __( 'Text', 'productbay' );
```
Generate translation files:
```bash
bun run i18n:make-pot # Extract strings to .pot
bun run i18n:make-json # Convert .po to .json for React
```
## Reporting Issues
Found a bug or have a suggestion? Please open an issue on the [GitHub Issue Tracker](https://github.com/wpanchorbay/productbay/issues).
When reporting, include:
1. A clear description of the problem
2. Steps to reproduce
3. Screenshots or error logs (if applicable)
4. Your WordPress, WooCommerce, and PHP versions
## Contact Developers
ProductBay is developed by [WPAnchorBay](https://wpanchorbay.com). If you need help or have questions, please [contact us](https://wpanchorbay.com/contact-us/) or directly email us at [support@wpanchorbay.com](mailto:[support@wpanchorbay.com]). If you need urgent help, reach out to the lead developer [Forhad Khan](https://forhadkhan.com).
---
============================================================
SECTION: SUPPORT
============================================================
## FAQ
> Source: https://docs.wpanchorbay.com/productbay/faq
# Frequently Asked Questions
## General
### Does this plugin require WooCommerce?
Yes. ProductBay is a WooCommerce extension and **will not function** without WooCommerce installed and active. The plugin checks for WooCommerce on activation and will display a notice if it's missing.
### Which WordPress versions are supported?
ProductBay requires **WordPress 6.0 or later**. We recommend always running the latest stable version of WordPress.
### Which PHP versions are supported?
ProductBay requires **PHP 7.4 or later**. We recommend **PHP 8.0+** for the best performance and compatibility.
## ProductBay Pro [Pro]
### Is there a Pro version?
Yes! **ProductBay Pro** is now available. It adds advanced features like a Price Range Filter, advanced display modes for Variable and Grouped products (Popup Modals, Nested Rows), a powerful Custom Field column, and Import/Export capabilities.
### What does ProductBay Pro include?
You can see a full feature comparison between the Free and Pro versions on our [homepage](/).
## License & Updates
### Do I need a license key to use ProductBay?
No. The core version of ProductBay is 100% free forever. A license key is only needed if you purchase ProductBay Pro to access premium features.
### How do I activate my Pro license key?
After purchasing, you can enter your license key under **ProductBay → Settings → License**. For step-by-step instructions, see our [License Activation](/features/license) guide.
### Can I use Pro on multiple sites?
This depends on the license plan you purchased. Single-site licenses allow activation on one production domain, while Plus and Agency licenses allow activation on multiple sites. Check your WPAnchorBay account for details.
### How do I update ProductBay Pro?
As long as your license is active, ProductBay Pro receives automatic updates directly through your WordPress Plugins dashboard, just like the free version.
## Product Tables
### How do I display a table on a page?
After creating a table in the ProductBay admin, copy its shortcode (e.g., `[productbay id="1"]`) and paste it into any page, post, or widget using the Shortcode block. See the [Shortcodes guide](/features/shortcodes) for details.
### Can I display multiple tables on the same page?
Yes! Each table has its own **scoped CSS**, so multiple tables on the same page will not conflict with each other's styling. Simply add multiple shortcodes:
```
[productbay id="1"]
[productbay id="2"]
```
### Which product types are supported?
ProductBay supports all standard WooCommerce product types:
- ✅ **Simple** products
- ✅ **Variable** products (with inline attribute selectors)
- ✅ **Grouped** products
- ✅ **External / Affiliate** products
### Can customers select product variations in the table?
Yes! Variable products display inline dropdown selectors for each attribute (size, color, etc.) directly within the table row. Customers can choose variations and add to cart without visiting the product page.
## Performance & Privacy
### Will it slow down my site?
ProductBay is built with performance in mind:
- Assets are loaded **only on pages** where a table shortcode is present
- Product queries are **cached for 30 minutes** to minimize database load
- The frontend uses lightweight PHP rendering, not a heavy JavaScript framework
### Does this plugin call any external services?
**No.** All JavaScript, CSS, and other assets are bundled locally within the plugin. No data is sent to, or loaded from, any external server.
> **Info: Note for Pro Users**
> ProductBay Pro contacts the WPAnchorBay license server solely for license activation and validation. No user data or product data is transmitted.
## Translation & Localization
### Is it translation ready?
Yes. 100% of user-facing strings use WordPress localization functions (`__()`, `_e()`, `@wordpress/i18n`). The plugin is fully prepared for translation into any language.
### How do I translate the plugin?
1. Use a translation plugin like **Loco Translate** or **WPML**
2. Or create a `.po` file for your language based on the included `languages/productbay.pot` file
3. Place the translation files in `wp-content/languages/plugins/`
## Troubleshooting
### My table is not showing on the page
Check the following:
1. **Table status** — Make sure the table is set to "Published" (Private tables won't display)
2. **Correct shortcode** — Verify the table ID in the shortcode matches your table
3. **WooCommerce active** — Ensure WooCommerce is installed and active
4. **Products exist** — Make sure the product source has matching published products
### I see a yellow notice instead of my table
This means the table is set to **Private**. Only administrators see this notice — regular visitors see nothing. To fix it, edit the table and change its status to **Published**.
### The table looks broken or unstyled
- Clear your browser cache and any WordPress caching plugins
- Check for CSS conflicts with your theme — ProductBay uses scoped CSS, but aggressive theme styles could interfere
- Make sure you're running a supported WordPress version
## Support
### Where can I get help?
- Use the support forum on the [WordPress.org plugin page](https://wordpress.org/support/plugin/productbay/)
- Report bugs via the [GitHub Issue Tracker](https://github.com/wpanchorbay/productbay/issues)
- We aim to respond within 2 business days
---
## Known Issues
> Source: https://docs.wpanchorbay.com/productbay/known-issues
# Known Issues
This page tracks known issues and active limitations in ProductBay Free and Pro versions, along with available workarounds and fixes or expected resolution plans.
**Any known issues will be listed here**
---
## Report a New Issue
Did you encounter a bug that isn't listed here?
Please help us improve ProductBay by [opening a detailed issue on GitHub](https://github.com/wpanchorbay/productbay/issues)! You can also reach out to our active developer channels for faster triage. Feel free to reach out to us at [contact@wpanchorbay.com](mailto:contact@wpanchorbay.com) for any issues or concerns.
---
============================================================
SECTION: RELEASE HISTORY
============================================================
## Changelog
> Source: https://docs.wpanchorbay.com/productbay/changelog
# Changelog
All notable changes to ProductBay are documented on this page.
Looking for Pro version changes? See the **[Pro Changelog](./pro-changelog.md)**.
## 1.3.0
* **Feature:** Introduced native **Permalink Pages** for product tables via `productbay_table` Custom Post Type.
* **Feature:** Grouped products now default to **Inline Dropdown** mode for direct child product selection and add-to-cart.
* **Feature:** Introduced a comprehensive, file-based **Activity Log** system to track table management and system events.
* **Feature:** Decoupled cart functionality from AJAX to support native form submissions and improved compatibility.
* **Dev:** Optimized internal code architecture and registered `productbay_table` CPT with frontend support.
## 1.2.0
* **Feature:** Added new column types: Stock, Date, Taxonomy, and Rating.
* **Feature:** Introduced Pro integration for premium features: Custom Field, Combined, Price Range Filter, and Variable & Grouped Products.
* **Dev:** Unified Pro activation detection across Free plugin layers.
## 1.1.1
* **Improvement:** Block setup experience with "Create New Table" link in placeholders.
* **Improvement:** Removed misleading product counts from category multiselect filters.
* **Improvement:** Enhanced reliability of CSS injection into the Block Editor iframe.
* **Fix:** Isolated table event handlers to prevent cross-tab state interference (e.g. AJAX filter state).
## 1.1.0
* **Feature:** Native Gutenberg blocks for Product Table and Tabbed Product Tables with server-side rendering.
* **Improvement:** Filters bar repositioned above toolbar for better UX flow.
* **Improvement:** Admin menu (WooCommerce > Products) renamed from "All Tables" to "Product Tables" for clarity.
* **Improvement:** Added a "Manage" link to the plugin action links on the Plugins page for quicker access.
* **Improvement:** Hover highlight improvements across admin UI.
* **Improvement:** Shortcode display layout refined on the table management page.
* **Dev:** Restructured codebase for Pro extension architecture.
* **Dev:** Exposed UI components and settings globally for Pro add-on consumption.
## 1.0.0
*Initial Release*
---
## Pro Changelog
> Source: https://docs.wpanchorbay.com/productbay/pro-changelog
# Pro Changelog
All notable changes to ProductBay Pro are documented on this page.
Looking for core changes? See the [Core Changelog](./changelog.md).
## 1.0.0
* Initial release of ProductBay Pro.
* **Feature:** Price Range Filter with slider, inputs, or combined mode.
* **Feature:** Variable & Grouped Product display modes: Inline, Popup Modal, Nested Rows, Separate Rows.
* **Feature:** Custom Field Column with meta-key discovery, ACF integration.
* **Feature:** Combined Column using template tags.
* **Feature:** Import / Export for table configurations via JSON.
* **Feature:** License activation, validation, and auto-updates mechanism.
---