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

yourdomain.com/activity
Maria Lopezposted an update · now

This update is total , honestly.

5+ BuddyPress surfaces filtered: activity status updates, activity comments, private messages and message subjects, notifications, and BP create-excerpt output, with bbPress forum, topic, and reply titles and content added when bbPress is active
8 built-in replacement symbols to mask matched words: asterisk, dollar, question, exclamation, hyphen, hash, tilde, and blank, with a filter to supply your own character
0 rows of stored content changed: every match is replaced as the content is rendered, so the value saved in the database is left exactly as the member wrote it

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.

01

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.

02

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.

03

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.

04

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.

05

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.

yourdomain.com/activity
Maria Lopezposted an update · now

This update is total , honestly.

A member posts an activity containing a flagged word. The text is stored verbatim in the database. When BuddyPress prints the activity, the plugin's filter walks the text nodes of the rendered HTML, finds each keyword, and replaces it with the chosen symbol pattern, for example a leading letter followed by asterisks. The reader sees the masked version; the stored row never changes.

yourdomain.com/wp-admin/admin.php?page=wbcom-settings
Settings
Enable on activity stream
Show on member profiles
Email notifications
Allowed roles

Settings live under the Wbcom Designs menu in a card-panel admin laid out across tabbed cards: a General tab with the keyword list, the content types to filter, the replacement symbol, the rendering mode, case sensitivity, and the whole-word toggle, plus optional email and phone masking; an Import tab for bulk saving or resetting the keyword list; and FAQ and License tabs. All settings are stored in the single wbbprof_settings option.

Step 1 of 2

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
yourdomain.com/activity
Maria Lopezposted an update · now

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
yourdomain.com/wp-admin/admin.php?page=wbcom-settings
Settings
Enable on activity stream
Show on member profiles
Email notifications
Allowed roles

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.

01

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.

02

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.

03

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.

04

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.

05

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.

06

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.

Community managersMembership site ownersForum moderatorsSite owners protecting member privacyFamily-friendly community operators

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
Get Personal at $49 or lifetime at $149
Most popular

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
Get Professional at $99 or lifetime at $299

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
Get Agency at $129 or lifetime at $349

Before you install

Questions community operators ask.

Answered by the team that maintains the plugin. Anything else, reach out through the contact page.

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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.

  7. 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.

  8. 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.

  9. 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. 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.