Event Post System — Custom Post Type, Fields & Templates
Documentation of the event custom post type on baseworks.com — its ACF fields, taxonomies, Elementor template routing, filtering logic, and the redirect pattern used for events with separate landing pages.
Custom Post Type: event
Section titled “Custom Post Type: event”Registered by baseworks-site-events.php (mu-plugin). Archive at /events/. The post type predates Elementor and was built by the original site developers.
Supported features: title, editor, thumbnail, excerpt, author Taxonomies: see below
Taxonomies
Section titled “Taxonomies”All event taxonomies are registered in baseworks-site-events.php.
| Taxonomy slug | Label | Hierarchical | Examples | Primary use |
|---|---|---|---|---|
event_cat | Event Categories | Yes | ”Study Group”, “Baseworks Practice Session”, “Open Day” | Elementor template routing; front-end filtering |
event_topic | Topics | Yes | ”Baseworks Practice”, “Scientific Presentation” | Topical grouping |
event_level | Levels | Yes | ”UNIVERSAL”, “Advanced” | Audience level filtering |
event_year | Event Year | No | ”2024”, “2025”, “2026” | Critical — determines which global Elementor template applies (see Template Routing) |
region | Region | — | “NORTH AMERICA”, “EUROPE” | Geographic filtering in WP Grid Builder widgets |
country | Country | — | “Canada”, “Italy” | Geographic filtering |
city | City | — | “Montreal”, “London” | Geographic filtering |
post_tag | Tags | — | “Baseworks Practice”, “Body Awareness” | General tagging, search |
translation_priority | Translation Priority | — | “Optional”, “Required” | WPML workflow |
ACF Custom Fields
Section titled “ACF Custom Fields”All fields are registered via ACF and stored in wp_postmeta. The _field_key entries (e.g. _event_start_date) are ACF’s internal field references — do not modify them directly.
Date & Time Fields
Section titled “Date & Time Fields”| Meta key | ACF field key | Format | Purpose |
|---|---|---|---|
event_start_date_and_time | field_63b47f3786420 | YYYY-MM-DD HH:MM:SS | Event schema startDate. Note: seopress-event-schema-dates.php MU plugin converts space → T for ISO 8601 compliance |
event_start_date | field_63922df866bda | YYYYMMDD | Used by custom queries for upcoming vs. past filtering |
event_end_date | field_63922e8bf62cc | YYYYMMDD | Same — last day of event. Note: seopress-event-schema-dates.php converts to YYYY-MM-DD for schema |
event_date_text | field_6509e69238376 | Human-readable string | Displayed in Elementor template, e.g. “April 4–May 16, 2026” |
event_month | field_63d2e82e941a3 | Month name | Display and month-based filtering, e.g. “April” |
is_single_day_event | field_63921d7c67ffc | 0 or 1 | Toggles single-day display logic in template |
Location Fields
Section titled “Location Fields”| Meta key | ACF field key | Format | Purpose |
|---|---|---|---|
event_city_country | field_67d2122eb0499 | City | Country | Display text in template |
event_location | field_63922f0f49258 | Country string | Filtering |
event_local | field_648b7a12bcadb | HTML string | Venue name + address, e.g. <strong>Proto Studio</strong> | 5333 Av. Casgrain suite 1107, Montréal |
event-latitude | field_651588d9b634e | Decimal | Map pin latitude |
event_longitude | field_65158931c39e9 | Decimal | Map pin longitude |
Display & Booking Fields
Section titled “Display & Booking Fields”| Meta key | ACF field key | Values / Format | Purpose |
|---|---|---|---|
event_page_banner | field_650eda9e8e4d6 | Attachment ID | Banner image (background/texture without text overlay) — always different from the featured image |
event_facilitator_title | field_63922f5e45e25 | Label string | Section heading above facilitator profiles, e.g. “FACILITATORS” or “Facilitators” |
event_show_book_section | field_6509e3810a3c6 | "Yes" / "No" | Shows or hides the booking section in the Elementor template |
event_show_student_book_button | field_66453777f5f6c | "Yes" / "No" | Separate booking button for existing students |
event_book_url | field_6509f3b29b6c9 | URL or empty | General booking link |
event_book_url_student | field_664537c0ec25d | URL or empty | Student-specific booking link |
event_organizer | (no ACF key ref) | String | Organizer name. “Baseworks” for events we run; different for conferences where Baseworks is a participant |
Note on booking fields: Recent Baseworks-run events (Study Group, Practice Sessions) manage booking directly on their landing pages using custom shortcodes, not via these fields. The event_show_book_section is currently set to "No" on these events. The fields remain in place for future use or for simpler events.
Featured Image
Section titled “Featured Image”The WordPress featured image (_thumbnail_id) and the event_page_banner field serve different purposes:
- Featured image — the primary visual asset, typically includes the event title and design treatment. Used in listings, social cards, and archive views.
- Banner (
event_page_banner) — the background/texture image without any text overlay. Used as a full-bleed section background in the Elementor template.
These are always different images. Both should be prepared before publishing.
Post Author — Determines Facilitator Profile Display
Section titled “Post Author — Determines Facilitator Profile Display”The post author controls which facilitator profile(s) are displayed by the Elementor template. Set intentionally — do not leave as default admin.
| Event led by | WP user | User ID | Login | |
|---|---|---|---|---|
| Asia only | Asia Shcherbakova | 47 | pandasia | asia@baseworks.com |
| Patrick only | Patrick Oancia | 1 | basework | pat@baseworks.com |
| Both Asia and Patrick | BASEWORKS | 148 | baseworks | baseworksmedia@gmail.com |
When the baseworks user (ID 148) is set as author, the default Elementor event template pulls both profiles from hardcoded template sections.
SEOPress Per-Post Fields
Section titled “SEOPress Per-Post Fields”| Meta key | Purpose |
|---|---|
_seopress_titles_title | Custom SEO title (overrides auto-generated) |
_seopress_titles_desc | Meta description |
_seopress_social_fb_title | OG title (Facebook / social share) |
_seopress_social_fb_desc | OG description |
_seopress_social_fb_img | OG image URL |
_seopress_social_fb_img_attachment_id | OG image attachment ID |
_seopress_social_twitter_desc | Twitter card description |
_seopress_robots_canonical | Canonical URL override (leave empty unless redirecting) |
_seopress_robots_primary_cat | Term ID for primary category — used in breadcrumb schema |
_seopress_pro_schemas | Serialized array with event schema location data (venue name + address). References global schema template ID 45838. Structure: a:1:{i:45838;a:1:{s:20:"rich_snippets_events";a:2:{s:13:"location_name";s:XX:"...";s:16:"location_address";s:XX:"...";}}} |
Schema date formatting: The seopress-event-schema-dates.php MU plugin auto-fixes two format issues before SEOPress outputs the event schema JSON-LD:
event_start_date_and_timespace →T(MySQL format → ISO 8601)event_end_dateYYYYMMDD→YYYY-MM-DD
Elementor Template Routing
Section titled “Elementor Template Routing”Three layers, applied in priority order (highest wins):
1. Per-event custom template (highest priority)
Section titled “1. Per-event custom template (highest priority)”Conditioned to a specific post ID: include/singular/event/[ID]
Used for events with complex layouts — Study Group cohorts, Practice Sessions, Open Days. These templates must be built in Elementor after the event post is created and the condition set to the new post’s ID. The WP-CLI publishing workflow creates the post skeleton; the Elementor template is a separate step.
Examples: ID 48292 (Practice Sessions Spring 2026), IDs 47530–48898 (Study Group Spring 2026), IDs 44716–45590 (Open Day Jan 2026).
2. Category-based template
Section titled “2. Category-based template”Conditioned on event category taxonomy: include/singular/in_event_cat/[term_id]
Example: ID 35372 “2025 Event - Upcoming” (conditioned on event_cat term 1245).
3. Global default templates (lowest priority)
Section titled “3. Global default templates (lowest priority)”Applied to all events not matched by more specific conditions:
| Template | Condition | Covers |
|---|---|---|
| ”BW Single Event Post Template NEW” (ID 12347) | event_year terms 1150, 1234, 1244 | 2024, 2025, 2026 events |
| ”BW Single Event Post Template OLD” (ID 21938) | All events NOT in those years | Pre-2024 events |
The event_year taxonomy assignment is therefore important not just for filtering but also for ensuring the correct global template is applied.
Post Content & Excerpt
Section titled “Post Content & Excerpt”The post_content field should contain a clean HTML description of the event. This content is used by:
- Elementor’s “Post Content” dynamic widget (in templates that use it)
- The LLMs.txt output (the
llms-txt-custom-content.phpMU plugin reads post content for events) - SEO and archive display
For events with custom Elementor templates that hardcode all layout sections, post_content may be minimal (e.g., just a heading) — the visual content lives in Elementor. However, including a clean description in post_content is still recommended for SEO and AI discoverability purposes.
The Redirect Pattern
Section titled “The Redirect Pattern”When to use: When an event post needs to exist for structural reasons (appear in sidebar widgets, the events archive, and the front page) but visitors should land on a separate campaign or landing page rather than the event post URL.
How it works: A Fluent Snippet using the post_type_link filter intercepts get_permalink() for the specific post ID and returns the campaign page URL instead. This makes all widget links and archive links point to the landing page — without a server-side redirect that would affect SEO.
The event post URL remains accessible directly (it is not blocked by a 301 or 302) — the redirect is a permalink override at the PHP level, affecting WordPress functions but not direct URL access. This is intentional: the event post stays indexed, and its URL structure remains available.
Example: Event 47542 (Montreal Practice Sessions — Spring 2026)
- Event post URL:
/event/montreal-practice-sessions-spring-2026/ - All widget/archive links point to:
/montreal-practice-sessions/ - Implemented via: Fluent Snippet
41-redirect-practice-sessions-event.php - Changelog ref:
sites/baseworks.com/code-snippets/2026-03-09-redirect-practice-sessions-event.php
When NOT to use: When the event post IS the destination — e.g., Study Group cohort event posts that use a custom Elementor template are the actual page visitors land on; no redirect is needed.
Event Vault Notes & Publishing Workflow
Section titled “Event Vault Notes & Publishing Workflow”Event vault notes live in 02-areas/website/events/. See Events — Index and Event Post Guidelines for the workflow.
Two publishing paths:
-
Note already exists (event copy was drafted in the vault): Use the
/create-event-postskill — it reads the vault note, prompts for any missing metadata, then publishes to WordPress via WP-CLI. -
No note yet (event described verbally or from an external brief): The skill creates the vault note first, then proceeds to publish.
Related
Section titled “Related”- custom-code-overview — full inventory of all MU plugins including event-related ones
- _event-guidelines — vault note format and publishing workflow
- seo-architecture-session-2026-02-24 — decisions on event post vs. hub page architecture
- baseworks-changelog-ref — source files for code snippets