| 开发者 | rainbowgeek |
|---|---|
| 更新时间 | 2026年10月23日 23:12 |
| PHP版本: | 8.2 及以上 |
| WordPress版本: | 7.1 |
| 版权: | GPLv3 or later |
| 版权网址: | 版权信息 |
.ics file, with the venues, organizers, attendees and bookings the old plugin stored. The import works even if the old plugin is already deactivated.
AI agents
Connect Claude, ChatGPT, Cursor or any MCP client by pasting one address and signing in with your WordPress account. The agent can then find, create and update your events and bookings with your WordPress permissions. It cannot delete anything.
Also included
wpml-config.xml is bundled).happenboard.Yes. You can add the blocks to any post, page or widget area. On a classic theme, an event page shows its date, countdown, RSVP form, venue, organizer, Add to Calendar links and categories around the event's description, and a booking type's page shows its booking form. The events archive shows the calendar and the upcoming events, and a category or tag archive shows its events, between your theme's header and footer. If your theme has its own archive-hboard_event.php or taxonomy-happenboard_category.php, HappenBoard uses it.
On a block theme, HappenBoard adds block templates for event pages and archives, which you can edit in the Site Editor.
No. HappenBoard uses its own post type (hboard_event), meta keys (_happenboard_*), database tables (happenboard_occurrences, happenboard_attendees, happenboard_bookings, happenboard_availability_rules, happenboard_agent_log) and prefixed libraries (HappenBoard\Vendor\…), so it can run next to another event plugin.
The only thing they may share is the address. Events live under /events/ by default, as in The Events Calendar, Events Manager and Sugar Calendar. You can change it under Settings → Permalinks → Event base (or with the happenboard_event_rewrite_slug filter). Tools → Site Health tells you when a page, a post type or a taxonomy uses the same address.
Yes, on every event page, following Google's Event structured data documentation. If SEOPress is active and you set up an Event schema for the same post in SEOPress, HappenBoard leaves it to SEOPress so the page does not get two.
Yes. A repeat rule (every day, week, month or year, with exceptions) is saved in the standard iCalendar format and turned into a list of dates. Each date has its own page and its own RSVPs, and a date can be skipped. Moving one date of a series needs HappenBoard Pro.
Under HappenBoard → Attendees. You can search, filter by event or date, change a status or a number of seats, move an attendee to another date and export the list to CSV.
Yes. The text domain is happenboard, and translations are made on translate.wordpress.org. Developers can generate a fresh .pot file with npm run makepot.
Yes. Events, venues, organizers and their categories and tags can be translated, through the bundled wpml-config.xml. The calendar, lists, grids and Query Loop show the events of the current language, and a translated event shows its venue and organizer in the same language. RSVP emails are sent in the language of the event the attendee registered on, and booking emails in the language of the page the booking was made on. The site's iCal feed lists the default language's events; add ?lang=fr (Polylang) to its address for another language.
The translations of an event share its seats. Registrations on any translation count against one capacity, the one set on the default language's event (per date, on a recurring event). Every translation shows the same seats remaining, and an email address registered on one translation is registered on all of them. In the admin, an event's attendee list shows the attendees of all its translations, with a Language column; untick "All languages" to see one translation.
Booking types are not translated: one booking type serves every language, so its availability and bookings stay in one place. Its title and description show as you wrote them, and the rest of the booking page is translated.
Yes. The RSVP and booking forms contain nothing personal or time-limited, so a page cache can serve them to every visitor. Each form fetches its anti-spam timestamp when the visitor starts filling it in. For a signed-in visitor the form contains a security token, so HappenBoard asks page caches not to store that page.
Behind a reverse proxy or a CDN, every request reaches WordPress from the proxy's address, so the per-address limits on RSVPs and bookings would treat all your visitors as one. Give HappenBoard the visitor's real address with the happenboard_rsvp_client_ip and happenboard_booking_client_ip filters. Behind Cloudflare, for example:
add_filter( 'happenboard_rsvp_client_ip', fn( $ip ) => filter_var( $_SERVER['HTTP_CF_CONNECTING_IP'] ?? '', FILTER_VALIDATE_IP ) ?: $ip );
Add the same line for happenboard_booking_client_ip. Only trust a header that your proxy sets: if the site can also be reached directly, anyone can send that header.
Deleting the plugin from Plugins → Installed Plugins keeps your data: events, attendees, settings, categories and tags stay in the database, so installing HappenBoard again brings everything back.
To erase everything, add this line to your wp-config.php before you click Delete:
define( 'HAPPENBOARD_UNINSTALL', true );
Deleting the plugin then:
wp_happenboard_occurrences, wp_happenboard_attendees, wp_happenboard_bookings, wp_happenboard_availability_rules and wp_happenboard_agent_log;happenboard_, except HappenBoard Pro's;wp-config.php.
HappenBoard Pro's data (its settings, payment keys, licence, tables and capabilities) is not part of this. Pro erases it when you delete Pro with define( 'HAPPENBOARD_PRO_UNINSTALL', true ); in wp-config.php. To erase everything, add both lines and delete both plugins.
happenboard_manage_events, happenboard_manage_venues and happenboard_manage_organizers capabilities.events by default) can be changed under Settings → Permalinks. Pages under the base are served, and conflicts are reported in Site Health.search attribute (set in the code editor, or by HappenBoard Pro's Filter Bar).wpml-config.xml covers every field and translatable block label.round_robin. The least_loaded value they offered was stored as is and gave every booking to the first free host; it is now stored and read as round-robin.