Skip to content

Event Post System — Custom Post Type, Fields & Templates

Created 2026-04-01
Updated 2026-04-01
Tags websiteinfrastructureeventscustom-post-typeacfelementortechnical

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.


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


All event taxonomies are registered in baseworks-site-events.php.

Taxonomy slugLabelHierarchicalExamplesPrimary use
event_catEvent CategoriesYes”Study Group”, “Baseworks Practice Session”, “Open Day”Elementor template routing; front-end filtering
event_topicTopicsYes”Baseworks Practice”, “Scientific Presentation”Topical grouping
event_levelLevelsYes”UNIVERSAL”, “Advanced”Audience level filtering
event_yearEvent YearNo”2024”, “2025”, “2026”Critical — determines which global Elementor template applies (see Template Routing)
regionRegion“NORTH AMERICA”, “EUROPE”Geographic filtering in WP Grid Builder widgets
countryCountry“Canada”, “Italy”Geographic filtering
cityCity“Montreal”, “London”Geographic filtering
post_tagTags“Baseworks Practice”, “Body Awareness”General tagging, search
translation_priorityTranslation Priority“Optional”, “Required”WPML workflow

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.

Meta keyACF field keyFormatPurpose
event_start_date_and_timefield_63b47f3786420YYYY-MM-DD HH:MM:SSEvent schema startDate. Note: seopress-event-schema-dates.php MU plugin converts space → T for ISO 8601 compliance
event_start_datefield_63922df866bdaYYYYMMDDUsed by custom queries for upcoming vs. past filtering
event_end_datefield_63922e8bf62ccYYYYMMDDSame — last day of event. Note: seopress-event-schema-dates.php converts to YYYY-MM-DD for schema
event_date_textfield_6509e69238376Human-readable stringDisplayed in Elementor template, e.g. “April 4–May 16, 2026”
event_monthfield_63d2e82e941a3Month nameDisplay and month-based filtering, e.g. “April”
is_single_day_eventfield_63921d7c67ffc0 or 1Toggles single-day display logic in template
Meta keyACF field keyFormatPurpose
event_city_countryfield_67d2122eb0499City | CountryDisplay text in template
event_locationfield_63922f0f49258Country stringFiltering
event_localfield_648b7a12bcadbHTML stringVenue name + address, e.g. <strong>Proto Studio</strong> | 5333 Av. Casgrain suite 1107, Montréal
event-latitudefield_651588d9b634eDecimalMap pin latitude
event_longitudefield_65158931c39e9DecimalMap pin longitude
Meta keyACF field keyValues / FormatPurpose
event_page_bannerfield_650eda9e8e4d6Attachment IDBanner image (background/texture without text overlay) — always different from the featured image
event_facilitator_titlefield_63922f5e45e25Label stringSection heading above facilitator profiles, e.g. “FACILITATORS” or “Facilitators”
event_show_book_sectionfield_6509e3810a3c6"Yes" / "No"Shows or hides the booking section in the Elementor template
event_show_student_book_buttonfield_66453777f5f6c"Yes" / "No"Separate booking button for existing students
event_book_urlfield_6509f3b29b6c9URL or emptyGeneral booking link
event_book_url_studentfield_664537c0ec25dURL or emptyStudent-specific booking link
event_organizer(no ACF key ref)StringOrganizer 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.

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 byWP userUser IDLoginEmail
Asia onlyAsia Shcherbakova47pandasiaasia@baseworks.com
Patrick onlyPatrick Oancia1baseworkpat@baseworks.com
Both Asia and PatrickBASEWORKS148baseworksbaseworksmedia@gmail.com

When the baseworks user (ID 148) is set as author, the default Elementor event template pulls both profiles from hardcoded template sections.


Meta keyPurpose
_seopress_titles_titleCustom SEO title (overrides auto-generated)
_seopress_titles_descMeta description
_seopress_social_fb_titleOG title (Facebook / social share)
_seopress_social_fb_descOG description
_seopress_social_fb_imgOG image URL
_seopress_social_fb_img_attachment_idOG image attachment ID
_seopress_social_twitter_descTwitter card description
_seopress_robots_canonicalCanonical URL override (leave empty unless redirecting)
_seopress_robots_primary_catTerm ID for primary category — used in breadcrumb schema
_seopress_pro_schemasSerialized 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_time space → T (MySQL format → ISO 8601)
  • event_end_date YYYYMMDDYYYY-MM-DD

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).

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:

TemplateConditionCovers
”BW Single Event Post Template NEW” (ID 12347)event_year terms 1150, 1234, 12442024, 2025, 2026 events
”BW Single Event Post Template OLD” (ID 21938)All events NOT in those yearsPre-2024 events

The event_year taxonomy assignment is therefore important not just for filtering but also for ensuring the correct global template is applied.


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.php MU 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.


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 live in 02-areas/website/events/. See Events — Index and Event Post Guidelines for the workflow.

Two publishing paths:

  1. Note already exists (event copy was drafted in the vault): Use the /create-event-post skill — it reads the vault note, prompts for any missing metadata, then publishes to WordPress via WP-CLI.

  2. No note yet (event described verbally or from an external brief): The skill creates the vault note first, then proceeds to publish.