Documentation: Buyers and Attendees List

Documentation: Buyers and Attendees List - Understand how to set up and use our excellent plugin.

This guide covers installation, configuration, and everyday use of Buyers and Attendees List.

You can display the list in two ways:

  • Shortcode: add the list anywhere (page/post/product description)
  • Auto-insert: optionally show the list automatically on matching product pages

To avoid slow product pages, the default render mode is async, which loads the attendee table via AJAX after the page is visible.

Documentation: Buyers and Attendees List

Requirements

  • WordPress 5.8+
  • WooCommerce 6.0+
  • PHP 7.4+
  • A valid license key (licensed builds)

1) Installation

  1. In WordPress Admin, go to Plugins → Add New → Upload Plugin.
  2. Upload the plugin ZIP and click Install Now.
  3. Click Activate.
  4. Configure plugin settings under WooCommerce → Settings → Attendees List.

4. Quick start

  1. Edit an event product page (or create a dedicated page).
  2. Add the shortcode:
   [buyers_attendees_list]
  1. View the page on the front end. The list will:
  • show a loading message, then
  • render the attendee table once it loads via AJAX (default behavior)

5. Using the shortcode

Basic shortcode

[buyers_attendees_list]

The shortcode will automatically use the current product context if placed on a single product page.

Backwards-compatible alias shortcode

This plugin also registers:

[event_attendees_table]

This is an alias for [buyers_attendees_list] to preserve compatibility with older installs/content.

Optional shortcode attributes

Specify a product ID

Use this if you’re placing the shortcode on a non-product page:

[buyers_attendees_list id="123"]

Render mode: async (default) or sync

  • async = outputs a loader and fetches the table via AJAX (fast initial page load)
  • sync = renders the table immediately as part of the page HTML (use cautiously for large events)
[buyers_attendees_list mode="async"]
[buyers_attendees_list mode="sync"]

Enable/disable DataTables formatting

If enabled, the table uses DataTables for improved table handling.

[buyers_attendees_list datatable="1"]
[buyers_attendees_list datatable="0"]

DataTables are only initialized once per table to prevent “Cannot reinitialise DataTable” errors.

Require login on a per-shortcode basis

You can require users to be logged in to view the list:

[buyers_attendees_list require_login="1"]

6. Auto-insert on product pages

Auto-insert lets you show the attendee list automatically below the single product summary, without editing product descriptions.

  1. Go to WooCommerce → Settings → Attendees List → General
  2. Enable Auto-insert on product pages
  3. (Optional) Restrict auto-insert to specific product categories
  4. Set the heading text (default: “Who’s Coming:”)

The list will display on matching products at:

  • woocommerce_after_single_product_summary (priority 25)

7. Settings reference

Settings are located here:

WooCommerce → Settings → Attendees List

This plugin uses a dedicated WooCommerce settings tab with sub-tabs:

  • General
  • Behavior
  • Display
  • Styling
  • Maintenance
  • Licensing (only shown when not built for WooCommerce.com)

General

Auto-insert on product pages
Automatically displays the attendees list on single product pages.

Auto-insert categories
Only auto-insert for products in the selected categories.
If empty, auto-insert applies to all products.

Auto-insert heading
Heading displayed above the list when auto-insert is used.

Behavior

Render mode

  • Async (recommended): loads attendees after page render via AJAX
  • Sync: renders the table immediately in the page HTML

Enable DataTables
Enables the DataTables initialization for the attendee table.

Require login
If enabled, visitors must be logged in to view the attendee list (site-wide default; can be overridden per shortcode).

Cache TTL (seconds)
How long attendee results are cached before refresh.

Fallback days
Limits how far back order history is searched when building attendee results (useful on older stores).

Order statuses
Which order statuses count as “attending.” Defaults include:

  • wc-processing
  • wc-completed

Display

Control which columns appear and how they are labeled.

Options include:

  • Show avatar (with configurable avatar size)
  • Show profile link (links attendee name to an author/profile URL)
  • Show full name column (on/off for privacy)
  • Optional columns: first name, last name, username, email, purchase date
  • Customize column labels
  • Customize front-end messages (loading/empty/error text)

Styling

These settings map to CSS variables used in the front-end output.

Options include:

  • Title color
  • Text color
  • Muted text color
  • Border color
  • Background color
  • Alternate row background color
  • Link color
  • Font size

Maintenance

Remove data on uninstall
If enabled, plugin settings (and licensing status where applicable) are removed when the plugin is uninstalled.

Licensing

If your build uses the included licensing/updater system, a Licensing tab will appear.

  • Enter your license key to activate updates.
  • Some builds may restrict front-end rendering until a license is active.

WooCommerce.com build mode
If distributing via WooCommerce.com, set the constant below to disable the custom licensing system:

define( 'SA_BAL_WCCOM', true );

8. How attendee data is determined

The attendee list is built from WooCommerce orders containing the selected product.

Key behaviors:

  • If the product is a variation, the plugin can include relevant IDs so attendees are counted properly for variable products.
  • The list is primarily based on purchaser user IDs, meaning it will show registered users who purchased the product.
  • The list is ordered alphabetically by display name.

Guest checkouts (no associated user account) generally won’t appear in the list, because there is no user ID to display. If your workflow relies heavily on guest purchases, consider requiring account creation at checkout or extending the plugin.

Optional “Purchase date” column:

  • When enabled, the plugin looks up and formats the most relevant purchase date per user for the product(s).

9. Performance, caching, and render modes

This plugin is built specifically to avoid slowing down product pages.

Async mode (recommended)

  • The shortcode outputs a lightweight wrapper + loading text.
  • The attendee table is fetched via AJAX (admin-ajax.php) and injected into the page.
  • Results are cached for the configured TTL to reduce repeated order queries.

Sync mode

  • The attendee table is generated server-side during page render.
  • Use sync mode only when you’re confident the attendee set is small or the page is not performance-sensitive.

Cache invalidation

When orders change, caches are purged for products contained in the order, including events like:

  • checkout order processed
  • order status changed
  • order updated

10. Access control and privacy

Require login

You can require login either:

  • globally in Behavior → Require login, or
  • per-shortcode via require_login="1".

Privacy controls

You can limit exposed data by toggling display columns:

  • Turn off full names and show only avatars
  • Disable email display
  • Disable purchase dates

This is useful for member directories where attendees should be visible but personal details should be limited.


11. Developer hooks and filters

Filter: Auto-insert categories

add_filter( 'sa_bal_auto_insert_categories', function( $cats, $product_id ) {
  return $cats;
}, 10, 2 );

Filter: Order statuses used for attendee lookup

add_filter( 'sa_bal_attendees_statuses', function( $statuses, $product_id ) {
  // Example: include on-hold
  $statuses[] = 'wc-on-hold';
  return $statuses;
}, 10, 2 );

Filter: Cache TTL (seconds)

add_filter( 'sa_bal_attendees_cache_ttl', function( $ttl, $product_id ) {
  return 600;
}, 10, 2 );

Filter: Fallback days (how far back to search)

add_filter( 'sa_bal_attendees_fallback_days', function( $days, $product_id ) {
  return 365;
}, 10, 2 );

Filter: Purchase date format

add_filter( 'sa_bal_attendees_purchase_date_format', function( $format ) {
  return 'M j, Y';
});

12. Troubleshooting

The list shows “No product context found.”

  • Add id="123" to the shortcode, or
  • Place the shortcode on a single product page.

The list is stuck on “Loading attendees…”

  • Confirm your site isn’t blocking wp-admin/admin-ajax.php.
  • Check the browser console for JavaScript errors.
  • Temporarily disable caching/minification plugins to test.

The list is empty but I know people purchased

  • Confirm the purchasers are registered users (not guest checkout).
  • Confirm the order statuses you count are included in Behavior → Order statuses.
  • If your event is older, increase Fallback days.

I’m seeing performance issues on large events

  • Use Async mode (Behavior → Render mode).
  • Increase cache TTL so repeated loads don’t query orders constantly.
  • Limit auto-insert to specific categories (so the plugin doesn’t run everywhere).
  • Consider disabling “Purchase date” if it adds overhead on very large lists.

DataTables warning: “Cannot reinitialise DataTable”

  • This plugin prevents re-init by checking whether the table is already a DataTable before initializing.
  • If you have custom theme scripts also initializing DataTables globally, exclude .sa-bal-attendees__table from your custom initializer.