Recommended Free Tools
The safest way to add a role badge beside a WordPress comment author is to filter the author link produced by the standard comment walker. Use the comment’s user_id to identify a registered account, map approved role IDs to public labels, and leave anonymous or unmatched comments unchanged.
Use the standard author-link filter
WordPress exposes get_comment_author_link for changing the formatted author link used in comment output. The core Walker_Comment calls this function when it renders a normal comment list, so a filter is less invasive than replacing the entire walker.
Add the code to a small custom plugin or your child theme’s functions.php. A plugin is usually easier to keep when the theme changes.
<?php
/**
* Add an approved role badge after registered comment authors.
*/
function freedom251_comment_role_badge( $author_html, $author_name, $comment_id ) {
$comment = get_comment( $comment_id );
// Anonymous comments, deleted users, and unmatched comments get no badge.
if ( ! $comment || ! $comment->user_id ) {
return $author_html;
}
$user = get_userdata( (int) $comment->user_id );
if ( ! $user || empty( $user->roles ) ) {
return $author_html;
}
// Expose only roles this site has chosen to show publicly.
$public_roles = array(
'administrator' => array(
'label' => 'Administrator',
'class' => 'administrator',
),
'editor' => array(
'label' => 'Editor',
'class' => 'editor',
),
'author' => array(
'label' => 'Author',
'class' => 'author',
),
'moderator' => array(
'label' => 'Moderator',
'class' => 'moderator',
),
);
$role_id = '';
foreach ( $user->roles as $candidate_role ) {
if ( isset( $public_roles[ $candidate_role ] ) ) {
$role_id = $candidate_role;
break;
}
}
if ( ! $role_id ) {
return $author_html;
}
$role = $public_roles[ $role_id ];
$badge = sprintf(
' <span class="comment-role-badge comment-role-badge--%1$s">%2$s</span>',
esc_attr( $role['class'] ),
esc_html( $role['label'] )
);
return $author_html . $badge;
}
add_filter( 'get_comment_author_link', 'freedom251_comment_role_badge', 10, 3 );
The callback receives the existing author HTML, the author name, and the comment ID. It preserves the original link and appends a separate span only when the comment belongs to a registered user whose role is on the allowlist.
Do these 3 things before closing this tab:
1Clear out junk files and repair common Windows errors2Scan for outdated or missing drivers - takes under a minute3Repair Windows errors before they cause bigger problems#1 Best Overall
Map internal roles to the labels visitors should see
A role ID is an internal identifier, not necessarily a suitable public label. WordPress sites can register custom roles, and a site may want to display “Moderator” even when its internal role is named differently. Edit $public_roles to match the roles and wording you deliberately publish.
- Use role IDs as the array keys, such as
editoror a custom ID. - Use the
labelvalue for the reader-facing text. - Use a fixed, approved
classvalue rather than turning an arbitrary role string into a CSS class. - If a user has several roles, the first matching role in the user’s role list is shown. Change that logic if your site needs a fixed priority.
Do not infer a role from a commenter’s name or email address. Anonymous commenters do not have a WordPress account role, and an email can be shared, changed, or unavailable.
Rank #2
Style the badge without changing the author link
Add CSS in Appearance → Editor → Styles → Additional CSS (the exact location depends on the theme), or enqueue it from your child theme:
.comment-role-badge {
display: inline-block;
margin-inline-start: .45rem;
padding: .15em .45em;
border-radius: .25rem;
background: #eef2f7;
color: #334155;
font-size: .75em;
font-weight: 600;
line-height: 1.2;
vertical-align: middle;
}
.comment-role-badge--administrator { background: #fee2e2; color: #991b1b; }
.comment-role-badge--editor { background: #dbeafe; color: #1e40af; }
.comment-role-badge--author { background: #dcfce7; color: #166534; }
.comment-role-badge--moderator { background: #fef3c7; color: #92400e; }
Keep the badge readable at the theme’s normal text size and check it in light and dark color schemes. Because the original author link remains intact, visitors can still use the theme’s existing author-link behavior.
The Tool Desk
Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →Rank #3
Confirm that your theme uses the standard comment path
The filter works when the theme’s comment markup calls get_comment_author_link(), normally through the core walker. A custom comments template may print the author name directly, use a custom walker, or handle pending comments differently.
- Open the rendered page and inspect the author element in your browser’s developer tools.
- Search the active theme and child theme for
get_comment_author_link,wp_list_comments, and custom comment walker classes. - Check a published comment by a logged-in user, an anonymous comment, and a pending comment if your site allows moderation previews.
- If the author markup never changes, adjust the theme’s supported comments template or custom walker instead of adding unrelated comment-body filters.
Theme-specific behavior must be verified on the actual site. If the theme bypasses the documented function, a template or walker adjustment may be necessary, and a child-theme override is preferable to editing the parent theme directly.
Rank #4
Filter versus a template or custom walker
| Approach | Use it when | Theme-update impact | Where the label appears |
|---|---|---|---|
get_comment_author_link filter |
The standard author-link output is used | Usually survives theme updates because it is hooked code | Front-end comment author output that passes through the filter |
| Comments template or custom walker | The theme bypasses the standard author-link function or needs wholly different markup | Use a child theme or maintained template override | Only the locations implemented by that template or walker |
Neither approach automatically adds labels to the WordPress admin comments screen, email notifications, or other feeds. Those outputs have separate rendering paths and require separate, purpose-built changes.
Security and accessibility checks
- Escape role labels with
esc_html()and attribute values withesc_attr(). - Keep role IDs and CSS classes on an explicit allowlist; never concatenate raw profile or role data into HTML.
- Use a non-interactive element such as
spanfor a descriptive badge, not a fake link or button. - Test keyboard navigation, contrast, zoom, and screen-reader output in the target theme. The label should supplement the author name, not hide or replace it.
- Remember that moderation states can have different markup. Verify pending comments in the moderation workflow rather than assuming their author links match published comments.
Do not use comment-body filters for an author badge
get_comment_text and comment_text affect the comment body. They are appropriate when you need to alter comment text, not when you need to place a role label beside the author name.
Best Value
For background on how roles and capabilities are defined and customized, see the WordPress Developer Handbook.
Frequently Asked Questions
Why does an anonymous commenter have no role badge?
An anonymous comment has no registered WordPress account to associate with a role. The code intentionally leaves that author unchanged instead of guessing from a name or email address.
Why is the badge missing in my theme?
Your theme may print author markup directly or use a custom walker instead of the standard get_comment_author_link() path. Inspect the comments template and implement the badge in a child-theme override only if the filter is bypassed.
Can I show a custom label for a custom role?
Yes. Add that role’s internal ID to the allowlist and set the exact public label and fixed CSS class you want visitors to see.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

