BricksMembers provides 9 powerful dynamic tags with 100+ modifier combinations. These tags let you display membership data anywhere in Bricks—headings, text, buttons, images, links, and more.
This guide covers every single tag and modifier available.
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.
💡 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.
{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.{brm_completed}— Addsbrm-completedclass when a user finishes a lesson. Use it to show checkmarks, change colors, or hide “Start” buttons on completed content.{brm_unlocked}— Addsbrm-unlockedclass 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
{brm_user:has_level:5}— Returns1or0. Perfect for Bricks conditions to show/hide content based on specific level IDs.{brm_progress:completed}— Returns1if current post is completed,0if not. Great for conditions and styling.{brm_progress:continue}— Returns a link to the next uncompleted post after the last completed one. Perfect for “Continue Learning” buttons on course pages.{brm_structure:parent}— Shows the parent level name (e.g., “Module 1” when viewing a lesson). Perfect for breadcrumbs or context headers.{brm_structure:parent:toplevel}— Shows the top-level name (e.g., “Course 1” when viewing any child). Great for course context headers.{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.
The 9 Base Tags
Always Available (6 tags):
{brm_user}– User levels and info{brm_structure}– Navigation and breadcrumbs{brm_video}– Video content (URL, image, duration){brm_download}– Protected downloads (requires Downloads module){brm_active}– Active item class for navigation{brm_post}– Post required access levels (in query loops)
Module-Specific (3 tags):
{brm_progress}– Progress tracking (requires Progress module){brm_drip}– Drip content (requires Drip module){brm_like}– Like system (requires Like module)
1. User Tags
All User Tag Modifiers
User Profile Tags (Member Profiles module)
Availability: Requires Member Profiles module
User Context Detection: BricksMembers uses a smart cascade to determine which user’s data to display:
- Bricks user query loop – The looped user is always used (highest priority)
- Author archive – On
/author/username/pages, the author is used - URL parameter or clean URL –
?user=123,/member/username/, or/profile/123/resolves that user - Current logged-in user – Default fallback
Configure which methods are active in BricksMembers → Settings → Modules → Profile Pages. This enables building public profile pages where all {brm_user:*} tags display the viewed user’s data, not the visitor’s.
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:
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):
Direct Structure/Post ID Modifiers (for use on pages without post context):
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).
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:
Completion Date:
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.
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.
How It Works:
- Finds all posts within the specified boundary (or default scope)
- Identifies the last completed post by the current user
- Returns the next post after that completed one
- If no posts are completed, returns the first post in scope
- 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):
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
All Drip Tag Modifiers
Examples:
Unlocked? {brm_drip:unlocked}
Unlocks: {brm_drip:unlock_date}
Days left: {brm_drip:days-left}
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
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:
Level Name Modifiers:
Parent Modifiers:
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).
Boundary Modifiers (for navigation):
Boundary modifiers control where navigation searches for the next/previous item. All navigation tags support these boundaries:
Combined Modifiers:
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
Note: Works with video plugins like Gumlet (can store video IDs instead of only URLs)
Video Image Tag – All Modifiers
Basic Modifiers:
Size Modifiers:
Boundary Modifiers:
Combined Modifiers (Boundary + Size/Output):
Advanced Image Modifiers:
Video Duration Tag – All Modifiers
Format Modifiers:
Boundary Modifiers:
Combined Modifiers (Boundary + Format):
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:
Image (Bricks Image element compatible):
Examples:
{brm_download:link}
{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
User List Modifiers:
Note: Only {brm_like:count} appears in the Bricks tag picker. The other tags work perfectly—just type them manually.
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. 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.
Active Item Tag Details
💡 One of the most useful tags for navigation menus! Highlights current page AND its parents.
{brm_active}
- Outputs
brm-activeif 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
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:
- Create a query loop showing course modules
- Set CSS class of the QL element in the Bricks element controls header:
module-item - Set CSS class in Bricks elements’ style tab:
{brm_active} - Style
.brm-activein 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-activeclass - When viewing a lesson page, the lesson’s parent module will also have the
brm-activeclass - Perfect for hierarchical navigation where you want to show which section the user is currently in
2. Term Query Loops (Category/Tag Filters)
- Create a query loop showing categories or tags
- Add a button element inside the loop
- Set CSS classes:
filter-button {brm_active} - 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)
- Create a query loop showing users
- Add a card element inside the loop
- Set CSS classes:
member-card {brm_active} - 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>{post_title}</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
- Add a Text or Heading element
- Click the {x} icon to insert a dynamic tag
- Search for “brm” to see all BricksMembers tags
- Select a tag
- Add modifiers manually if needed (e.g., change
{brm_progress:percent}to{brm_progress:percent:structure})
In Buttons
- Add a Button element
- For button text: Use dynamic tags (e.g., “Next: {brm_structure:next_item}”)
- 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:
- Add any element
- Go to Conditions
- Add a condition: Dynamic Tag
- Enter a BricksMembers tag (e.g.,
{brm_progress}) - 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.
- Create a query loop of courses
- Inside the loop template, add: “Progress: {brm_progress:percent:toplevel}%” (or use
:structureor:parentas needed) - Each course card shows its own progress
Tag Availability
Some tags are only available when specific modules are enabled.
Always available:
{brm_user:*}(levels; avatar/last_login/field require Member Profiles){brm_structure:*}{brm_video:*}{brm_active},{brm_completed},{brm_unlocked}(class tags){brm_post:level},{brm_post:level:first},{brm_post:level:ids:*}(post query loops)
Requires Member Profiles module: {brm_user:avatar}, {brm_user:last_login}, {brm_user:field:*}
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:*}
If a tag shows empty output, check that the required module is enabled in BricksMembers → Settings.
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.