This update is total , honestly.
BuddyPress · bbPress · Content moderation
Profane words slip into your feed. This plugin masks them on the way out.
Filtering runs on the display filters BuddyPress and bbPress use to print content, so an offensive word is masked the moment it is shown while the original stays untouched in the database. You set the word list, the replacement symbol, and which content types are filtered.
★★★★★ Filters activity, comments, messages, and bbPress · Display-time only, never edits the database · Email and phone masking included
Built for
Built for five kinds of community operators.
Filtering starts the moment you activate the plugin and add a keyword list. Pick the scenario closest to how you run your community.
Community managers
Offensive words in the activity stream are masked as the feed renders, so the timeline stays presentable without anyone editing or deleting a member's post. You keep the original wording in the database in case you need it for moderation context.
Membership site owners
A single keyword list, edited in one textarea, governs what gets masked across activity, comments, and private messages. You decide which content types are in scope from a checklist, so private messages can be filtered or left alone independently of the public feed.
Forum moderators
When bbPress is active, forum, topic, and reply titles and content are filtered with the same word list as BuddyPress. Filtering is wired to the bbPress display hooks, so the masked version shows in the forum while the stored post is unchanged.
Site owners protecting member privacy
Optional email and phone masking detects addresses and numbers in content and prints a masked version, so members cannot harvest contact details out of public posts. The masking runs on text only and leaves links and tag attributes alone.
Family-friendly community operators
Choose whole-word or partial matching and case-sensitive or case-insensitive comparison to tune how aggressive the filter is. Pick how a masked word reads, from a single leading letter to a fully blanked word, so the result fits your tone.
See it in action
How BuddyPress Profanity looks on your site.
Switch between the two surfaces in the preview: the display-time censor flow showing stored versus rendered content, and the admin settings screen.
Display-time filtering
Masked on screen, untouched in the database.
The plugin hooks the BuddyPress and bbPress output filters, then parses the rendered HTML and walks its text nodes to replace each matched keyword before the content is shown. Because it works on output, the stored row keeps the member's original wording, so nothing is destroyed and the masking re-applies cleanly on every render, including from cache. The 2.0.2 release scoped the parse to text nodes so links, images, and asset URLs are never touched.
- Filters activity, comments, messages, notifications, and bbPress on display
- Database content is never modified; masking re-applies on each render
- Text nodes only, so URLs, scripts, images, and stylesheets stay intact
- Works with caching because the cached output is the already-filtered HTML
This update is total , honestly.
Matching controls
Tune how aggressively words are caught and masked.
One settings screen governs the whole behaviour: the keyword list, the content types in scope, the replacement symbol, the rendering mode, case sensitivity, and the whole-word toggle. Choose whole-word matching to mask a term only when it stands alone, or partial matching to catch it inside longer words, then pick a symbol and how much of the word stays visible. Optional email and phone masking adds privacy protection on top.
- Whole-word or partial matching, with case-insensitive or case-sensitive comparison
- Eight replacement symbols and rendering modes from first-letter to fully blanked
- Per content-type selection, so private messages can be filtered independently
- Optional email and phone masking that leaves links and attributes alone
Works with
BuddyPress core, bbPress, and BuddyPress Hashtags.
The plugin filters content through the display hooks of BuddyPress and, when present, bbPress and BP Better Messages, and it exposes a filter surface that BuddyPress Hashtags reuses. These are the platforms it works with out of the box.
- BuddyPress
The core requirement. Filtering hooks the BuddyPress activity, message, notification, and excerpt display filters, so masked content is produced as BuddyPress prints it while stored content stays unchanged.
- bbPress
Optional. When bbPress is active, forum, topic, and reply titles and content are filtered with the same keyword list, and the bbPress content types appear in the filterable-content selection.
when bbPress is active - BP Better Messages
A hook on the BP Better Messages formatted-message output is wired so messages rendered by that plugin are filtered alongside native BuddyPress messages.
when BP Better Messages is active - BuddyPress Hashtags
BuddyPress Hashtags consumes this plugin's filter surface to apply profanity filtering to hashtags, so a flagged word inside a hashtag is masked the same way it is in regular activity content.
What you get
Display-time word filtering with the controls to tune it.
Every license is the complete plugin. Offensive words are masked across BuddyPress activity, comments, messages, and notifications, and across bbPress forums when bbPress is active, all at display time so stored content is never altered. You manage the keyword list, the replacement symbol, the rendering mode, and the matching rules from one settings screen. The only difference between tiers is how many sites the license covers.
Display-time filtering that never edits the database
Filtering hooks onto the BuddyPress and bbPress display filters, the same hooks those plugins use to print content. The plugin parses the rendered HTML, walks the text nodes, and replaces matched keywords before the content reaches the screen. Because it works on output, the value stored in the database is left exactly as the member wrote it, so nothing is lost and you can review the original wording.
Filtering across BuddyPress and bbPress content
Activity status updates, activity actions and comments, private message bodies and subjects, message thread excerpts, BuddyPress notifications, and create-excerpt output are all filtered. When bbPress is active, forum, topic, and reply titles and content are filtered too, and a BP Better Messages hook is wired for that plugin's formatted messages. The content types shown for selection adapt to whether bbPress is installed.
Custom keyword lists with bulk import
The word list is a comma-separated set you edit in the admin, seeded with a starter set of inappropriate terms you can extend or replace entirely. A dedicated Import tab bulk-saves a pasted list, and a reset action restores the default seed list. Keywords are trimmed and de-duplicated on load, and matches of two characters or fewer are skipped to avoid masking short, harmless fragments.
Replacement symbols and rendering modes
Pick the masking character from eight built-in symbols: asterisk, dollar, question, exclamation, hyphen, hash, tilde, or a blank space. Then choose how the word reads once masked, from showing only the first letter to a fully blanked word, with first-and-last and last-letter variants in between. All replacement uses multibyte-safe string handling so non-ASCII words mask correctly.
Whole-word and case matching controls
A strict-filter toggle switches between whole-word matching, which masks a keyword only when it stands alone, and partial matching, which masks the keyword anywhere it appears inside a longer word. A case setting chooses case-insensitive comparison, the default, or case-sensitive comparison. Together these let you decide how broadly the filter catches variants.
Email and phone masking for privacy
Optional masking detects email addresses and phone numbers in content and prints a masked version, so contact details cannot be harvested from public posts. The email pass splits the content so addresses inside tag attributes and links are left alone and only visible text is masked. Both masks are off until you enable them in settings.
Made for
Six audiences. One product.
Pricing
Same complete plugin on every tier. Pick how many sites you run.
Every tier ships the full feature set: display-time filtering across BuddyPress and bbPress, custom keyword lists with bulk import, the eight replacement symbols and rendering modes, the whole-word and case controls, and email and phone masking. Tiers differ only by the number of sites your license covers. Yearly plans include a year of updates and support; lifetime plans pay once and keep updates forever.
Personal
$49 / year
or $149 lifetime
One community site.
- 1 site
- Display-time filtering for BuddyPress and bbPress
- Custom keyword lists and replacement symbols
- Email and phone masking
- 1 year of updates + support
Professional
$99 / year
or $299 lifetime
Five sites. Freelancers and small agencies.
- 5 sites
- Display-time filtering for BuddyPress and bbPress
- Custom keyword lists and replacement symbols
- Email and phone masking
- 1 year of updates + support
Agency
$129 / year
or $349 lifetime
Unlimited sites for agencies running many community builds.
- Unlimited sites
- Display-time filtering for BuddyPress and bbPress
- Custom keyword lists and replacement symbols
- Email and phone masking
- 1 year of updates + support
Before you install
Questions community operators ask.
Answered by the team that maintains the plugin. Anything else, reach out through the contact page.
- 01
Does this require BuddyPress?
Yes. The plugin filters content through BuddyPress display hooks, so BuddyPress must be installed and active. bbPress is optional: when it is active, the plugin also filters forum, topic, and reply titles and content.
- 02
Does it change the content stored in my database?
No. Filtering runs only when content is displayed, hooking the same output filters BuddyPress and bbPress use to print activity, messages, and forum posts. The masked version is what readers see, while the row saved in the database keeps the member's original wording unchanged.
- 03
Which content types does it filter?
BuddyPress activity status updates, activity actions and comments, private message bodies and subjects, message thread excerpts, notifications, and create-excerpt output. When bbPress is active it also filters forum, topic, and reply titles and content. A BP Better Messages hook is wired so that plugin's formatted messages are covered too.
- 04
How do I manage the word list?
You edit a comma-separated keyword list in the General tab, seeded with a starter set of inappropriate terms you can extend or replace. The Import tab bulk-saves a pasted list in one action, and a reset restores the default seed list. Keywords are trimmed and de-duplicated, and any entry of two characters or fewer is skipped to avoid masking tiny fragments.
- 05
What does a masked word look like?
You pick the replacement symbol from eight options, asterisk, dollar, question, exclamation, hyphen, hash, tilde, or a blank space, and then choose the rendering mode. Modes range from showing only the first letter of the word to fully blanking it, with first-and-last and last-letter variants, so you control how recognisable the masked word is.
- 06
Can I match partial words, not just whole words?
Yes. A strict-filter toggle switches between whole-word matching, which masks a keyword only when it appears on its own, and partial matching, which masks the keyword anywhere it appears inside a longer word. There is also a case setting for case-insensitive or case-sensitive comparison.
- 07
Can it hide email addresses and phone numbers?
Yes, when you enable the optional email and phone masking. It detects addresses and numbers in content and prints a masked version so they cannot be harvested from public posts. The email pass leaves addresses inside links and tag attributes alone and masks only visible text.
- 08
Will it break links, images, or asset URLs in posts?
No. The 2.0.2 release moved filtering to walk only the text nodes of the rendered HTML, so scripts, images, stylesheets, file paths, and resource links are excluded from masking. Words inside visible text are filtered; markup and URLs are left intact.
- 09
Does it work with BuddyPress Hashtags?
Yes. BuddyPress Hashtags uses this plugin's filter surface to apply profanity filtering to hashtags, so a flagged word inside a hashtag is masked the same way it is in regular activity content. The two plugins are built to work together.
- 10
What happens to my data if I uninstall?
Settings live in a single plugin option and your keyword list is stored there. Since filtering never wrote to your content in the first place, deactivating simply stops the masking and your posts display as originally written. Remove the plugin option after deactivation if you want a full cleanup.
Keep offensive words out of your community feed.
Activate the plugin, paste your keyword list into the General tab, choose which content types to filter and which symbol to mask with, and the filtering starts on the next page load. Members keep posting as they always have, the masked version is what readers see, and the original text stays safe in the database for whenever you need it.