Shortcode Reference

Internal reference for the custom shortcodes available on this site. Not linked in navigation — bookmark this URL. For implementation detail (template files, CSS classes, ACF field names), see this repo's MINISTRIES-CPT.md and the child theme's CLAUDE.md.

Ministry Shortcodes

Shortcodes for displaying ministry posts (the Ministries custom post type) in page/post content.

[ministry_list] — Ministry Listing / Card Grid

Shows one or more ministries as a card grid: image, title, excerpt, contact info, meeting schedule, and a “Learn more” link. Use on any listing page, or to embed a single ministry’s card elsewhere.

[ministry_list]
[ministry_list categories="housing-ministries" columns="2"]
[ministry_list categories="justice-ministries" exclude_categories="partner-organizations"]
[ministry_list post="visual-arts-ministry" show_schedule="false"]
AttributeDefaultWhat it does
post(none)Slug or numeric ID of a single ministry to show. Overrides categories/count/columns/orderby/order entirely.
categories(all)Show only ministries in this Ministry Category (slug). Comma-separate multiple slugs to match any of them.
exclude_categories(none)Leave out ministries in this Ministry Category (slug). Comma-separate to exclude any of them. Combines with categories. Ignored in single-post mode.
count(all)Maximum number of ministries to show.
columns11 or 2. Always collapses to one column on mobile.
orderby / ordertitle / ascendingHow to sort the list.
show_titletrueSet false to hide the title.
show_excerpttrueSet false to hide the excerpt (WordPress excerpt, not the Ministry Description field).
show_imagetrueSet false to hide the featured image.
show_contacttrueSet false to hide the contact name/email line.
show_scheduletrueSet false to hide the meeting schedule line.
show_linktrueSet false to hide the “Learn more” link.
show_category_pillsfalseSet true to show small, non-interactive pills for each ministry’s own categories, just under the title. Not the same as categories/exclude_categories above — those pick which ministries show; this just displays each one’s categories on its own card.
card_styletrueSet false to strip the card’s rounded corners, border, and padding — useful when dropping the list into a page section that already has its own container styling.
dark_modefalseSet true when placing the list inside a dark-background container/row — gives each card a light #eaeaea fill so the title/text/links stay readable. Combines fine with card_style="false".

[ministry_directory] — Alphabetical Directory with Category Filter

Shows published ministries alphabetically by title, with category filter pills above the list — visitors can click one or more categories to narrow the list (no page reload), or click “All” to reset. Unlike [ministry_list], the filtering happens in the visitor’s browser rather than being fixed when the page is built.

Two modes, depending on whether categories is set:

Naked mode — every ministry, every category gets a pill:

[ministry_directory]

Whitelist mode — only these categories get a pill, and only ministries tagged with at least one of them appear at all:

[ministry_directory categories="music,choirs,justice-ministries,formation,youth"]

Whitelist mode is for “utility” categories that group ministries in ways that cross over the main categories (e.g. “Vestry Committees”) without cluttering the pill row. Leaving a utility category out of categories hides its pill and keeps utility-only-tagged ministries out of the directory entirely — but a ministry tagged with both a utility category and a whitelisted one still shows up and still responds to that whitelisted category’s pill. A “Partner Organization” that’s also tagged “Justice Ministries” will appear when Justice Ministries is selected, even though “Partner Organizations” itself was never in the whitelist and other partner orgs without that tag stay hidden.

Leave a category out entirely, regardless of mode:

[ministry_directory exclude_categories="partner-organizations"]
AttributeDefaultWhat it does
columns21 or 2. Always collapses to one column on mobile.
categories(none — naked mode)Comma-separated Ministry Category slugs. When set, switches to whitelist mode: pills only for these categories, and only ministries tagged with any of them (not necessarily all) appear at all. Pills are always alphabetized, regardless of the order slugs are listed in.
exclude_categories(none)Leave out ministries in this Ministry Category (slug), comma-separated for more than one. Also removes that category’s filter pill. Combines with categories in whitelist mode.
show_title / show_excerpt / show_image / show_contact / show_schedule / show_linkall trueSame meaning as [ministry_list].
show_category_pillsfalseSame meaning as [ministry_list] — separate from this shortcode’s own clickable filter pill bar above the grid.
card_styletrueSame meaning as [ministry_list].
dark_modefalseSame meaning as [ministry_list].
enable_searchfalseSet true to add a search box (matches ministry title only) above the filter pills, combined with any active category filter.
sync_urlfalseSet true to keep pill/search selections in the page’s URL, so the browser’s Back/Forward buttons step through filter changes and a link with ?category=some-slug lands pre-filtered. Meant for one directory per page — see below.
curated_pillsfalseSet true to build the default pill row (naked mode only) from categories with “Show in Directory Navigation” turned on, instead of every category in use. See below.

Filter pills only appear for categories that actually have at least one (non-excluded) ministry in them. Selecting more than one category shows ministries in any of the selected categories, not just ministries in all of them at once.

The Ministry Directory Page

The site’s one canonical directory page uses [ministry_directory] with enable_search, sync_url, and curated_pills all turned on, plus show_category_pills="true" so each card shows its own categories too.

Choosing which categories show as pills by default: each Ministry Category has a “Show in Directory Navigation” toggle (Ministries → Ministry Categories → edit a category). It’s off by default — a category won’t appear as a default pill on the directory page until this is turned on for it. Every ministry is still listed on the page regardless of this toggle; it only controls which pills show up front.

Category pills elsewhere on the site (show_category_pills="true" on a [ministry_list]/[ministry_directory] card) automatically link into this page, filtered to that one category — even for a category that isn’t one of the default pills there. Clicking one from elsewhere navigates to the directory page pre-filtered; clicking one on the directory page itself filters in place without a reload.

[ministry_events] — Upcoming Events for One Ministry

Shows the upcoming events tied to a ministry’s “Event Category” field. Runs automatically on every ministry’s own page — you generally won’t need to add this yourself.

[ministry_events]

No attributes — always reads the current ministry post’s “Event Category” and “Number of Events” fields. Renders nothing if “Event Category” is empty.

[cf] / [cf_if] — Show a Ministry Field Directly

For editing a specific ministry’s freeform content area and pulling in one of its own field values, or conditionally showing/hiding a block of content. Most ministries never need these — the standard fields already display automatically at the top of every ministry page.

[cf field="contact_email"]
[cf_if field="link"]
Check out our website!
[/cf_if]

Available field names: contact_name, contact_email, ministry_description, meeting_schedule, meeting_location, link, link_text, event_category, num_events.

Outputs a post’s featured image. Mainly useful inside a ministry’s freeform content area if you want the image somewhere other than its normal spot.

[featured_image size="medium"]
AttributeDefaultWhat it does
sizemediumAny registered WordPress image size (thumbnail, medium, large, full, etc.)
post_idcurrent postShow a different post’s featured image instead.

Event Shortcodes

Two shortcodes for displaying events in page/post content, built to work inside narrow SiteOrigin page-builder columns (TEC’s native [tribe_events view="list"] always renders full-width, which these avoid). Both render the same layout: featured image (left) | title, date/time/venue, Register/Zoom/Watch Online/Watch Recording/Download Slides links, and an excerpt (right), followed by a “View Full Calendar” link (to /connect/calendar/, the site’s main calendar page).

[tribe_events_list] — Upcoming Events

Shows upcoming events, soonest first.

[tribe_events_list]
[tribe_events_list category="worship" limit="5" show_venue="false" show_zoom="true"]
AttributeDefaultWhat it does
category(all)Show only events in this category (slug).
tag(all)Show only events with this tag (slug).
limit / per-pageTEC defaultMaximum number of events to show.
featuredfalseSet true to show only featured events.
tax-operandANDWhen combining category and tag: AND (must match both) or OR (either).
show_imagetrueSet false to hide the featured image.
show_descriptiontrueSet false to hide the excerpt.
show_venuetrueSet false to hide venue name(s) from the date line.
show_registrationtrueSet false to hide the “Register” link. It’s also automatically hidden once an event is past, regardless of this setting.
show_zoomtrueSet false to hide the “Join via Zoom” link. It’s also automatically hidden once an event is past, regardless of this setting.
show_streamtrueSet false to hide the “Watch Online” link.
show_recordingtrueSet false to hide the “Watch Recording” link.
show_slidestrueSet false to hide the “Download Slides” link.
show_view_calendartrueSet false to hide the “View Full Calendar” link at the bottom.

If an event has more than one venue set (e.g. a hybrid event with an in-person hall and “Online via Zoom”), all of them are listed in the date line, joined with “&”.

[tribe_events_list_past] — Past Events

Shows past events, most recent first (a custom shortcode — TEC doesn’t offer this natively).

[tribe_events_list_past]
[tribe_events_list_past category="youth" num="20" year="2025"]
AttributeDefaultWhat it does
category(all)Show only events in this category (slug). Comma-separate multiple slugs to match any of them — don’t repeat the attribute itself, that silently overwrites rather than combining.
num10Maximum number of events to show.
year(none)Restrict to a specific calendar year, e.g. year="2025".
beforenowOnly show events before this date/time. Accepts 2025-06-01, "June 1, 2025", or relative phrases like "3 months ago".
after(none)Only show events after this date/time (same format options as before).
show_imagetrueSet false to hide the featured image.
show_descriptiontrueSet false to hide the excerpt.
show_venuefalseSet true to show venue name(s) in the date line.
show_registrationfalseSet true to show the “Register” link. Since every event here is already in the past, it never actually shows regardless of this setting.
show_zoomfalseSet true to show the “Join via Zoom” link. Since every event here is already in the past, it never actually shows regardless of this setting.
show_streamtrueSet false to hide the “Watch Online” link.
show_recordingtrueSet false to hide the “Watch Recording” link.
show_slidestrueSet false to hide the “Download Slides” link.
show_view_calendartrueSet false to hide the “View Full Calendar” link at the bottom.

If year is set, it overrides before/after. Events are always required to have actually happened — a future before or year won’t pull in upcoming events, it just narrows the past-events window up to right now.

Where the Register / Zoom / Watch Online / Watch Recording / Download Slides Links Come From

Set per-event in the WordPress event editor, in the Links box in the sidebar (not TEC’s own “Event Website” field, which isn’t used by these shortcodes): Registration URL, Zoom Link, Stream Link, Recording URL, Slides URL. The last two are meant to be filled in after the event, once its recording/slides are ready. Each link only appears if its field has a value on that event, and only if its corresponding show_* flag isn’t set to false — except Register and Join via Zoom, which are also hidden automatically once the event is past, no matter what show_registration/show_zoom are set to.

Staff Shortcodes

One shortcode for displaying staff posts (clergy, staff, vestry, etc. — grouped by the Staff Group taxonomy) in page/post content. Reads the same fields as the “Staff Options” box on a staff member’s edit screen.

[stmarks_staff] — Staff Grid / Card List

Shows one or more staff members, grouped by Staff Group (cat=). Two layouts, switched with layout=: grid (default — vertical tiles, photo on top, everything centered, columns default to 4) or card (horizontal, like [ministry_list] — photo on the left, text left-aligned to its right, columns default to 2 and only 1 or 2 are supported, collapsing to a single column below 992px — the same breakpoint the site header’s own mobile menu switches on at).

[stmarks_staff cat="clergy"]
[stmarks_staff cat="clergy" layout="card" ratio="portrait"]
[stmarks_staff cat="staff" columns="4" ratio="square" show_content="false"]
[stmarks_staff cat="clergy,vestry"]
AttributeDefaultWhat it does
cat(all)Show only staff in this Staff Group (slug, e.g. clergy, staff, vestry). Comma-separate multiple slugs to match any of them.
layoutgridgrid (vertical tiles) or card (horizontal, like [ministry_list]).
columns4 (grid) / 2 (card)Grid: 1-6. Card: 1 or 2 only (out-of-range values are clamped). Leave unset for the right default per layout.
items100Maximum number of staff to show. -1 for no limit.
orderby / ordermenu_order / ASCmenu_order matches the drag-and-drop order set on the Staff list screen in wp-admin.
ratioportraitPhoto aspect ratio: square (1:1), portrait (3:4), landscape (4:3), or wide (16:9). Photos always crop to fit — never stretched/warped, regardless of the original photo’s own dimensions.
show_contentfalseSet true to show the staff member’s bio/excerpt below their title.
linktrueSet false to stop the photo and name from linking to that staff member’s own page.

Email and phone (if set) each render on their own line, icon plus the actual address/number, italicized. Facebook/X/Instagram/LinkedIn (if set) render as a small row of icon-only links below that.