BRM Dynamic Tags Reference

BricksMembers exposes a core set of dynamic tags and adds more tag families when you enable modules like Progress, Drip, Enrollments, Protected Downloads, Member Profiles, Quizzes, Groups, Submissions, Certificates, Member Chat, Instructor Frontend Builder, Payments, Content Bank, and Video Tracking. The exact number depends on which modules are active and which context-specific variants you use.

The new Dynamic Tag Assistant inside Bricks Builder helps you find and build the right BRM tag without memorizing the full catalog.

The assistant also includes a Templates mode for inserting reviewed BricksMembers layouts. For the full two-mode workflow, see BricksMembers Assistant for Dynamic Tags and Templates.

This reference is aligned with the current dynamic-tag registry. It focuses on the tag families BRM actually resolves today, what they output, and where context-sensitive tags work.

What Are Dynamic Tags?

Dynamic tags are placeholders that get replaced with real data when the page loads.

Example:

Welcome, {user_display_name}! You're a {brm_user:levels} member.

Output:

Welcome, John Wick! You're a Premium Plus member.

Dynamic tags work in any Bricks text field: headings, paragraphs, buttons, custom HTML, and in many more places.

Using the BricksMembers Dynamic Tag Assistant

BricksMembers Dynamic Tag Assistant in action
BricksMembers Dynamic Tag Assistant in Bricks Builder

BricksMembers dynamic tags are powerful, but the catalog is large. There are more than 200 tags across progress, access, billing, downloads, quizzes, certificates, gifting, member profiles, instructor layouts, video tracking, and other modules. Remembering every tag name, modifier, loop context, and output type is not realistic when you are building in Bricks.

BricksMembers solves that with a builder-only Dynamic Tag Assistant inside Bricks. Use it as the practical starting point for this reference: it searches the BRM tag catalog, groups tags by feature, explains what each tag outputs, and helps you build the exact tag syntax you need instead of making you memorize or scan every possible tag.

The assistant is not just another long list of dynamic tags. It gives you a proper interface for finding the right tag, choosing the available options, and generating structured tags with the correct modifiers for the current use case.

To use it, open the Bricks builder on the page or template where the tag will be used. Click the floating BRM icon in the builder canvas, or use the keyboard shortcut Ctrl/Cmd + Shift + M. The same shortcut closes the assistant again when it is already open. Then search by feature, use case, or tag name. You can browse categories such as Progress, Downloads, Billing, Gifting, Instructor Builder, Certificates, Member Profiles, and Video Watch, choose the available options, and then insert or copy the generated tag into the Bricks field.

You can configure how the assistant opens from the BricksMembers settings page. Go to BricksMembers → Integrations → Bricks Builder to enable or disable the floating assistant button, choose the button corner and offset, enable or disable the keyboard shortcut, and change the shortcut modifier or letter if it conflicts with another builder extension.

The assistant only appears in the Bricks builder for users who can edit builder content. It is module-aware, so tags for downloads, quizzes, billing, gifting, instructor builder, member profiles, and other modules appear only when the related feature is available. It does not create new runtime behavior; the generated tag is still resolved by the normal dynamic tag system documented below.

It is especially useful for structured tags where a modifier matters, including progress boundaries, profile fields, protected downloads, checkout offers, quiz items, gift claim values, certificate placeholders, and video-watch values.

  • For protected downloads, it can generate metadata tags such as {brm_download:filename}, {brm_download:size}, and {brm_download:file_type}.
  • For billing lists, it helps you pick item tags such as {brm_billing:item:receipt_url}, provider {brm_billing:item:invoice_url}, or BRM PDF {brm_billing:item:invoice_download_url}.
  • For checkout pages, it includes the checkout tax helper tags used by authored tax controls, such as {brm_checkout:tax_b2b_toggle_label}, {brm_checkout:tax_vat_id_hint}, and {brm_checkout:tax_reverse_charge_notice}.
  • For gifting and instructor layouts, it helps discover the available {brm_gift:*}, {brm_gift_transfer:*}, and {brm_instructor:*} tags that depend on the current loop or page context.

If a Bricks field expects a URL, choose a URL-style tag. If it expects plain text, choose a text tag. If it expects HTML, use only tags that intentionally output HTML, such as link or badge tags.

💡 Quick Tips: Hidden Gems

These small but powerful features make a huge difference in your designs:

Class Tags for Navigation & Styling

Perfect for query loops! Add these tags to the Style tab → CSS class field (not the General tab) to automatically style active, completed, or unlocked items.

  1. {brm_active} — Highlights the current page AND its parents in navigation menus. Perfect for course/module/lesson sidebars where you want the active lesson AND its parent module highlighted.
  2. {brm_completed} — Adds brm-completed class when a user finishes a lesson. Use it to show checkmarks, change colors, or hide “Start” buttons on completed content.
  3. {brm_unlocked} — Adds brm-unlocked class when content is available. Perfect for graying out locked lessons or disabling links to locked content.

Example: In a lesson sidebar query loop, add to Style tab → CSS class: lesson-link {brm_active} {brm_completed} {brm_unlocked}

Then style with CSS:

.lesson-link.brm-active {
  background: #FF8C42;
  color: white;
}
.lesson-link.brm-completed::after {
  content: "✓";
  color: green;
}
.lesson-link:not(.brm-unlocked) {
  opacity: 0.5;
  pointer-events: none;
}

Other Useful Tags You Might Miss

  1. {brm_user:has_level:5} — Returns 1 or 0. Perfect for Bricks conditions to show/hide content based on specific level IDs.
  2. {brm_progress:completed} — Returns 1 if current post is completed, 0 if not. Great for conditions and styling.
  3. {brm_progress:continue} — Returns a link to the next uncompleted post after the last completed one. Perfect for “Continue Learning” buttons on course pages.
  4. {brm_structure:parent} — Shows the parent level name (e.g., “Module 1” when viewing a lesson). Perfect for breadcrumbs or context headers.
  5. {brm_structure:parent:toplevel} — Shows the top-level name (e.g., “Course 1” when viewing any child). Great for course context headers.
  6. {brm_video:image} — Works with ALL Bricks image modifiers! Use {brm_video:image:large}, {brm_video:image:url}, {brm_video:image:alt}, etc. Just like native Bricks image tags.

Base Tags Overview

Core tag families registered by default:

  1. {brm_user} – User levels and membership checks
  2. {brm_structure} – Navigation and breadcrumbs
  3. {brm_video} – Video metadata (URL, image, duration)
  4. {brm_active} – Active item class for navigation
  5. {brm_post} – Post required access levels (in query loops)

Additional tag families or utility tags added when modules are enabled:

  1. {brm_progress:*} and {brm_completed} – Progress data plus the completed CSS helper class (requires Progress module)
  2. {brm_drip:*} and {brm_unlocked} – Drip timing data plus the unlocked CSS helper class (requires Drip module)
  3. {brm_enrollment:*} and {brm_enrollments:*} – Enrollment status, dates, enroll/unenroll URLs, and user enrollment collections (requires Enrollments module)
  4. {brm_download} – Protected downloads (requires Downloads module)
  5. {brm_like:*} – Like system (requires Like module)
  6. {brm_user:id}, {brm_user:display_name}, {brm_user:email}, {brm_user:first_name}, {brm_user:last_name}, {brm_user:registered}, {brm_user:avatar}, {brm_user:last_login}, and {brm_user:field:*} – Account/profile user tags (requires Member Profiles module)
  7. {brm_cert:*} – Certificates (requires Certificates module)
  8. {brm_quiz_title}, {brm_quiz_score_percent}, {brm_quiz_attempts_remaining}, {brm_quiz_q:*}, {brm_quiz_a:*}, {brm_quiz_pair:*}, and {brm_quiz_item:*} – Quiz and quiz-loop data (requires Quiz module)
  9. {brm_group:*} – Groups (requires Groups module)
  10. {brm_gift:*} – Gift claim context (requires Gifting module, since 0.9.94)
  11. {brm_submission:*} – Assignment submissions (requires Submissions module)
  12. {brm_chat:*} – Member Chat room and message context (requires Member Chat module)
  13. {brm_instructor:*} – Instructor dashboard, manager, and editor context (requires Instructor Frontend Builder module)
  14. {brm_billing:*} – Billing and subscriptions (requires Payments module)
  15. {brm_checkout:*} – Checkout-page offer context and checkout tax helper text (requires the Payments module and BRM Checkout Context)
  16. {brm_bank_*} – Content Bank source and proxy context (requires Content Bank module)
  17. {brm_video_watch:*} – Learner watch-state data (requires Video Tracking module)

Enrollment Tags

When the Enrollments module is enabled, BricksMembers adds enrollment-specific tags for the current effective enrollment anchor.

  • {brm_enrollment:status} — current effective status such as active or scheduled
  • {brm_enrollment:is_active} and {brm_enrollment:is_scheduled} — return 1 or 0
  • {brm_enrollment:current_started_at}, {brm_enrollment:scheduled_for}, and {brm_enrollment:expires_at} — enrollment timing fields
  • {brm_enrollment:source} — the current effective source, or multiple when more than one source is active
  • {brm_enrollment:enroll_url} and {brm_enrollment:unenroll_url} — simple self-service URLs for normal Bricks buttons
  • {brm_enrollments:count}, {brm_enrollments:post_ids}, {brm_enrollments:titles}, and {brm_enrollments:urls} — collection tags for the current user’s active enrollments

These tags are structure-aware. If the current post inherits its enrollment anchor from a course or parent item, the tags resolve against that effective anchor instead of blindly treating the current post as the enrolled item.

Checkout Tags

When you build checkout pages with BRM Checkout Context, BRM also exposes checkout-page tags that help you build one reusable checkout template.

  • {brm_checkout:url_offer_key} returns the active offer key when the checkout context is using the URL Parameter offer source. Use it for helper text, debugging, or headings on reusable checkout pages.
  • Authored checkout tax controls can use localized helper tags such as {brm_checkout:tax_label}, {brm_checkout:total_label}, {brm_checkout:tax_b2b_toggle_label}, {brm_checkout:tax_vat_id_label}, {brm_checkout:tax_vat_id_hint}, {brm_checkout:tax_vat_id_valid}, {brm_checkout:tax_vat_id_invalid}, {brm_checkout:tax_vat_id_unavailable}, {brm_checkout:tax_reverse_charge_notice}, {brm_checkout:tax_address_incomplete}, and {brm_checkout:tax_previewing}.
  • Inside a BRM Checkout Context, offer-style {brm_billing:item:*} tags resolve the active checkout offer before BRM falls back to a normal billing loop. That means you can print offer labels, descriptions, billing model data, enabled checkout providers, and the default provider directly inside the checkout layout.

1. User Tags

All User Tag Modifiers

  • {brm_user}
    Level names (comma-separated)
    Example: Premium Member, Course Access
  • {brm_user:levels}
    Level names (comma-separated)
    Example: Premium Member, Course Access
  • {brm_user:levels:link}
    Level names as links
    Example: <a href="/upgrade">Premium</a>, ...
  • {brm_user:levels:list}
    Level names as HTML list
    Example: <ul><li>Premium</li>...</ul>
  • {brm_user:levels:link:list}
    Level names as linked list
    Example: <ul><li><a href="...">Premium</a></li>...</ul>
  • {brm_user:levels:badges}
    Level names as one badge per assigned level
    Example: <span class="brm-user-level-badge">Premium</span>
  • {brm_user:levels:link:badges}
    Linked level badges, one badge per assigned level
    Example: <span class="brm-user-level-badge"><a href="...">Premium</a></span>
  • {brm_user:levels_count}
    Number of levels
    Example: 3
  • {brm_user:has_level:5}
    Check if user has level ID 5
    Example: 1 or 0
  • {brm_user:has_level:123}
    Check any level ID
    Example: 1 or 0

User Account and Profile Tags (Member Profiles module)

Availability: Requires Member Profiles module

  • {brm_user:id}
    User ID
  • {brm_user:display_name}
    User display name
  • {brm_user:email}
    User email address
  • {brm_user:first_name}
    User first name
  • {brm_user:last_name}
    User last name
  • {brm_user:registered}
    Registration date/time (WordPress format)
  • {brm_user:registered:F j, Y}
    Registration date with custom PHP date format
  • {brm_user:avatar}
    Avatar URL (default 96px)
  • {brm_user:avatar:large}
    Avatar URL (256px)
  • {brm_user:avatar:96}
    Avatar URL (96px)
  • {brm_user:avatar:150x150}
    Avatar URL (custom dimensions)
  • {brm_user:last_login}
    Last login date/time (WordPress format)
  • {brm_user:last_login:F j, Y g:i a}
    Last login with custom PHP date format
  • {brm_user:field:field_key}
    Custom profile field value (replace field_key with your field key, e.g. phone_number, bio)
  • {brm_user:field:avatar:url}
    Image field: URL only
  • {brm_user:field:avatar:id}
    Image field: attachment ID
  • {brm_user:field:avatar:large}
    Image field: large size (or :medium, :thumbnail, :full)

User Context Detection: BricksMembers uses a smart cascade to determine which user’s data to display:

  1. Bricks user query loop – The looped user is always used (highest priority)
  2. Author archive – On /author/username/ pages, the author is used
  3. URL parameter or clean URL?user=123, /member/username/, or /profile/123/ resolves that user
  4. Current logged-in user – Default fallback

Configure which methods are active in BricksMembers → Settings → Profiles. This enables building public profile pages where all {brm_user:*} tags display the viewed user’s data, not the visitor’s. The Member Profiles module must already be enabled on BricksMembers → Modules.

Examples:

Welcome, {user_display_name}! You have {brm_user:levels_count} levels.
Your levels: {brm_user:levels}
{brm_user:levels:link:list}
Has Premium? {brm_user:has_level:5}
Last login: {brm_user:last_login}
Phone: {brm_user:field:phone_number}

2. Progress Tags

Availability: Requires Progress Tracking module

All Progress Tag Modifiers

Format Modifiers:

  • {brm_progress}
    Percentage (no % sign)
    Example: 75
  • {brm_progress:percent}
    Percentage (no % sign)
    Example: 75
  • {brm_progress:completed}
    Is current post completed?
    Example: 1 or 0

Note: {brm_progress:completed} without a scope returns 1 if the current post is completed, 0 if not. With a scope (e.g., {brm_progress:completed:toplevel}), it returns the completed count. {brm_progress:total} and {brm_progress:percent} require a scope modifier (e.g., :toplevel, :structure, :parent).

Scope Modifiers (combine with format):

  • {brm_progress:structure}
    Current structure – average progress across all top-level posts in the structure
  • {brm_progress:toplevel}
    Top level of structure – progress of the top-level post (usually progress of the course). If you’re on a top-level post, shows that post’s progress (same as current)
  • {brm_progress:parentlevel}
    Direct parent of current post (e.g., module progress when viewing a lesson)
  • {brm_progress:parent}
    Parent level (alias for parentlevel)
  • {brm_progress:current}
    Current post itself (shows progress for the post you’re viewing, useful for posts with children like courses or modules)
  • {brm_progress:level_2}
    Specific level 2
  • {brm_progress:level_3}
    Specific level 3
  • {brm_progress:level_4}
    Specific level 4
  • {brm_progress:level_5}
    Specific level 5
  • {brm_progress:level_6}
    Specific level 6

Direct Structure/Post ID Modifiers (for use on pages without post context):

  • {brm_progress:structure_id:YOUR_STRUCTURE_ID:percent}
    Specify structure ID directly to show progress for the entire structure (no post context needed)
    Example: {brm_progress:structure_id:abc123:percent} returns progress percentage for structure “abc123”
    Use case: Dashboard pages where you know the structure ID and want to show overall structure progress
    Returns: 0 if structure ID is invalid or progress tracking is not configured for that structure
  • {brm_progress:post_id:123:percent}
    Specify a post ID to show progress for that specific post
    Example: {brm_progress:post_id:456:percent} shows progress percentage for post 456 specifically
    Use case: Showing progress for a specific course/module on a dashboard or overview page
    Important: The post must be ABOVE the progress tracking level (parent containers only, not tracked items themselves)
    Returns: 0 if post doesn’t exist, isn’t published, is at/below tracking level, or has no structure

Note: The structure_id modifier calculates progress across ALL courses in the specified structure (like :structure but without requiring post context). The post_id modifier shows progress for that specific post only (like :current but for a different post). Both work with all format modifiers (:percent, :completed, :total). To find the exact structure ID, open BricksMembers → Content & Structures and copy the Structure ID badge shown inside the structure card. The same badge also appears in the structure interface header after you open a structure. You can also copy the part after page=brm_structure_ from the browser URL exactly as shown.

Edge Cases:

  • Invalid Post ID: If the post doesn’t exist or isn’t published, returns 0
  • Post at/below tracking level: Progress is only tracked for posts ABOVE the tracking level (parent containers). If you specify a post at or below the tracking level, returns 0
  • Post without structure: If the post isn’t part of a structure, returns 0
  • Invalid Structure ID: If the structure doesn’t exist or progress tracking isn’t configured, returns 0

All Scope + Format Combinations:

  • {brm_progress:percent:structure}
    Structure percentage
  • {brm_progress:completed:structure}
    Structure completed count
  • {brm_progress:total:structure}
    Structure total count
  • {brm_progress:percent:toplevel}
    Top level percentage
  • {brm_progress:completed:toplevel}
    Top level completed count
  • {brm_progress:total:toplevel}
    Top level total count
  • {brm_progress:percent:parentlevel}
    Parent level percentage
  • {brm_progress:completed:parentlevel}
    Parent level completed count
  • {brm_progress:total:parentlevel}
    Parent level total count
  • {brm_progress:percent:current}
    Current level percentage
  • {brm_progress:completed:current}
    Current level completed count
  • {brm_progress:total:current}
    Current level total count
  • {brm_progress:percent:level_2}
    Level 2 percentage
  • {brm_progress:completed:level_2}
    Level 2 completed count
  • {brm_progress:total:level_2}
    Level 2 total count

Completion Date:

  • {brm_progress:completion_date}
    Date completed (if completed, uses WordPress date format; empty if not completed)

Continue (Next Post After Last Completed):

Automatically finds the last completed post within a boundary and returns a link to the next uncompleted post. Perfect for “Continue Learning” buttons on course overview pages or dashboards.

  • {brm_progress:continue}
    Complete HTML link to next uncompleted post (default format)
    Example: <a href="https://example.com/lesson-5" alt="Lesson 5: Advanced Topics">Lesson 5: Advanced Topics</a>
    Note: Without :url or :title modifiers, this returns a full clickable link.
  • {brm_progress:continue:url}
    URL only (for custom buttons)
    Example: https://example.com/lesson-5
  • {brm_progress:continue:title}
    Title only
    Example: Lesson 5: Advanced Topics
  • {brm_progress:continue:id}
    Post ID only (useful for query loop filters, meta queries, conditional logic)
    Example: 123

Continue with Boundary Modifiers:

Note: Without :url, :title, or :id modifiers, all continue tags return a complete HTML link. Add :url for just the URL, :title for just the title, or :id for just the post ID.

  • {brm_progress:continue:structure}
    Complete HTML link to next post across entire structure (auto-detects structure from current post)
    Example: <a href="...">Lesson 5</a>
    Note: Works on post pages within a structure. For dashboard pages without post context, use :structure_id:ID instead.
  • {brm_progress:continue:structure_id:YOUR_STRUCTURE_ID}
    Complete HTML link to next post across entire structure (use on dashboard pages)
    Example: <a href="...">Lesson 5</a>
    Note: Replace YOUR_STRUCTURE_ID with your actual structure ID. Find it in BricksMembers → Content & Structures by copying the Structure ID badge inside the structure card or in the structure interface header, or by opening the structure and copying the part after page=brm_structure_ from the browser URL exactly as shown.
  • {brm_progress:continue:structure_id:YOUR_STRUCTURE_ID:url}
    URL only for structure (dashboard pages)
    Example: https://example.com/lesson-5
  • {brm_progress:continue:structure_id:YOUR_STRUCTURE_ID:title}
    Title only for structure (dashboard pages)
    Example: Lesson 5: Advanced Topics
  • {brm_progress:continue:structure_id:YOUR_STRUCTURE_ID:id}
    Post ID only for structure (dashboard pages, useful for query filters)
    Example: 123
  • {brm_progress:continue:toplevel}
    Complete HTML link to next post within top-level boundary
    Example: <a href="...">Lesson 5</a>
  • {brm_progress:continue:parent}
    Complete HTML link to next post within parent-level boundary
    Example: <a href="...">Lesson 3</a>
  • {brm_progress:continue:level_2}
    Complete HTML link to next post within level 2 boundary
    Example: <a href="...">Lesson 4</a>
  • {brm_progress:continue:course}
    Complete HTML link to next post within course boundary (using level slug)
    Example: <a href="...">Lesson 1</a>
  • {brm_progress:continue:toplevel:url}
    URL only of next post within top-level
    Example: https://example.com/lesson-5
  • {brm_progress:continue:parent:title}
    Title only of next post within parent-level
    Example: Lesson 3: Basics

How It Works:

  1. Finds all posts within the specified boundary (or default scope)
  2. Identifies the last completed post by the current user
  3. Returns the next post after that completed one
  4. If no posts are completed, returns the first post in scope
  5. If all posts are completed, returns empty string

Use Cases:

  • Course overview page: “Continue Learning” button that takes users to their next lesson
  • Dashboard: Quick access to resume where they left off
  • Module pages: Continue within the current module

Examples:

<!-- Dashboard page (no post context) - use structure_id -->
<a href="{brm_progress:continue:structure_id:YOUR_STRUCTURE_ID:url}">Continue Learning →</a>

<!-- Post page within structure - use structure to auto-detect -->
<!-- Complete HTML link across entire structure -->
{brm_progress:continue:structure}

<!-- URL only for custom button -->
<a href="{brm_progress:continue:structure:url}">Continue Learning →</a>

<!-- Complete HTML link within top-level -->
{brm_progress:continue:toplevel}

<!-- URL only for custom button -->
<a href="{brm_progress:continue:toplevel:url}">Continue Learning →</a>

<!-- Title only -->
Continue: {brm_progress:continue:parent:title}

<!-- Post ID only (useful for query filters, meta queries) -->
Next lesson ID: {brm_progress:continue:id}

<!-- Default scope (requires post context) -->
Next up: {brm_progress:continue}

Max Flag (include inaccessible content):

  • {brm_progress:percent:max}
    Percentage including inaccessible content
  • {brm_progress:completed:toplevel:max}
    Completed count including inaccessible content
  • {brm_progress:total:toplevel:max}
    Total count including inaccessible content

Examples:

{brm_progress:percent:structure}% complete
{brm_progress:completed:toplevel} of {brm_progress:total:toplevel} lessons done
Is this post completed? {brm_progress:completed}
Completed on: {brm_progress:completion_date}
Continue: <a href="{brm_progress:continue:toplevel:url}">{brm_progress:continue:toplevel:title}</a>
Including inaccessible: {brm_progress:percent:toplevel:max}%

3. Drip Tags

Availability: Requires Drip Content module

These drip tags work with all current drip rule target modes: structured BRM content, hand-picked Selected Posts rules, broad Post Type rules, and per-post drip overrides from the BricksMembers meta box.

All Drip Tag Modifiers

  • {brm_drip:unlocked}
    Is content unlocked for current user?
    Example: 1 or 0
  • {brm_drip:unlock_date}
    Unlock date (WordPress date format)
    Example: January 15, 2025
  • {brm_drip:days_left}
    Days until unlock
    Example: 5

Examples:

Unlocked? {brm_drip:unlocked}
Unlocks: {brm_drip:unlock_date}
Days left: {brm_drip:days_left}

Tip: If multiple drip rules could match a post, these tags use the same precedence as the drip engine itself. The most specific rule wins first, then the earliest unlock date inside that same specificity level.

4. Post Level Tags

Context: Use inside post query loops (e.g., course catalog, lesson list) to display which membership level each post requires. Shows the required access level(s) for the current loop post.

All Post Level Tag Modifiers

  • {brm_post:level}
    All required level names (comma-separated). Shows “Free” for posts with no level requirements.
    Example: Premium, Advanced or Free
  • {brm_post:level:first}
    First required level only (useful for badges)
    Example: Premium
  • {brm_post:level:ids:1,2,3}
    Show only levels matching these IDs. Omit non-matching levels.
    Example: If post requires levels 1 and 5, ids:1,2 shows only level 1

Example: In a course catalog query loop, add a badge: {brm_post:level:first} to show “Premium”, “Advanced”, or “Free” for each course.

5. Structure Tags

All Structure Tag Modifiers

Navigation Modifiers:

  • {brm_structure:next_item}
    Next post title
    Example: Lesson 2: Advanced Topics
  • {brm_structure:next_item:link}
    Next post link
    Example: <a href="...">Lesson 2</a>
  • {brm_structure:next_item:url}
    Next post URL only
    Example: https://example.com/lesson-2
  • {brm_structure:previous_item}
    Previous post title
    Example: Lesson 1: Basics
  • {brm_structure:previous_item:link}
    Previous post link
    Example: <a href="...">Lesson 1</a>
  • {brm_structure:previous_item:url}
    Previous post URL only
    Example: https://example.com/lesson-1

Level Name Modifiers:

  • {brm_structure:level_name}
    Current post type name (capitalized)
    Example: Lesson (when viewing a lesson post)
  • {brm_structure:level_name:link}
    Current post type name as link
    Example: <a href="...">Lesson</a>

Parent Modifiers:

  • {brm_structure:parent}
    Parent post title
    Example: Module 1
  • {brm_structure:parent:url}
    Parent post URL
    Example: https://example.com/module-1
  • {brm_structure:parent:link}
    Parent link
    Example: <a href="...">Module 1</a>
  • {brm_structure:parent:toplevel}
    Top-level parent title
    Example: Course Name
  • {brm_structure:parent:toplevel:link}
    Top-level parent link
    Example: <a href="...">Course</a>
  • {brm_structure:parent:toplevel:url}
    Top-level parent URL
    Example: https://example.com/course
  • {brm_structure:parent:level_2}
    Level 2 parent title
    Example: Module 1
  • {brm_structure:parent:level_3}
    Level 3 parent title
    Example: Section 1
  • {brm_structure:parent:level_4}
    Level 4 parent title
    Example: (if exists)
  • {brm_structure:parent:level_5}
    Level 5 parent title
    Example: (if exists)
  • {brm_structure:parent_toplevel}
    Top-level parent (alias for parent:toplevel)
  • {brm_structure:parent_level_2}, parent_level_3, etc.
    Parent at specific level by index
  • {brm_structure:breadcrumbs}
    Ancestor posts trail (current post excluded by default)
    Example: Course › Module › Section
  • {brm_structure:breadcrumbs:current}
    Includes current post at the end
    Example: Course › Module › Section › Lesson
  • {brm_structure:breadcrumbs:link}
    Ancestor posts as clickable links
    Example: <a href="...">Course</a> › ...
  • {brm_structure:breadcrumbs:home}
    Prepends Home link to breadcrumb trail
    Example: Home › Course › Module › Section
  • {brm_structure:breadcrumbs:home:link:current}
    Full breadcrumbs with Home, links, and current post
    Example: <a href="/">Home</a> › <a href="...">Course</a> › Module › Section › Lesson
  • {brm_structure:breadcrumbs:depth:1}
    Immediate parent only (1 closest ancestor)
    Example: Section
  • {brm_structure:breadcrumbs:link:current:depth:2}
    2 closest parents + current with links
    Example: <a href="...">Module</a> › <a href="...">Section</a> › Lesson

Note: The breadcrumb separator is configurable in BricksMembers → Settings → General → Breadcrumb Separator (default: ). Breadcrumbs work dynamically with any structure depth (2-6 levels). The :depth:N modifier limits display to the N closest ancestor levels (e.g., depth:1 shows only the immediate parent).

  • {brm_structure:structure_id}
    Structure ID
    Example: 123
  • {brm_structure:index}
    Current post order (within post type, no boundary)
    Example: 5
  • {brm_structure:index:toplevel}
    Current post order within top level
    Example: 3
  • {brm_structure:index_max}
    Total posts of current post type (no boundary)
    Example: 20
  • {brm_structure:index_max:structure}
    Total posts across entire structure (unbounded)
    Example: 50
  • {brm_structure:index_max:toplevel}
    Total posts within top level boundary
    Example: 15
  • {brm_structure:index_max:parent}
    Total posts within parent boundary
    Example: 8
  • {brm_structure:index:structure}
    Current position across entire structure (unbounded)
    Example: 23
  • {brm_structure:index:toplevel}
    Current position within top-level boundary
    Example: 5
  • {brm_structure:index:parent}
    Current position within parent boundary
    Example: 3
  • {brm_structure:level_index}
    Current level index (1-based)
    Example: 2 (for level 2)

Boundary Modifiers (for navigation):

Boundary modifiers control where navigation searches for the next/previous item. All navigation tags support these boundaries:

  • {brm_structure:next_item:structure}
    Next across entire structure (unbounded – searches all posts in structure)
  • {brm_structure:next_item:toplevel}
    Next within top-level boundary (searches within top-level container only)
  • {brm_structure:next_item:parentlevel}
    Next within parent boundary
  • {brm_structure:next_item:parent}
    Next within parent (alias for parentlevel)
  • {brm_structure:next_item:level_2}
    Next within level 2 boundary
  • {brm_structure:next_item:level_3}
    Next within level 3 boundary
  • {brm_structure:next_item:level_4}
    Next within level 4 boundary
  • {brm_structure:next_item:level_5}
    Next within level 5 boundary
  • {brm_structure:previous_item:structure}
    Previous across entire structure (unbounded)
  • {brm_structure:previous_item:toplevel}
    Previous within top-level boundary
  • {brm_structure:previous_item:parentlevel}
    Previous within parent boundary
  • {brm_structure:previous_item:parent}
    Previous within parent (alias)
  • {brm_structure:previous_item:level_2}
    Previous within level 2 boundary
  • {brm_structure:previous_item:level_3}
    Previous within level 3 boundary
  • {brm_structure:previous_item:level_4}
    Previous within level 4 boundary
  • {brm_structure:previous_item:level_5}
    Previous within level 5 boundary

Combined Modifiers:

  • {brm_structure:next_item:link:toplevel}
    Next item link (top level scope)
  • {brm_structure:next_item:url:parentlevel}
    Next item URL (parent scope)
  • {brm_structure:previous_item:link:level_2}
    Previous item link (level 2 scope)

Examples:

{brm_structure:breadcrumbs:link}
Next: {brm_structure:next_item:link}
Previous: {brm_structure:previous_item:link:parentlevel}
{brm_structure:index} of {brm_structure:index_max}
Parent: {brm_structure:parent:toplevel:link}
Level: {brm_structure:level_name}

6. Video Tags

All video tags support boundary modifiers to display parent post data without query loops.

Important: Video tags support boundary modifiers to get video data from parent posts (toplevel, parent, level_N), but NOT :structure (since there’s no specific parent post for “entire structure”). If a boundary cannot be resolved, the tag falls back to the current post’s video data.

Video URL Tag – All Modifiers

  • {brm_video:url}
    Current post video URL/ID
    Example: https://vimeo.com/123456789
  • {brm_video:url:toplevel}
    Top-level parent video
    Example: Course video on lesson page
  • {brm_video:url:parentlevel}
    Parent video
    Example: Module video on lesson page
  • {brm_video:url:parent}
    Same as parentlevel
    Example: Parent video
  • {brm_video:url:level_1}
    Level 1 parent video
    Example: Top level
  • {brm_video:url:level_2}
    Level 2 parent video
    Example: Specific level
  • {brm_video:url:level_3}
    Level 3 parent video
    Example: Specific level
  • {brm_video:url:level_4}
    Level 4 parent video
    Example: Specific level
  • {brm_video:url:level_5}
    Level 5 parent video
    Example: Specific level
  • {brm_video:url:level_6}
    Level 6 parent video
    Example: Specific level

Note: Works with video plugins like Gumlet (can store video IDs instead of only URLs)

Video Source Tag

Use the source tag when you need the resolved provider key instead of the raw video value.

  • {brm_video:source}
    Current post video provider
    Example: gumlet, vimeo, youtube, html5
  • {brm_video:source:toplevel}
    Top-level parent video provider
  • {brm_video:source:parentlevel}
    Parent video provider
  • {brm_video:source:parent}
    Same as parentlevel

Boundary modifiers: {brm_video:source} supports the same :toplevel, :parent, :parentlevel, and :level_N modifiers as {brm_video:url}.

Video Image Tag – All Modifiers

Basic Modifiers:

  • {brm_video:image}
    Current post thumbnail
    Example: Works in Bricks Image elements
  • {brm_video:image:url}
    Image URL only
    Example: https://example.com/thumb.jpg
  • {brm_video:image:id}
    Attachment ID
    Example: 123
  • {brm_video:image:link}
    Image wrapped in link
    Example: Clickable image

Size Modifiers:

  • {brm_video:image:thumbnail}
    Thumbnail size
  • {brm_video:image:medium}
    Medium size
  • {brm_video:image:large}
    Large size
  • {brm_video:image:full}
    Full size
  • {brm_video:image:custom-size}
    Any registered WordPress size

Boundary Modifiers:

  • {brm_video:image:toplevel}
    Top-level parent image
  • {brm_video:image:parentlevel}
    Parent image
  • {brm_video:image:parent}
    Parent image (alias)
  • {brm_video:image:level_1}
    Level 1 parent image
  • {brm_video:image:level_2}
    Level 2 parent image
  • {brm_video:image:level_3}
    Level 3 parent image
  • {brm_video:image:level_4}
    Level 4 parent image
  • {brm_video:image:level_5}
    Level 5 parent image
  • {brm_video:image:level_6}
    Level 6 parent image

Combined Modifiers (Boundary + Size/Output):

  • {brm_video:image:toplevel:large}
    Top-level image, large size
  • {brm_video:image:toplevel:url}
    Top-level image URL only
  • {brm_video:image:toplevel:id}
    Top-level image attachment ID
  • {brm_video:image:parentlevel:medium}
    Parent image, medium size
  • {brm_video:image:parentlevel:url}
    Parent image URL only
  • {brm_video:image:level_2:large}
    Level 2 image, large size
  • {brm_video:image:level_2:url}
    Level 2 image URL only
  • {brm_video:image:level_3:medium}
    Level 3 image, medium size

Advanced Image Modifiers:

  • {brm_video:image:plain}
    Strip HTML tags
  • {brm_video:image:@fallback:Default text}
    Fallback if no image
  • {brm_video:image:@fallback-image:456}
    Fallback image ID
  • {brm_video:image:@sanitize:false}
    Disable sanitization
  • {brm_video:image:100}
    Word limit (if <1000)
  • {brm_video:image:5000}
    Character limit (if >1000)

Video Duration Tag – All Modifiers

Format Modifiers:

  • {brm_video:duration}
    Auto format (H:MM:SS or M:SS)
    Example: 15:30 or 1:15:30
  • {brm_video:duration:auto}
    Same as default
    Example: Auto format
  • {brm_video:duration:seconds}
    Duration in seconds
    Example: 95
  • {brm_video:duration:mmss}
    MM:SS format
    Example: 1:35
  • {brm_video:duration:hms}
    H:MM:SS format
    Example: 0:01:35

Boundary Modifiers:

  • {brm_video:duration:toplevel}
    Top-level parent duration
  • {brm_video:duration:parentlevel}
    Parent duration
  • {brm_video:duration:parent}
    Parent duration (alias)
  • {brm_video:duration:level_1}
    Level 1 parent duration
  • {brm_video:duration:level_2}
    Level 2 parent duration
  • {brm_video:duration:level_3}
    Level 3 parent duration
  • {brm_video:duration:level_4}
    Level 4 parent duration
  • {brm_video:duration:level_5}
    Level 5 parent duration
  • {brm_video:duration:level_6}
    Level 6 parent duration

Combined Modifiers (Boundary + Format):

  • {brm_video:duration:toplevel:auto}
    Top-level duration, auto format
  • {brm_video:duration:toplevel:seconds}
    Top-level duration in seconds
  • {brm_video:duration:toplevel:mmss}
    Top-level duration, MM:SS
  • {brm_video:duration:toplevel:hms}
    Top-level duration, H:MM:SS
  • {brm_video:duration:parentlevel:auto}
    Parent duration, auto format
  • {brm_video:duration:parentlevel:seconds}
    Parent duration in seconds
  • {brm_video:duration:parentlevel:mmss}
    Parent duration, MM:SS
  • {brm_video:duration:parentlevel:hms}
    Parent duration, H:MM:SS
  • {brm_video:duration:level_2:auto}
    Level 2 duration, auto format
  • {brm_video:duration:level_2:seconds}
    Level 2 duration in seconds
  • {brm_video:duration:level_2:mmss}
    Level 2 duration, MM:SS
  • {brm_video:duration:level_2:hms}
    Level 2 duration, H:MM:SS
  • {brm_video:duration:level_3:mmss}
    Level 3 duration, MM:SS
  • {brm_video:duration:level_4:hms}
    Level 4 duration, H:MM:SS

Examples:

{brm_video:url}
{brm_video:image:toplevel:large}
Duration: {brm_video:duration:mmss}
Course Duration: {brm_video:duration:toplevel:hms}
Module Duration: {brm_video:duration:parentlevel:mmss}

7. Download Tags

Availability: Only when Protected Downloads module is enabled

All Download Tag Modifiers

Basic:

  • {brm_download}
    Download URL
    Example: https://example.com/...file.pdf
  • {brm_download:url}
    Explicit download URL alias
    Example: https://example.com/...file.pdf
  • {brm_download:link}
    HTML link with download title
    Example: <a href="...">Download Title</a>
  • {brm_download:filename}
    Stored filename
    Example: workbook.pdf
  • {brm_download:size}
    Formatted file size
    Example: 2.5 MB
  • {brm_download:file_type}
    Uppercase file extension label
    Example: PDF
  • {brm_download:id=123}
    URL for specific download ID (when not on a download post)
    Example: https://example.com/...file.pdf
  • {brm_download:id=123:link}
    HTML link for specific download ID

Image (Bricks Image element compatible):

  • {brm_download:image}
    Image (works in Bricks Image elements)
  • {brm_download:image:url}
    Image URL only
  • {brm_download:image:id}
    Attachment ID
  • {brm_download:image:thumbnail}, :medium, :large, :full, or any registered WordPress size
  • {brm_download:image:link}
    Image wrapped in link to post
  • {brm_download:image:plain}
    Strip HTML tags
  • {brm_download:image:@fallback:No image}
    Fallback text if no image
  • {brm_download:image:@fallback-image:456}
    Fallback attachment ID
  • {brm_download:image:id=123}
    Image from specific download (in brm_download:image modifiers, use id=123 to target a download)

Examples:

{brm_download:link}
{brm_download:filename}
{brm_download:size}
{brm_download:file_type}
{brm_download:image:large}
{brm_download:id=123:link}
{brm_download:image:@fallback:No thumbnail}

8. Like Tags

Availability: Only when Like System module is enabled

All Like Tag Modifiers

  • {brm_like:count}
    Number of likes
    Example: 42
  • {brm_like:status}
    Current user’s like status
    Example: 1 (liked) or 0 (not liked)
  • {brm_like:liked_at}
    Formatted date when the current user liked the current post
    Example: April 28, 2026
  • {brm_like:liked_at}
    Raw stored like timestamp
    Example: 2026-04-28 09:00:00

User List Modifiers:

  • {brm_like:users}
    Comma-separated user list
    Example: John Doe, Jane Smith
  • {brm_like:users:link}
    User list with links
    Example: <a href="...">John</a>, ...

Note: Like tags are available in the Bricks dynamic tag picker and the BricksMembers Dynamic Tag Assistant when the Like module is enabled.

Examples:

{brm_like:count} likes
Liked by: {brm_like:users}
Liked by (with links): {brm_like:users:link}
Has current user liked? {brm_like:status} (1 or 0)

9. Billing Tags

Availability: Requires Payments module

Billing tags display subscription, payment, offer, and invoice data. Outside loops, BricksMembers resolves subscription-style tags in this order: current subscription loop item, single actionable subscription when the user has exactly one, current active subscription, then latest subscription. If there is no matching subscription, the billing tags output empty strings, except {brm_billing:cancel_at_period_end}, which outputs 0. Inside BRM User Subscriptions, BRM User Payments, BRM User Invoices, or BRM Billing Offers query loops, use {brm_billing:item:*}.

Subscription Tags (outside loop)

  • {brm_billing:status} — Raw subscription status slug such as active, trialing, past_due, paused, cancelled, expired, pending, paid, failed, or refunded
  • {brm_billing:provider} — Raw provider key such as stripe, paypal, square, woocommerce, fluentcart, surecart, or generic_webhook
  • {brm_billing:offer_key} — Stored offer key slug such as premium-monthly
  • {brm_billing:offer_label} — Human-readable offer label. If the offer config is gone, BRM falls back to the stored offer key
  • {brm_billing:period_start}, {brm_billing:period_end} — Dates formatted with the site’s WordPress date format, or empty if no date is stored
  • {brm_billing:trial_ends_at} — Trial end date in the site’s WordPress date format, or empty
  • {brm_billing:cancel_at_period_end}1 when the subscription is marked to end at the current period boundary, otherwise 0
  • {brm_billing:manage_url} — Safe validated manage-billing URL for the resolved subscription, or empty if BRM cannot expose one
  • {brm_billing:payment_method} — Readable saved payment method label for the resolved subscription, for example Visa ending in 4242 (since 0.9.94). Use {brm_billing:payment_method_brand}, {brm_billing:payment_method_last4}, and {brm_billing:payment_method_label} when you need the parts separately.
  • {brm_billing:last_amount}, {brm_billing:last_currency}, {brm_billing:last_payment_at} — Formatted last payment amount, uppercased currency code, and WordPress-formatted payment date from the subscription’s last recorded payment

Loop Item Tags (inside BRM User Subscriptions / Payments / Offers loops)

  • Inside BRM Billing Offers loops: {brm_billing:item:offer_key}, {brm_billing:item:offer_label}, {brm_billing:item:description}, {brm_billing:item:features}, {brm_billing:item:features_text}, {brm_billing:item:content}, {brm_billing:item:image}, {brm_billing:item:image:url}, {brm_billing:item:image:id}, {brm_billing:item:image_url}, {brm_billing:item:image_id}, {brm_billing:item:has_trial}, {brm_billing:item:trial_days}, {brm_billing:item:trial_label}, and {brm_billing:item:billing_model} return offer blueprint data. {brm_billing:item:image} is compatible with Bricks image controls and supports the same image modifiers as other BRM image tags. {brm_billing:item:checkout_providers} returns enabled native provider labels joined by commas, and {brm_billing:item:default_provider} returns the default provider label. Billing-state and payment-document fields are empty here, and {brm_billing:item:cancel_at_period_end} returns 0.
  • Inside BRM User Subscriptions loops: {brm_billing:item:status}, {brm_billing:item:provider}, {brm_billing:item:offer_key}, {brm_billing:item:offer_label}, {brm_billing:item:period_start}, {brm_billing:item:period_end}, {brm_billing:item:cancel_at_period_end}, {brm_billing:item:payment_method}, {brm_billing:item:payment_method_brand}, {brm_billing:item:payment_method_last4}, and {brm_billing:item:payment_method_label} come from the current subscription row. {brm_billing:item:amount}, {brm_billing:item:currency}, and {brm_billing:item:paid_at} come from that subscription’s last recorded payment.
  • Inside BRM User Payments loops: {brm_billing:item:amount}, {brm_billing:item:currency}, and {brm_billing:item:paid_at} come from the current payment row itself. {brm_billing:item:receipt_url} returns the provider receipt URL, {brm_billing:item:invoice_url} remains the provider-hosted invoice URL, and {brm_billing:item:invoice_download_url} returns the BRM invoice PDF URL when the payment has a related BRM invoice. {brm_billing:item:transfer_url} returns the native transfer URL for eligible one-time payment access. {brm_billing:item:status_badge} outputs an HTML badge span. The current runtime includes subscription-linked payment rows and standalone one-time payment rows for the current user.

Inside BRM User Invoices loops: use {brm_billing:item:id}, {brm_billing:item:status}, {brm_billing:item:amount}, {brm_billing:item:currency}, {brm_billing:item:paid_at}, {brm_billing:item:invoice_number}, {brm_billing:item:invoice_date}, {brm_billing:item:invoice_due_date}, {brm_billing:item:invoice_subtotal}, {brm_billing:item:invoice_tax}, {brm_billing:item:invoice_total}, {brm_billing:item:invoice_download_url}, and {brm_billing:item:status_badge}. {brm_billing:item:invoice_url} resolves to the same BRM invoice download URL inside this loop.

For the most flexible invoice page, use a Bricks query loop with BRM User Invoices and build the row with normal Bricks text and button elements. The older {brm_billing:invoice_url} tag still exists for a simple account-level list in content text and renders the current user’s BRM invoice download links as HTML anchors, or nothing when there are no invoices. In single dynamic-tag fields, invoice-only pages should use the invoice loop tags because {brm_billing:invoice_url} still follows subscription resolution first.

See Payments Module and Billing for full details.

10. Content Bank Tags

Availability: Requires Content Bank module

Content Bank tags let you tell whether the current post is a proxy, identify its source, and output a little bit of library metadata inside Bricks.

  • {brm_bank_is_proxy}1 when the current post is a Content Bank proxy, otherwise 0
  • {brm_bank_source_title} — Source post title for the current proxy context
  • {brm_bank_source_id} — Source post ID, or the current source ID when used on a source item context that resolves to itself
  • {brm_bank_usage_count} — Number of proxies currently using that source
  • {brm_bank_collections} — Comma-separated collection names for the current source

A practical use case is small admin-facing or editor-facing labels in Bricks templates like “Shared from: {brm_bank_source_title}”.

11. Video Watch Tags

Availability: Requires Video Tracking module and is meant for logged-in learner contexts on tracked posts

Video watch tags use the effective watch state for the current post context. That means BRM can aggregate related child video posts into the lesson context instead of always treating a child video as a totally separate display context.

  • {brm_video_watch:percent} — Watched percentage as a numeric string such as 67.5 or 100
  • {brm_video_watch:required_percent} — Required threshold as an integer string such as 80
  • {brm_video_watch:remaining_percent} — Remaining percentage needed to reach the threshold, rounded to two decimals and never below 0
  • {brm_video_watch:threshold_reached}1 when the watch threshold has been reached, otherwise 0
  • {brm_video_watch:completed}1 only when the runtime marks the video as fully watched. This is not the same as threshold reached
  • {brm_video_watch:last_position} — Last stored watch position in seconds, such as 325
  • {brm_video_watch:resume_available}1 when BRM considers the stored position a meaningful resume point, otherwise 0

See Video Tracking and the BRM Video Element for the full behavior details.

12. Certificate Tags

Availability: Only when Certificates module is enabled

Certificate tags display issued certificate data. They work on:

  • Success page — page shown after earning a certificate (e.g. after passing a quiz)
  • Verification page — custom Bricks page you set in template settings; visitors land there with ?brm_cert_hash=xxx
  • Certificate display pages — Bricks pages that embed or show the certificate
  • BRM: User Certificates query loop — inside the loop, tags resolve from each certificate

Certificate tags are registered from the certificate placeholder registry. That means the tag list below matches the current runtime, and the Open Badges tags only exist when the Open Badges module is enabled.

All Certificate Tag Modifiers

Student:

  • {brm_cert:student_name}, {brm_cert:student_first_name}, {brm_cert:student_last_name}
  • {brm_cert:student_email}, {brm_cert:student_username}, {brm_cert:student_avatar_url}

Certificate:

  • {brm_cert:scope_title}, {brm_cert:scope_url}, {brm_cert:scope_type}
  • {brm_cert:issued_date}, {brm_cert:expires_date}, {brm_cert:number} (alias: {brm_cert:certificate_number})
  • {brm_cert:score}, {brm_cert:template_title}, {brm_cert:status}
  • {brm_cert:status_label}, {brm_cert:revocation_reason}, {brm_cert:revoked_date}
  • {brm_cert:scope_featured_image_url}, {brm_cert:scope_video_image_url}

Site:

  • {brm_cert:site_name}, {brm_cert:site_logo_url}

Links (for buttons and images):

  • {brm_cert:verification_url} — Verify certificate link
  • {brm_cert:display_url} — View certificate
  • {brm_cert:download_url} — Download PDF
  • {brm_cert:pdf:url} — Inline/open PDF
  • {brm_cert:qr_url} — QR code image (use in Image element)

Open Badges (when Open Badges module is enabled):

  • {brm_cert:badge_image_url} — Badge image URL
  • {brm_cert:badge_assertion_url} — Badge assertion JSON-LD URL
  • {brm_cert:badge_url} — Badge page URL
  • {brm_cert:open_badges_enabled} — 1 if Open Badges enabled, 0 otherwise

Output note: Text-style certificate tags return escaped text. URL-style tags like {brm_cert:display_url} and {brm_cert:download_url} return URLs. Image-style tags such as {brm_cert:student_avatar_url}, {brm_cert:site_logo_url}, and {brm_cert:badge_image_url} also return URLs, so use them in link, image, or button URL fields rather than expecting a full HTML image tag.

Examples:

Congratulations, {brm_cert:student_name}!
Certificate #{brm_cert:number} for {brm_cert:scope_title}
<a href="{brm_cert:display_url}">View certificate</a>
<a href="{brm_cert:download_url}">Download PDF</a>
<img src="{brm_cert:qr_url}" alt="QR code" />

13. Quiz Tags

Availability: Only when Quiz module is enabled. Use on quiz pages, lesson pages with assigned quizzes, or inside brm_quiz_questions, brm_quiz_answers, brm_quiz_pairs, or brm_quiz_items query loops.

Quiz-level tags (use on quiz or lesson page):

  • {brm_quiz_title} — Quiz title
  • {brm_quiz_questions} — Raw questions JSON for advanced custom output
  • {brm_quiz_time_limit} — Time limit in seconds
  • {brm_quiz_passing_score} — Required passing %
  • {brm_quiz_max_attempts} — Max attempts (0 = unlimited)
  • {brm_quiz_question_count} — Total questions
  • {brm_quiz_current_question_index} — Current question position when a question context is active
  • {brm_quiz_score_percent}, {brm_quiz_best_score}, {brm_quiz_last_score} — User scores
  • {brm_quiz_passed} — 1 or 0
  • {brm_quiz_pass_fail} — passed, failed, or not_attempted
  • {brm_quiz_status} — not_started, in_progress, pending_review, passed, failed, exhausted
  • {brm_quiz_attempts_count}, {brm_quiz_attempts_remaining}

Quiz conditions: Use brm_quiz_has_time_limit for timer badges and brm_quiz_has_attempt_limit for attempts-left badges so untimed or unlimited quizzes do not show empty status UI.

Question type coverage: BRM currently registers 11 question type slugs. Atomic quiz templates usually do not need 11 separate answer layouts. Use choice cards for choice, multiple_choice, multiple_answer, true_false, and image_choice; use text answers for fill_blank, short_answer, and essay; use matching for matching; use ordering for ordering and sorting.

Inside brm_quiz_questions loop{brm_quiz_q:id}, {brm_quiz_q:text}, {brm_quiz_q:type}, {brm_quiz_q:points}, {brm_quiz_q:media}, {brm_quiz_q:index}, {brm_quiz_q:total}, {brm_quiz_q:explanation}, {brm_quiz_q:answer_count}, {brm_quiz_q:is_multiple}, {brm_quiz_q:is_text_input}, {brm_quiz_q:input_type}

Inside brm_quiz_answers loop{brm_quiz_a:id}, {brm_quiz_a:text}, {brm_quiz_a:index}, {brm_quiz_a:total}, {brm_quiz_a:image}, {brm_quiz_a:image_id}, {brm_quiz_a:question_id}, {brm_quiz_a:is_correct}, {brm_quiz_a:input_name}, {brm_quiz_a:input_value}, {brm_quiz_a:input_type}, {brm_quiz_a:match_target}

Inside brm_quiz_pairs loop (matching questions) — {brm_quiz_pair:left}, {brm_quiz_pair:right}, {brm_quiz_pair:left_id}, {brm_quiz_pair:right_id}, {brm_quiz_pair:left_image}, {brm_quiz_pair:left_image_id}, {brm_quiz_pair:right_image}, {brm_quiz_pair:right_image_id}, {brm_quiz_pair:index}, {brm_quiz_pair:total}

Inside brm_quiz_items loop (ordering/sorting questions) — {brm_quiz_item:id}, {brm_quiz_item:text}, {brm_quiz_item:image}, {brm_quiz_item:image_id}, {brm_quiz_item:index}, {brm_quiz_item:total}

Example: Score: {brm_quiz_score_percent}%. You need {brm_quiz_passing_score}% to pass.

14. Group Tags

Availability: Only when Groups module is enabled. Most group tags resolve from the user’s active group for the current post. The invite-claim tags below instead resolve from the current invitation-claim request state. {brm_group:invite_handoff_pending} returns 1 only while a logged-out request has a server-side invite handoff. Prefer the native brm_group_invite_handoff_pending Bricks condition for normal element visibility. Group member tags resolve inside a brmGroupMembersQuery loop. Group member loop tags were added in 0.9.94.

  • {brm_group:id} — Group ID
  • {brm_group:name} — Group name
  • {brm_group:type} — Group type (e.g. cohort, team)
  • {brm_group:role} — User’s role (owner, leader, member)
  • {brm_group:member_count} — Total active members
  • {brm_group:total_seats} — Total seats configured for the current group
  • {brm_group:used_seats} — Used seats for the current group
  • {brm_group:available_seats} — Remaining seats
  • {brm_group:reserved_seats} — Seats reserved by pending email invitations
  • {brm_group:seat_usage_percent} — Percent of seats used or reserved
  • {brm_group:pending_invite_count} — Pending invitation count for the current group
  • {brm_group:owner_user_id} — Group owner user ID
  • {brm_group:owner_name} — Group owner display name
  • {brm_group:owner_avatar_url} — Group owner avatar URL
  • {brm_group:status} — active, archived, or expired
  • {brm_group:member_joined_at} — Join date for the current user-group loop row
  • {brm_group:invite_claim_state} — Raw invite-claim state for the current request, or empty when no claim flow is active
  • {brm_group:invite_claim_error} — Raw invite-claim error code for the current request, or empty
  • {brm_group:invite_claim_message} — Human-readable message generated from the current invite claim state and error
  • {brm_group:invite_handoff_pending}1 when the current logged-out request has a pending server-side invite claim handoff, otherwise 0 (since 0.9.95)
  • {brm_group_member:user_id} — User ID for the current group member row
  • {brm_group_member:display_name} — Display name for the current group member row
  • {brm_group_member:email} — Email for the current group member row
  • {brm_group_member:role} — Role for the current group member row
  • {brm_group_member:status} — Status for the current group member row
  • {brm_group_member:joined_at} — Join date for the current group member row
  • {brm_group_member:avatar_url} — Avatar URL for the current group member row

15. Gift Claim Tags

Availability: Only when Gifting module is enabled. Gift-row tags resolve from the current native gift token in gift_token or brm_gift_token. Claim-result tags resolve from brm_gift_claim and brm_gift_claim_code query arguments. {brm_gift:claim_handoff_pending} returns 1 only while a logged-out request has a server-side gift claim handoff. Prefer the native brm_gift_claim_handoff_pending Bricks condition for normal element visibility. Gift-transfer tags resolve from brm_gift_source, brm_gift_object_type, and brm_gift_object_id query arguments. Added in 0.9.94; handoff pending was added in 0.9.95.

  • {brm_gift:sender_name} — Sender display name, with no sender email exposed on public claim pages
  • {brm_gift:offer_title} — Offer label from the Payments offer configuration
  • {brm_gift:offer_key} — Raw offer key
  • {brm_gift:message} — Optional personal message stored with the native gift
  • {brm_gift:expires_at} and {brm_gift:claimed_at} — Formatted claim dates
  • {brm_gift:status} and {brm_gift:status_label} — Raw and human-readable gift status
  • {brm_gift:claim_url} — Public claim route URL for the current gift token
  • {brm_gift:claim_state}, {brm_gift:claim_error}, and {brm_gift:claim_message} — Claim result state and human-readable result message
  • {brm_gift:claim_handoff_pending}1 when the current logged-out request has a pending server-side gift claim handoff, otherwise 0 (since 0.9.95)

Gift transfer context:

  • {brm_gift_transfer:source}, {brm_gift_transfer:object_type}, and {brm_gift_transfer:object_id} — Hidden-field values for the brm_transfer_gift_level Bricks form action
  • {brm_gift_transfer:title} — Transferable source object title
  • {brm_gift_transfer:amount} and {brm_gift_transfer:currency} — Source object amount and currency
  • {brm_gift_transfer:level_id} — Resolved BRM level ID for the selected source object
  • {brm_gift_transfer:status} and {brm_gift_transfer:status_label} — Transfer availability state for the selected source object

16. Submission Tags

Availability: Only when Submissions module is enabled. Use on assignment pages (user’s latest submission) or inside a brm_submission query loop (each submission).

  • {brm_submission:id} — Submission ID
  • {brm_submission:status} — submitted, approved, rejected, resubmit_requested
  • {brm_submission:score} — Score (when set)
  • {brm_submission:feedback} — Reviewer feedback
  • {brm_submission:attempt} — Attempt number
  • {brm_submission:date} — Formatted submission date
  • {brm_submission:reviewed_at} — Formatted review date
  • {brm_submission:count} — Total submissions for assignment/user
  • {brm_submission:due_at} — Due date (formatted)
  • {brm_submission:is_overdue} — 1 or 0
  • {brm_submission:days_until_due} — Days until due (negative if overdue)
  • {brm_submission:reviewer} — Reviewer display name
  • {brm_submission:type} — text, file, url, or mixed
  • {brm_submission:file_count} — Number of attached files
  • {brm_submission:content} — Submitted text/content
  • {brm_submission:url_list} — Submitted URL links
  • {brm_submission:first_url} — First submitted URL
  • {brm_submission:attachment_links} — Secure attachment download links
  • {brm_submission:attachment_names} — Attachment names
  • {brm_submission:first_attachment_url} — First secure attachment URL
  • {brm_submission:assignment_title} — Related assignment title
  • {brm_submission:assignment_url} — Related assignment URL

Example: Status: {brm_submission:status} — Feedback: {brm_submission:feedback}

For visibility logic, prefer native BricksMembers conditions over dynamic-tag comparisons: use brm_submission_has_response for text/URL response panels and brm_submission_has_attachments for attachment download buttons.

17. Member Chat Tags

Availability: Only when Member Chat is enabled. Room tags resolve from the current active room, and message tags resolve inside chat feed rows or any active message context. For the layout side of chat templates, see Member Chat & Community Rooms.

Room tags{brm_chat:room_id}, {brm_chat:room_name}, {brm_chat:room_description}, {brm_chat:room_scope}, {brm_chat:room_kind}, {brm_chat:room_unread_count}, {brm_chat:room_member_count}, {brm_chat:room_can_write}

Message tags{brm_chat:message_id}, {brm_chat:message_content}, {brm_chat:message_author_id}, {brm_chat:message_author_name}, {brm_chat:message_author_first_name}, {brm_chat:message_author_last_name}, {brm_chat:message_author_nickname}, {brm_chat:message_author_avatar_url}, {brm_chat:message_author_email}, {brm_chat:message_author_login}, {brm_chat:message_created_at}, {brm_chat:message_edited_at}, {brm_chat:message_status}, {brm_chat:message_is_mine}, {brm_chat:message_is_edited}, {brm_chat:message_is_deleted}, {brm_chat:message_can_manage}

Example: Room: {brm_chat:room_name} ({brm_chat:room_unread_count} unread)

18. Instructor Frontend Builder Tags

Availability: Only when Instructor Frontend Builder is enabled. These tags resolve from the active instructor dashboard, manager, editor, or row context. For the full frontend-builder flow, see Instructor Frontend Builder for Course Creators.

Core scope and item context{brm_instructor:scope_id}, {brm_instructor:structure_id}, {brm_instructor:parent_id}, {brm_instructor:level_index}, {brm_instructor:item_id}

Editor and manager request context{brm_instructor:editor_title}, {brm_instructor:editor_content}, {brm_instructor:editor_excerpt}, {brm_instructor:editor_featured_image_id}, {brm_instructor:editor_video_url}, {brm_instructor:editor_video_duration}, {brm_instructor:editor_video_image_id}, {brm_instructor:manager_url}, {brm_instructor:manager_recompute_url}, {brm_instructor:recompute_required}, {brm_instructor:recompute_notice_message}, {brm_instructor:recompute_notice_type}, {brm_instructor:editor_url}, {brm_instructor:dashboard_url}

Scope summary and actions{brm_instructor:scope_title}, {brm_instructor:scope_status}, {brm_instructor:scope_status_label}, {brm_instructor:scope_edit_url}, {brm_instructor:scope_top_level_label}, {brm_instructor:scope_top_level_create_url}, {brm_instructor:scope_child_level_label}, {brm_instructor:scope_child_create_url}, {brm_instructor:scope_structure_name}, {brm_instructor:scope_item_count}, {brm_instructor:scope_draft_count}

Row and item helpers{brm_instructor:item_title}, {brm_instructor:item_content}, {brm_instructor:item_excerpt}, {brm_instructor:item_featured_image_id}, {brm_instructor:item_video_url}, {brm_instructor:item_video_duration}, {brm_instructor:item_video_image_id}, {brm_instructor:item_level_label}, {brm_instructor:item_depth}, {brm_instructor:item_is_child}, {brm_instructor:item_depth_class}, {brm_instructor:item_children_count}, {brm_instructor:item_status}, {brm_instructor:item_status_label}, {brm_instructor:is_first_sibling}, {brm_instructor:is_last_sibling}, {brm_instructor:item_can_have_children}, {brm_instructor:child_level_label}, {brm_instructor:child_level_index}, {brm_instructor:row_manager_url}, {brm_instructor:row_edit_url}, {brm_instructor:row_child_create_url}

Enabled structure tags{brm_instructor:enabled_structure_id}, {brm_instructor:enabled_structure_name}, {brm_instructor:enabled_structure_scope_label}, {brm_instructor:enabled_structure_levels_label}, {brm_instructor:enabled_structure_create_url}

Example: {brm_instructor:scope_title} — Edit item: {brm_instructor:row_edit_url}

19. Class Tags (for CSS styling)

These tags output a CSS class name or empty string. Add to Style tab → CSS class for automatic styling in query loops.

  • {brm_active}
    Outputs brm-active if loop item matches current page or is a parent
  • {brm_completed}
    Outputs brm-completed if loop post is completed (Progress module, post loops)
  • {brm_unlocked}
    Outputs brm-unlocked if loop post is unlocked (Drip module, post loops)

Active Item Tag Details

💡 One of the most useful tags for navigation menus! Highlights current page AND its parents.

{brm_active}

  • Outputs brm-active if the loop item matches the current page/term/user being viewed
  • Also matches parent posts in content structures (e.g., highlights the module when viewing a lesson)
  • Outputs empty string if not the current item or parent
  • Works with post, term, and user query loops
  • Perfect for navigation menus, breadcrumbs, taxonomy filters, and member directories
  • Performance: Zero database queries – uses already-loaded WordPress query data

All Active Tag Modifiers

  • {brm_active}
    Active class or empty
    Example: brm-active or “

Matching Logic:

For Posts:

  • Direct match: Loop post ID === Current post ID
  • Parent match: Loop post ID is a parent of current post (from content structure)

For Terms & Users:

  • Direct match only: Loop term/user ID === Current term/user ID

Use Cases:

1. Post Query Loops (Navigation Menus with Parent Highlighting)

Add this tag to the CSS class field of elements in a query loop:

{brm_active}

Example in Bricks:

  1. Create a query loop showing course modules
  2. Set CSS class of the QL element in the Bricks element controls header: module-item
  3. Set CSS class in Bricks elements’ style tab: {brm_active}
  4. Style .brm-active in your CSS:
.module-item.brm-active {
    background: var(--primary-color);
    font-weight: bold;
    border-left: 4px solid var(--accent-color);
}

Result:

  • When viewing a module page, that module will have the brm-active class
  • When viewing a lesson page, the lesson’s parent module will also have the brm-active class
  • Perfect for hierarchical navigation where you want to show which section the user is currently in

2. Term Query Loops (Category/Tag Filters)

  1. Create a query loop showing categories or tags
  2. Add a button element inside the loop
  3. Set CSS classes: filter-button {brm_active}
  4. Style the active filter:
.filter-button.brm-active {
    background: var(--primary-color);
    color: white;
}

Result: When viewing a category archive, that category’s filter button will be highlighted.

3. User Query Loops (Member Directories)

  1. Create a query loop showing users
  2. Add a card element inside the loop
  3. Set CSS classes: member-card {brm_active}
  4. Style the current user’s card:
.member-card.brm-active {
    border: 2px solid var(--primary-color);
    box-shadow: 0 4px 12px rgba(0,0,0,0.1);
}

Result: When viewing a user’s profile/author page, their card in the member directory will be highlighted.

Works With:

  • Post loops: Course navigation, lesson lists, breadcrumbs
  • Term loops: Category filters, tag clouds, taxonomy navigation
  • User loops: Member directories, author lists, team pages

Tag Modifiers

Modifiers change how tags display data.

:link Modifier

Wraps output in a link.

Example:

{brm_structure:next_item:link}

Output:

<a href="/next-lesson/">Next Lesson Title</a>

Works with:

  • {brm_structure:next_item:link}
  • {brm_structure:previous_item:link}
  • {brm_download:link}

Scope Modifiers

What is “Scope”? Scope defines which content to calculate progress for. For example, :toplevel calculates progress within the top-level post (e.g., Course), :parent calculates within the parent post (e.g., Module), and :structure calculates across the entire structure. Use scope modifiers to show progress at different levels of your content hierarchy.

Define what content to include in calculations.

:structure – Current structure

{brm_progress:percent:structure}

:toplevel – Top level of structure

{brm_progress:percent:toplevel}

:parentlevel – Parent level of structure

{brm_progress:percent:parentlevel}

Boundary Modifiers

What is “Boundary”? Boundary defines the navigation window—it limits where “next” and “previous” navigation can go. For example, :toplevel keeps navigation within the top-level post (e.g., Course), so navigating from a lesson won’t jump to the next course. :parentlevel keeps navigation within the parent (e.g., Module), so navigating from a lesson won’t jump to the next module. Use boundary modifiers to control navigation flow within your content structure.

Define navigation boundaries.

:toplevel – Navigate across entire structure

{brm_structure:next_item:toplevel}

:parentlevel – Navigate within current parent

{brm_structure:next_item:parentlevel}

:level_2, :level_3, etc. – Navigate within specific level

{brm_structure:next_item:level_2}

Real-World Examples

Example 1: Welcome Message

Welcome back, {user_display_name}!

You're a {brm_user:levels} member.

You've completed {brm_progress:completed:toplevel} out of {brm_progress:total:toplevel} lessons ({brm_progress:percent:toplevel}%).

Output:

Welcome back, John Smith!

You're a Premium Member member.

You've completed 15 out of 20 lessons (75%).

Note: This example uses scope modifiers (:toplevel) to get progress within the top-level post (e.g., course). Without scope modifiers, {brm_progress:completed} returns 1 or 0 indicating if the current post is completed.

Example 2: Course Progress

Course Progress: {brm_progress:percent:structure}%

Completed: {brm_progress:completed:structure}/{brm_progress:total:structure}

Output:

Course Progress: 60%

Completed: 12/20

Example 3: Lesson Navigation

← {brm_structure:previous_item:parentlevel:link}

{brm_structure:next_item:parentlevel:link} →

Output:

← <a href="/lesson-1/">Lesson 1: Introduction</a>

<a href="/lesson-3/">Lesson 3: Advanced Topics</a> →

Example 4: Course Hero with Parent Video Data

Display course information on lesson pages without query loops:

<div class="lesson-hero" style="background-image: url({brm_video:image:toplevel:url});">
    <div class="hero-content">
        <h1>BRM Dynamic Tags Reference</h1>
        <p class="course-meta">
            Course: {brm_structure:parent:toplevel}
            Duration: {brm_video:duration:toplevel:hms}
        </p>
    </div>
</div>

Note: The example uses {brm_video:image:toplevel:url} to get the top-level parent’s video image URL, and {brm_structure:parent:toplevel} to get the top-level parent’s title.

Output on a lesson page:

<div class="lesson-hero" style="background-image: url(https://example.com/course-thumbnail.jpg);">
    <div class="hero-content">
        <h1>Lesson 3: Advanced Topics</h1>
        <p class="course-meta">
            Course: Complete WordPress Course
            Duration: 5:30:45
        </p>
    </div>
</div>

Note: The example uses {brm_video:image:toplevel:url} to get the top-level parent’s video image URL, and {brm_structure:parent:toplevel} to get the top-level parent’s title.

Why this is powerful:

  • No query loops needed
  • Zero extra database queries (uses Request Registry)
  • Clean, simple syntax
  • Perfect for displaying parent context on child pages

Example 5: Drip Status

{brm_drip:unlocked}

If unlocked:

1

If locked:

0

Use with conditions to show different content:

[If unlocked] Watch the lesson now!
[If locked] This lesson unlocks on {brm_drip:unlock_date}

Example 5: Completion Status

{brm_progress:completed}

If completed:

1

If not completed:

0

Use with conditions:

[If {brm_progress:completed} equals 1] ✓ You've completed this lesson
[If {brm_progress:completed} equals 0] Mark as complete when you're done

Note: {brm_completed} is a class tag (outputs brm-completed or empty string) for CSS styling in query loops, not a dynamic tag that returns 1/0. Use {brm_progress:completed} for conditions.

Using Tags in Bricks

In Text Elements

  1. Add a Text or Heading element
  2. Click the {x} icon to insert a dynamic tag
  3. Search for “brm” to see all BricksMembers tags
  4. Select a tag
  5. Add modifiers manually if needed (e.g., change {brm_progress:percent} to {brm_progress:percent:structure})

In Buttons

  1. Add a Button element
  2. For button text: Use dynamic tags (e.g., “Next: {brm_structure:next_item}”)
  3. For button link: Use {brm_structure:next_item:url} to get just the URL

Pro Tip: Use :url for button links (outputs just the URL), and :link for text fields (outputs a complete <a> tag).

In Conditions

Important: Dynamic tags are usually not needed in Bricks conditions because BricksMembers provides native conditions that are easier to use and more performant. Use the native BricksMembers conditions (found in the BricksMembers group) for common scenarios like checking user access, progress completion, and drip unlock status.

Dynamic tags in conditions should only be used for specific cases not covered by native BricksMembers conditions, such as custom comparisons or advanced logic that requires numeric values or specific tag outputs.

Using dynamic tags in conditions:

  1. Add any element
  2. Go to Conditions
  3. Add a condition: Dynamic Tag
  4. Enter a BricksMembers tag (e.g., {brm_progress})
  5. Set the comparison (e.g., “> 50”)

Example: Show an “Almost Done!” badge only if the course is more than 50% completed.

In Query Loops

Dynamic tags work in query loop templates.

Example: Show progress for each course in a query loop.

  1. Create a query loop of courses
  2. Inside the loop template, add: “Progress: {brm_progress:percent:toplevel}%” (or use :structure or :parent as needed)
  3. Each course card shows its own progress

Tag Availability

Some tags are only available when specific modules are enabled.

Always available:

  • {brm_user:*} membership-level tags such as {brm_user:levels} and {brm_user:levels_count}; account/profile tags such as {brm_user:id}, {brm_user:display_name}, {brm_user:email}, {brm_user:first_name}, {brm_user:last_name}, {brm_user:registered}, avatar, last-login, and custom-field tags require Member Profiles context
  • {brm_structure:*}
  • {brm_video:*}
  • {brm_active} (class tag)
  • {brm_post:level}, {brm_post:level:first}, {brm_post:level:ids:*} (post query loops)

Requires Member Profiles module: {brm_user:id}, {brm_user:display_name}, {brm_user:email}, {brm_user:first_name}, {brm_user:last_name}, {brm_user:registered}, {brm_user:avatar}, {brm_user:last_login}, {brm_user:field:*}

Requires Enrollments module:

  • {brm_enrollment:*}, {brm_enrollments:*}

Requires Progress Tracking module:

  • {brm_progress:*}
  • {brm_completed} (class tag for CSS styling)

Requires Drip Content module:

  • {brm_drip:*}
  • {brm_unlocked} (class tag for CSS styling)

Requires Protected Downloads module:

  • {brm_download}

Requires Like System module:

  • {brm_like:*}

Requires Certificates module:

  • {brm_cert:*}

Requires Quiz module:

  • Top-level underscore tags such as {brm_quiz_title}, {brm_quiz_score_percent}, and {brm_quiz_attempts_remaining}, plus loop-context families {brm_quiz_q:*}, {brm_quiz_a:*}, {brm_quiz_pair:*}, and {brm_quiz_item:*}

Requires Groups module:

  • {brm_group:*}

Requires Gifting module:

  • {brm_gift:*}

Requires Payments module:

  • {brm_billing:*}, {brm_checkout:*}

Requires Submissions module:

  • {brm_submission:*}

Requires Member Chat module:

  • {brm_chat:*}

Requires Instructor Frontend Builder module:

  • {brm_instructor:*}

Requires Content Bank module:

  • {brm_bank_*}

Requires Video Tracking module:

  • {brm_video_watch:*}

If a tag shows empty output, check that the required module or integration is enabled in the correct admin area, usually BricksMembers → Modules or BricksMembers → Integrations.

Common Questions

Q: Can I use tags outside of Bricks? A: No. These are Bricks-specific dynamic tags. BricksMembers only works with Bricks Builder!

Q: Can I combine multiple tags? A: Yes! Use as many tags as you want in a single text field.

Q: Can I use tags in custom HTML? A: Yes! Tags work in the Code element.

Q: Why is my tag showing empty output?

A: Check that:

  • The user is logged in (for user-specific tags), or a user is identified via URL parameter / author archive (when profile page detection is enabled)
  • The post is in a structure (for structure tags)
  • The tag syntax is correct (no typos)
  • The output of the tag matches the conditions (correct post type of template, etc.)

Q: Can I format tag output (e.g., add a % sign)? A: Yes! Just add it manually: {brm_progress:percent}%

Q: Can I use tags in ACF fields? A: Not directly. ACF fields don’t process Bricks dynamic tags. Use Bricks elements to display ACF data with BricksMembers tags.

Early Bird Deal

Start Building Your Membership Site Today

Create, sell, and manage your content without limits. BricksMembers gives you everything you need to build membership and LMS sites with Bricks Builder.

Lifetime updates & bug fixes • Premium support • 0% transaction fees • 60-day money-back guarantee