Speakers Bureau

Give your Rotary club or district one place to find a speaker for its next meeting.

Speakers Bureau turns your club or district WordPress site into a speaker directory. Speakers register and keep their own profiles up to date, and visitors search by topic, ZIP code or map. Contact details stay private when a speaker wants them to.

  • A searchable speaker directory with ZIP code and radius search
  • An interactive map of speaker locations
  • Self-service registration and profile editing for speakers
  • A private contact form when a speaker hides their email or phone
  • Editable HTML emails with one-click login links
  • Automatic reminders that keep profiles current
  • A form builder, profile layout and display settings you control
  • CSV import to add a whole speaker list at once

Available download: version 3.5.22. Version 3.5.23 release download is coming soon.

Speakers Bureau — Find the right speaker for your meeting

Speaker directory and search

The [speaker_list] shortcode shows your speakers as a grid of cards. Each card shows the speaker's photo, name and the fields you choose. Visitors type into Search speakers… to search every field you've marked searchable in the Form Builder.

Click Location… to search by distance. Enter a ZIP, a Country and a Radius (miles), and each card shows its approximate distance. The Sort menu offers Newest, Most Popular (by profile views), Nearest and Default, which lists the most recently updated profiles first.

Turn distance search on or off under Directory Options with Enable geo/radius search. Set the starting values with Default country code and Default radius (miles). Enable “Nearest” sort adds the Nearest option. The [speaker_topics_index] shortcode adds a page of topic buttons, and each button runs a search for that topic.

Speaker directory with a search box, location filter and six speaker cards showing distance and topics

Visitors search by keyword, or by ZIP code and radius.

Speaker map

The [speaker_map] shortcode shows every published speaker on an OpenStreetMap map. Click a pin to see the speaker's photo, headline, organization and topics, plus a View Profile button. Speakers at the same address share one pin, and the map zooms to fit all pins.

Addresses are turned into map coordinates automatically when a profile is saved. To refresh every speaker at once, use Rebuild Coordinates under Maintenance. It runs in the background with a progress bar and looks up one address every 1.2 seconds to stay within OpenStreetMap's usage limits. It skips speakers whose address hasn't changed and lists any it couldn't place, with an edit link for each.

You can set the map's height, width, zoom, center_lat and center_lng in the shortcode.

Map with speaker pins and an open popup showing a speaker's headline, topics and View Profile button

Click any pin to preview a speaker and open their profile.

Speaker registration and self-service profiles

Speakers sign themselves up with [speaker_register]. A visitor who isn't logged in enters an email address first. They get a verification link that works for 24 hours, set a password, and then fill in their profile.

New profiles are saved as drafts for you to approve. Turn on Auto-Publish Profiles under Display to publish a profile right away once every required field is complete.

Speakers update their own profiles with [speaker_edit]. The Disable My Profile button hides a profile from the directory, and Enable My Profile brings it back. The Create Default Pages button sets up Browse Speakers, Register Speaker and My Profile pages for you.

Six-step flow: enter email, verify email, set password, fill in profile, review, keep it current

Speakers sign up, verify their email and manage their own profile.

Private contact form

Some speakers don't want their email address or phone number on a public page. When a speaker marks either one private, or leaves the phone number blank, their profile shows a Send a message to button instead.

The visitor fills in their name, email, an optional phone number and a message, then answers a simple math question to block spam. The message goes straight to the speaker, with the visitor's address set as the reply-to. A blind copy goes to the BCC Email Address, or to the WordPress admin email if that field is blank.

Contact form over a speaker profile with name, email, phone, message and a math security question

Visitors reach the speaker without seeing their email address or phone number.

Email Templates and one-click login

Edit each email's subject and HTML body under Email Templates:

  • Speaker Confirmation Subject and Body: sent to a speaker who registers
  • Admin Notification Subject and Body: sent to you when a speaker registers
  • Profile Update Subject and Body: sent when a profile changes
  • Contact Form Subject and Body: sent to a speaker from the contact form
  • Manual Email Subject and Body: sent only when you click Send Now

Placeholders such as {speaker_name} and {site_name} fill in for each speaker. The {magic_login_url} placeholder adds a one-click link that logs the speaker straight into their profile without a password. Each link works for 7 days, or until a newer link is sent to the same speaker.

Use Send Test Email to preview a template. Use Send Email to Speakers to send the manual template to all speakers or to selected ones.

Profile Confirmation Reminder

A speaker directory is only useful when the listings are current. When Enable Reminder Emails is on, a daily check emails any speaker who hasn't logged in for 6 months and asks them to confirm their profile. It sends no more than one reminder every 30 days.

If a speaker still hasn't logged in after 8 months, their profile is hidden from the directory. Logging in and clicking Enable My Profile restores it. Send Reminder To sets which profile statuses get reminders; the default is Published only. Run Now runs the check immediately and reports how many emails it sent and how many profiles it hid.

This feature is off by default.

Timeline showing a reminder email at 6 months without a login and the profile hidden at 8 months

Inactive speakers get a reminder at 6 months and are hidden at 8 months.

Form Builder, Profile Layout and Display

The Form Builder controls the fields speakers fill in. For each field, set its label, type, placeholder, profile section, and whether it is enabled, required, searchable or shows its label. It starts with 20 fields, including headline, topics, bio, city, ZIP code and social links.

Profile Layout arranges the public profile page into 8 sections. Section 1 is the left column. Sections 2–4 are the right column, 7 runs full width along the bottom, and 8 holds private fields that are never shown publicly. Each section has a Title, Heading, Display Title, Hide Section and CSS Class.

Display sets how the directory looks: Grid Columns, Speakers Per Page, Card Fields, Card Style, Image Style, Primary Color, Card Border Radius, Card Shadow and Date Display. Use Configuration Export/Import to copy these settings to another site.

Display settings tab showing grid columns, card fields, card style, primary color and auto-publish options

The Display tab, shown with its default settings.

Admin speaker list

The Speakers list in your dashboard adds Linked User, Last Login, Disabled, Profile Views and Last Viewed columns. Logins older than 6 months show in red. Tick or clear Disabled to hide or restore a profile without leaving the list. Profile views don't count visits from admins or from the speaker themselves.

Admin speaker list with Last Login, Disabled and Profile Views columns, one profile disabled

Spot inactive speakers and hide a profile with one click.

CSV speaker import

Already have your speakers in a spreadsheet? Go to Speakers Bureau → Import Speakers, upload a CSV file and click Preview CSV Data to check every row before anything is saved. Download Sample CSV Template gives you a file with the right columns, including name, email, phone, headline, organization, topics, city, state, ZIP code and social links.

Import speakers one at a time with Import Speaker, or all at once with Import All Speakers. Skip speakers that already exist is on by default, so rows whose email already belongs to a speaker are left alone. A progress bar and log show each result.

Each imported speaker is published right away and gets their own account with the speaker role. No email is sent during import. To welcome them, send the Manual Speaker Email with a {magic_login_url} link so they can log in with one click.

Built for speed and security

  • Loads only where it's used. Directory scripts and styles load only on speaker pages and on pages with a speaker shortcode. The map library loads only on pages with [speaker_map].
  • Every form is checked. Settings, the contact form, password reset and the profile on/off button all verify a WordPress security token (nonce) before acting.
  • Admin tools are admin-only. The settings page and its maintenance buttons require the WordPress Administrator capability.
  • Safe database queries. The distance search builds its SQL with WordPress prepared statements.
  • Clean input, escaped output. All submitted values are unslashed and sanitized, and speaker text is escaped before it reaches the page or the map.
  • Login links stay private. One-click login links use a random token, never the speaker's user ID, and expire after 7 days.
  • Spam protection. The contact form requires a math answer that is checked on the server.
  • Polite map lookups. Bulk address lookups run in the background at one request every 1.2 seconds, within OpenStreetMap's usage policy.

Compatibility

Speakers Bureau uses its own templates for single speaker pages and the speaker archive. To customize them, copy single-speaker.php or archive-speaker.php into a speakers-bureau folder in your theme, and your copy is used instead. Speaker titles are never left empty, which avoids warnings from SEO plugins such as Yoast SEO.

The topics index is also available as a block in the block editor, under the Speakers Bureau category.

If your site uses a Content Security Policy or an outbound firewall, allow these:

AddressUsed for
unpkg.comLeaflet 1.9.4 map library (pages with [speaker_map])
tile.openstreetmap.orgMap tiles
cdnjs.cloudflare.comFont Awesome 6.4.0 icons (directory and profile pages)
nominatim.openstreetmap.orgAddress lookups, sent from your server

Settings, requirements and installation

Requirements: WordPress 5.6 or newer and PHP 7.4 or newer.

Installation

  1. Download the ZIP file below.
  2. In WordPress, go to Plugins → Add New → Upload Plugin, choose the ZIP and click Install Now, then Activate.
  3. Go to Speakers Bureau → Directory Options and click Create Default Pages to add the Browse Speakers, Register Speaker and My Profile pages.
  4. Set your layout and colors under Display, and your emails under Email Templates.
  5. Add [speaker_map] to any page where you want the map.

Updates install from garryheath.com through your normal WordPress Updates screen.

Download

Available download: version 3.5.22 · Requires WordPress 5.6 / PHP 7.4

This page describes version 3.5.23. Its release download is coming soon.

Frequently asked questions

Do I need an account or API key?

No. Maps and address lookups use OpenStreetMap, which needs no key or account.

Do speakers need a WordPress account?

Yes. Registration creates one for them, and they use it to edit their profile. Emails can include a one-click login link, so speakers don't have to remember a password.

What happens to my speakers if I deactivate the plugin?

Nothing is deleted. Deactivating only stops the daily reminder and cleanup jobs. Your speaker profiles, settings and accounts stay in the database and come back when you reactivate.

What happens to speakers who have never logged in?

When reminders are on, they get a reminder on the next daily check, and the 8-month countdown starts that day. That gives them about 2 months to log in before their profile is hidden. The feature stays off until you turn it on.

Can I change how profiles look in my theme?

Yes. Use the Profile Layout and Display settings, or copy the plugin's templates into a speakers-bureau folder in your theme and edit them there.

Can I move my setup to another site?

Yes. Configuration Export/Import saves your form fields, profile layout, email templates and display settings to a file you can import elsewhere. Speaker profiles are not included.

Can I bring in speakers I already have?

Yes. Upload a CSV file under Speakers Bureau → Import Speakers, preview the rows, then import them one by one or all at once. Speakers whose email is already in the directory are skipped.

For developers

FilterWhat it controls
sb_speaker_list_query_argsThe WP_Query arguments used by [speaker_list], after search is applied. The plugin's own ZIP and radius search uses it.

This example limits the directory to speakers who are available for online meetings:

add_filter( 'sb_speaker_list_query_args', function ( $args ) {
    $args['meta_query'][] = array(
        'key'   => 'online-mtg',
        'value' => 'YES',
    );
    return $args;
} );

Changelog

VersionDateChanges
3.5.232026-10-02Plugin page address and requirements added to the plugin; WordPress 7.1 and PHP 8.5 compatibility headers updated; district-specific website importer removed (CSV import unchanged); reminder help text corrected
3.5.222026-08-31Security tokens added to password reset and the profile on/off button; input cleanup across 16 files
3.5.212026-08-31Code-standards cleanup with no change in behavior; safer redirects and translation fixes
3.5.202026-08-31Directory lists recently updated speakers first; unpublished speakers no longer appear in site search; version shown on the settings page
3.5.17–3.5.192026-07-26One-click magic login links in speaker emails
3.5.162026-07-17Send Reminder To lets you choose which profile statuses get reminders
3.5.152026-07-17Automatic updates now check the correct garryheath.com address
3.5.142026-07-17Rebuild Coordinates lists speakers it couldn't place, with edit links
3.5.12–3.5.132026-07-17Map no longer goes blank when a speaker's details contain quote marks
3.5.112026-07-17Background coordinate rebuild works on hosts that block loopback requests
3.5.8–3.5.102026-07-17Address lookups slowed to 1 per 1.2 seconds, unchanged addresses skipped, live progress bar
3.5.7 and earlierBefore 2026-07-17See the plugin's file header for the full history