Hook Reference
Generated from source. Do not edit this file by hand — run
php bin/generate-hooks-reference.phpand it rebuilds from what the code actually fires. If a hook below has no description, add a docblock above thedo_action()/apply_filters()call and regenerate.
246 hooks: 56 Free actions, 103 Free filters, 26 Pro actions, 61 Pro filters.
Hooks fired by Free are the extension surface Pro itself is built on — anything Pro can do to Free, your code can do too.
Free — Actions
Section titled “Free — Actions”bp_member_blog_add_access_settings_options
Section titled “bp_member_blog_add_access_settings_options”FROZEN HOOK: Fires after the display of access settings. Pro listens here to inject its own access-related options.
add_action( 'bp_member_blog_add_access_settings_options', function ( $bp_member_blog_gen_stngs ) { } );| Parameter | Type | Description |
|---|---|---|
$bp_member_blog_gen_stngs |
array |
Plugin general setting option |
Fired in includes/admin/views/access.php:211 · since 3.0.0
bp_member_blog_add_content_settings_options
Section titled “bp_member_blog_add_content_settings_options”FROZEN HOOK: Fires after the display of content settings. Pro listens here to inject its own content-related options.
add_action( 'bp_member_blog_add_content_settings_options', function ( $bp_member_blog_gen_stngs ) { } );| Parameter | Type | Description |
|---|---|---|
$bp_member_blog_gen_stngs |
array |
Plugin general setting option |
Fired in includes/admin/views/content.php:267 · since 3.0.0
bp_member_blog_add_editor_settings_options
Section titled “bp_member_blog_add_editor_settings_options”FROZEN HOOK: Fires after the display of editor settings. Pro listens here to inject its own editor-related options.
add_action( 'bp_member_blog_add_editor_settings_options', function ( $bp_member_blog_gen_stngs ) { } );| Parameter | Type | Description |
|---|---|---|
$bp_member_blog_gen_stngs |
array |
Plugin general setting option |
Fired in includes/admin/views/editor.php:109 · since 3.0.0
bp_member_blog_before_category
Section titled “bp_member_blog_before_category”This action is documented in templates/edit.php (bp_member_blog_before_category) */
add_action( 'bp_member_blog_before_category', function ( $current_post_id ) { } );Fired in templates/peepso/edit.php:348 and 1 other place
bp_member_blog_before_posts
Section titled “bp_member_blog_before_posts”Fires before the pending-posts list is rendered on a PeepSo profile. The same hook fires on the equivalent published/drafts PeepSo segments, each with its own literal tab name — check the $context argument if your callback needs to target only one of them.
add_action( 'bp_member_blog_before_posts', function ( $arg1 ) { } );| Parameter | Type | Description |
|---|---|---|
$context |
string |
Which posts list is about to render. ‘pending’ here |
Fired in templates/peepso/pending-posts.php:78 and 5 other places · since 3.0.0
bp_member_blog_cannot_post_message
Section titled “bp_member_blog_cannot_post_message”Action to display blocked message when user cannot post.
add_action( 'bp_member_blog_cannot_post_message', function ( $user_id ) { } );Fired in public/class-buddypress-member-blog-public.php:2312 · since 3.0.0
bp_member_blog_dashboard_tabs_nav
Section titled “bp_member_blog_dashboard_tabs_nav”Hook to add additional tabs to the dashboard.
add_action( 'bp_member_blog_dashboard_tabs_nav', function ( $base_url, $active_tab, $user_id, $is_own_profile ) { }, 10, 4 );| Parameter | Type | Description |
|---|---|---|
$base_url |
string |
The base URL for tab links |
$active_tab |
string |
The currently active tab |
$user_id |
int |
The user ID |
$is_own_profile |
bool |
Whether viewing own profile |
Fired in public/class-buddypress-member-blog-public.php:3007 · since 3.0.0
bp_member_blog_series_progress_updated
Section titled “bp_member_blog_series_progress_updated”Fires when series reading progress is updated. Frozen name — Pro has fired this since 2.0.0.
add_action( 'bp_member_blog_series_progress_updated', function ( $user_id, $series_id, $post_id ) { }, 10, 3 );| Parameter | Type | Description |
|---|---|---|
$user_id |
int |
Reader |
$series_id |
int |
Series |
$post_id |
int |
Post |
Fired in src/Services/SeriesProgress.php:98 · since 2.0.0
bp_member_blog_tab_contents
Section titled “bp_member_blog_tab_contents”This action is documented below. */
add_action( 'bp_member_blog_tab_contents', function () { } );Fired in includes/admin/views/shell.php:204 and 1 other place
bp_post_after_category
Section titled “bp_post_after_category”This action is documented in templates/edit.php (bp_post_after_category) */
add_action( 'bp_post_after_category', function ( $current_post_id ) { } );Fired in templates/peepso/edit.php:405 and 1 other place
bp_post_after_content
Section titled “bp_post_after_content”This action is documented in templates/edit.php (bp_post_after_content) */
add_action( 'bp_post_after_content', function ( $current_post_id ) { } );Fired in templates/peepso/edit.php:336 and 1 other place
bp_post_after_featured_image
Section titled “bp_post_after_featured_image”This action is documented in templates/edit.php (bp_post_after_featured_image) */
add_action( 'bp_post_after_featured_image', function ( $current_post_id ) { } );Fired in templates/peepso/edit.php:513 and 1 other place
bp_post_after_publishing_options
Section titled “bp_post_after_publishing_options”Fires inside the Publishing Options panel, after the comment-status checkbox and its “field present” marker input. Extension point for the Publishing Options section (visibility, password, comments) — same bp_post_before_* / bp_post_after_* family used throughout this form, so third-party code that already hooks the other fields can extend this one the same way.
add_action( 'bp_post_after_publishing_options', function ( $current_post_id ) { } );| Parameter | Type | Description |
|---|---|---|
$current_post_id |
int |
The post being created (0) or edited |
Fired in templates/edit.php:1159 · since 1.0.0
bp_post_after_seo
Section titled “bp_post_after_seo”This action is documented in templates/edit.php (bp_post_after_seo) */
add_action( 'bp_post_after_seo', function ( $current_post_id ) { } );Fired in templates/peepso/edit.php:603 and 1 other place
bp_post_after_tag
Section titled “bp_post_after_tag”This action is documented in templates/edit.php (bp_post_after_tag) */
add_action( 'bp_post_after_tag', function ( $current_post_id ) { } );Fired in templates/peepso/edit.php:438 and 1 other place
bp_post_after_title
Section titled “bp_post_after_title”This action is documented in templates/edit.php (bp_post_after_title) */
add_action( 'bp_post_after_title', function ( $current_post_id ) { } );Fired in templates/peepso/edit.php:224 and 1 other place
bp_post_before_category
Section titled “bp_post_before_category”This action is documented in templates/edit.php (bp_post_before_category) */
add_action( 'bp_post_before_category', function ( $current_post_id ) { } );Fired in templates/peepso/edit.php:341 and 1 other place
bp_post_before_content
Section titled “bp_post_before_content”This action is documented in templates/edit.php (bp_post_before_content) */
add_action( 'bp_post_before_content', function ( $current_post_id ) { } );Fired in templates/peepso/edit.php:229 and 1 other place
bp_post_before_featured_image
Section titled “bp_post_before_featured_image”This action is documented in templates/edit.php (bp_post_before_featured_image) */
add_action( 'bp_post_before_featured_image', function ( $current_post_id ) { } );Fired in templates/peepso/edit.php:443 and 1 other place
bp_post_before_seo
Section titled “bp_post_before_seo”This action is documented in templates/edit.php (bp_post_before_seo) */
add_action( 'bp_post_before_seo', function ( $current_post_id ) { } );Fired in templates/peepso/edit.php:518 and 1 other place
bp_post_before_submit_button
Section titled “bp_post_before_submit_button”This action is documented in templates/edit.php (bp_post_before_submit_button) */
add_action( 'bp_post_before_submit_button', function ( $current_post_id ) { } );Fired in templates/peepso/edit.php:616 and 1 other place
bp_post_before_tag
Section titled “bp_post_before_tag”This action is documented in templates/edit.php (bp_post_before_tag) */
add_action( 'bp_post_before_tag', function ( $current_post_id ) { } );Fired in templates/peepso/edit.php:410 and 1 other place
bp_post_before_title
Section titled “bp_post_before_title”This action is documented in templates/edit.php (bp_post_before_title) */
add_action( 'bp_post_before_title', function ( $current_post_id ) { } );Fired in templates/peepso/edit.php:212 and 1 other place
bpmb_after_reaction
Section titled “bpmb_after_reaction”Fires after a reaction (clap) is recorded and the post total has been refreshed. The stable, general-purpose seam for “a member reacted to a post” — named alongside {@see ‘bpmb_engagement_toggled’} so a site’s developer has one predictable place to hook every engagement event. Note the total is eventually-consistent: under concurrent claps a losing writer returns the live row-count while the mirror meta catches up on the next write (see {@see refresh_total()}).
add_action( 'bpmb_after_reaction', function ( $post_id, $user_id, $mine, $total ) { }, 10, 4 );| Parameter | Type | Description |
|---|---|---|
$post_id |
int |
Post |
$user_id |
int |
User |
$mine |
int |
The member’s clap count for this post, after the cap |
$total |
int |
The post’s total claps |
Fired in src/Services/ReactionService.php:146 · since 4.0.0
bpmb_after_topic_hub
Section titled “bpmb_after_topic_hub”Fires after the topic’s post list.
add_action( 'bpmb_after_topic_hub', function ( $bpmb_term ) { } );| Parameter | Type | Description |
|---|---|---|
$term |
WP_Term |
Term |
Fired in templates/topic-hub.php:126 · since 4.0.0
bpmb_after_view_increment
Section titled “bpmb_after_view_increment”Fires after a post’s view count is incremented. FROZEN — Pro’s analytics and view-milestone notifications hang off this.
add_action( 'bpmb_after_view_increment', function ( $post_id ) { } );| Parameter | Type | Description |
|---|---|---|
$post_id |
int |
The post ID |
Fired in src/Services/ViewTracking.php:650 · since 3.2.0
bpmb_after_writer_profile
Section titled “bpmb_after_writer_profile”Fires after the writer’s post list. Where Pro hangs the writer’s series.
add_action( 'bpmb_after_writer_profile', function ( $bpmb_writer_id ) { } );| Parameter | Type | Description |
|---|---|---|
$user_id |
int |
Writer |
Fired in templates/writer-profile.php:113 · since 4.0.0
bpmb_before_topic_hub
Section titled “bpmb_before_topic_hub”Fires before the topic-hub header.
add_action( 'bpmb_before_topic_hub', function ( $bpmb_term ) { } );| Parameter | Type | Description |
|---|---|---|
$term |
WP_Term |
Term |
Fired in templates/topic-hub.php:69 · since 4.0.0
bpmb_before_writer_profile
Section titled “bpmb_before_writer_profile”Fires before the writer-profile header.
add_action( 'bpmb_before_writer_profile', function ( $bpmb_writer_id ) { } );| Parameter | Type | Description |
|---|---|---|
$user_id |
int |
Writer |
Fired in templates/writer-profile.php:55 · since 4.0.0
bpmb_bookmark_added
Section titled “bpmb_bookmark_added”Fires when a member saves a post.
add_action( 'bpmb_bookmark_added', function ( $user_id, $post_id ) { }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$user_id |
int |
User |
$post_id |
int |
Post |
Fired in src/Services/BookmarkService.php:85 · since 4.0.0
bpmb_bookmark_removed
Section titled “bpmb_bookmark_removed”Fires when a member unsaves a post.
add_action( 'bpmb_bookmark_removed', function ( $user_id, $post_id ) { }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$user_id |
int |
User |
$post_id |
int |
Post |
Fired in src/Services/BookmarkService.php:129 · since 4.0.0
bpmb_cache_cleared
Section titled “bpmb_cache_cleared”Action fired when all cache is cleared.
add_action( 'bpmb_cache_cleared', function () { } );Fired in includes/class-bp-member-blog-access-control.php:839 · since 3.1.0
bpmb_composer_panel_collaboration
Section titled “bpmb_composer_panel_collaboration”Fires inside the composer panel’s Collaboration section.
add_action( 'bpmb_composer_panel_collaboration', function ( $current_post_id ) { } );| Parameter | Type | Description |
|---|---|---|
$current_post_id |
int |
The post being created (0) or edited |
Fired in templates/edit.php:734 · since 4.1.0
bpmb_composer_panel_details
Section titled “bpmb_composer_panel_details”Fires inside the composer panel’s Details section.
add_action( 'bpmb_composer_panel_details', function ( $current_post_id ) { } );| Parameter | Type | Description |
|---|---|---|
$current_post_id |
int |
The post being created (0) or edited |
Fired in templates/edit.php:931 · since 4.1.0
bpmb_composer_panel_publishing
Section titled “bpmb_composer_panel_publishing”Fires inside the composer panel’s Publishing section. Scheduling lives here. It used to hook bp_post_before_submit_button, which is also where co-author workflow ACTIONS (approve, reject) attach — and those belong on the action bar, not in a settings panel. One hook could not serve both, so publishing choices get their own slot.
add_action( 'bpmb_composer_panel_publishing', function ( $current_post_id ) { } );| Parameter | Type | Description |
|---|---|---|
$current_post_id |
int |
The post being created (0) or edited |
Fired in templates/edit.php:1177 · since 4.1.0
bpmb_digest_batch_sent
Section titled “bpmb_digest_batch_sent”Fires after a digest batch is queued.
add_action( 'bpmb_digest_batch_sent', function ( $messages, $offset ) { }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$sent |
int |
How many members got one |
$offset |
int |
The batch offset |
Fired in src/Services/DigestService.php:238 · since 4.0.0
bpmb_edit_url_page_missing
Section titled “bpmb_edit_url_page_missing”Fires when the configured submission/edit page is missing or trashed, so the dashboard cannot build a real edit URL. A site’s developer can hook this to raise an admin notice prompting the owner to reselect the page.
add_action( 'bpmb_edit_url_page_missing', function ( $post_id, $settings ) { }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$post_id |
int |
The post whose edit URL was requested |
$page_id |
mixed |
The configured (now invalid) page ID |
Fired in src/Services/DashboardService.php:201 · since 4.0.0
bpmb_engagement_toggled
Section titled “bpmb_engagement_toggled”Fires after a member toggles an engagement state (bookmark / follow). The unified seam for “a member turned an engagement on or off”. Runs only after the write is confirmed. Bookmarks and follows both fire it, so a single listener can react to any engagement toggle without knowing which feature it was.
add_action( 'bpmb_engagement_toggled', function ( $arg1, $user_id, $arg3, $post_id, $saved ) { }, 10, 5 );| Parameter | Type | Description |
|---|---|---|
$feature |
string |
‘bookmark’ |
$user_id |
int |
The member |
$object_type |
string |
‘post’ |
$object_id |
int |
Post ID |
$active |
bool |
True if it is now on (saved), false if now off |
Fired in src/Services/BookmarkService.php:175 and 1 other place · since 4.0.0
bpmb_followed
Section titled “bpmb_followed”Fires when somebody follows a writer or a series.
add_action( 'bpmb_followed', function ( $follower_id, $type, $object_id ) { }, 10, 3 );| Parameter | Type | Description |
|---|---|---|
$follower_id |
int |
Follower |
$type |
string |
‘user’ |
$object_id |
int |
Target |
Fired in src/Services/FollowService.php:109 · since 4.0.0
bpmb_followers_notified
Section titled “bpmb_followers_notified”Fires after followers have been told about a new post.
add_action( 'bpmb_followers_notified', function ( $post_id, $author_id, $followers ) { }, 10, 3 );| Parameter | Type | Description |
|---|---|---|
$post_id |
int |
The post |
$author_id |
int |
The writer |
$followers |
int[] |
Who was told |
Fired in src/Services/FollowNotifier.php:242 · since 4.0.0
bpmb_notification_pref_changed
Section titled “bpmb_notification_pref_changed”Fires when a member changes a notification preference.
add_action( 'bpmb_notification_pref_changed', function ( $user_id, $type, $on ) { }, 10, 3 );| Parameter | Type | Description |
|---|---|---|
$user_id |
int |
Member |
$type |
string |
Key |
$on |
bool |
New value |
Fired in src/Services/NotificationPrefs.php:230 · since 4.0.0
bpmb_post_approved
Section titled “bpmb_post_approved”Fires when a pending post is approved. Pro’s workflow notifications hang off this.
add_action( 'bpmb_post_approved', function ( $post_id, $arg2 ) { }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$post_id |
int |
Post |
$reviewer_id |
int |
Who approved it |
Fired in src/Admin/ModerationAdmin.php:207 · since 4.0.0
bpmb_post_clapped
Section titled “bpmb_post_clapped”Fires when a member claps a post.
add_action( 'bpmb_post_clapped', function ( $post_id, $user_id, $mine, $total ) { }, 10, 4 );| Parameter | Type | Description |
|---|---|---|
$post_id |
int |
Post |
$user_id |
int |
User |
$mine |
int |
The member’s clap count for this post, after the cap |
$total |
int |
The post’s total |
Fired in src/Services/ReactionService.php:129 · since 4.0.0
bpmb_post_featured
Section titled “bpmb_post_featured”Fires when a post is featured.
add_action( 'bpmb_post_featured', function ( $post_id, $order ) { }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$post_id |
int |
Post |
$order |
int |
Sort position |
Fired in src/Services/FeaturedService.php:133 · since 4.0.0
bpmb_post_published
Section titled “bpmb_post_published”Fires when a post is published. PRO plugin uses this to deduct credits.
add_action( 'bpmb_post_published', function ( $post_id, $post ) { }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$post_id |
int |
Post ID |
$user_id |
int |
User ID who published the post |
Fired in public/class-buddypress-member-blog-public.php:2622 and 1 other place · since 3.1.0
bpmb_post_rejected
Section titled “bpmb_post_rejected”Fires when a pending post is rejected (returned to the author as a draft).
add_action( 'bpmb_post_rejected', function ( $post_id, $arg2 ) { }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$post_id |
int |
Post |
$reviewer_id |
int |
Who rejected it |
Fired in src/Admin/ModerationAdmin.php:272 · since 4.0.0
bpmb_post_unfeatured
Section titled “bpmb_post_unfeatured”Fires when a post is un-featured.
add_action( 'bpmb_post_unfeatured', function ( $post_id ) { } );| Parameter | Type | Description |
|---|---|---|
$post_id |
int |
Post |
Fired in src/Services/FeaturedService.php:163 · since 4.0.0
bpmb_posts_toolbar
Section titled “bpmb_posts_toolbar”Fires inside the posts toolbar, after the search form. The place for controls that narrow the list being shown - Pro’s category filter hooks here. They used to hook bp_member_blog_before_posts, which fires before the list’s container, so the control landed outside the layout and had to float over the tab row, squeezing the tabs onto several lines.
add_action( 'bpmb_posts_toolbar', function ( $arg1 ) { } );| Parameter | Type | Description |
|---|---|---|
$post_status |
string |
The tab being listed: publish, pending or draft |
Fired in templates/peepso/pending-posts.php:131 and 5 other places · since 4.1.1
bpmb_register_blocks
Section titled “bpmb_register_blocks”Declare a block. Pro — and any third party — hooks here.
add_action( 'bpmb_register_blocks', function () { } );Fired in src/Blocks/BlockRegistry.php:254 · since 4.0.0
bpmb_single_after_content
Section titled “bpmb_single_after_content”Fires after a single member blog post’s content. The documented placement hook — a theme can move the related strip, or add its own furniture beside it, without filtering the_content.
add_action( 'bpmb_single_after_content', function ( $strip, $arg2 ) { }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$strip |
string |
The rendered related-posts markup (‘’ when there is none) |
$post_id |
int |
The post |
Fired in includes/shortcodes/class-shortcode-related-posts.php:200 · since 4.0.0
bpmb_unfollowed
Section titled “bpmb_unfollowed”Fires when somebody unfollows.
add_action( 'bpmb_unfollowed', function ( $follower_id, $type, $object_id ) { }, 10, 3 );| Parameter | Type | Description |
|---|---|---|
$follower_id |
int |
Follower |
$type |
string |
‘user’ |
$object_id |
int |
Target |
Fired in src/Services/FollowService.php:155 · since 4.0.0
bpmb_unsubscribed
Section titled “bpmb_unsubscribed”Fires after a member unsubscribes from one notification type.
add_action( 'bpmb_unsubscribed', function ( $user_id, $type ) { }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$user_id |
int |
Member |
$type |
string |
Preference key |
Fired in src/Services/Unsubscribe.php:151 · since 4.0.0
bpmb_upgraded_to_4
Section titled “bpmb_upgraded_to_4”Fires once, after a 3.x site has been migrated to 4.0.0.
add_action( 'bpmb_upgraded_to_4', function ( $settings ) { } );| Parameter | Type | Description |
|---|---|---|
$settings |
array |
The migrated settings |
Fired in includes/class-buddypress-member-blog-upgrade.php:235 · since 4.0.0
bpmb_user_cache_cleared
Section titled “bpmb_user_cache_cleared”Action fired when user cache is cleared.
add_action( 'bpmb_user_cache_cleared', function ( $user_id ) { } );| Parameter | Type | Description |
|---|---|---|
$user_id |
int |
The user ID |
Fired in includes/class-bp-member-blog-access-control.php:821 · since 3.1.0
buddypress_member_blog_post_save
Section titled “buddypress_member_blog_post_save”Fires after the front-end post form’s nonce and submission checks pass, before any recaptcha or post-creation logic runs. Intended for third-party form-protection integrations (e.g. reCAPTCHA verification) that need to run before the post is processed. No arguments are passed; hook into $_POST directly and call wp_die() / redirect to block the submission.
add_action( 'buddypress_member_blog_post_save', function () { } );Fired in public/class-buddypress-member-blog-public.php:1528 · since 1.0.0
buddypress_member_blog_post_submit
Section titled “buddypress_member_blog_post_submit”Fires at the end of the front-end post form handler, after the post has been created or updated and its category, tags, Editor.js blocks, and SEO meta saved. Fires for BOTH the create and update paths (new post and edit post), and for both “Save Draft” and “Publish/Submit” actions — check the post’s actual post_status if you need to distinguish them.
add_action( 'buddypress_member_blog_post_submit', function ( $post_id ) { } );| Parameter | Type | Description |
|---|---|---|
$post_id |
int |
The created or updated post ID |
Fired in public/class-buddypress-member-blog-public.php:2024 · since 1.0.0
Free — Filters
Section titled “Free — Filters”bp_member_blog_activity_allowed_html
Section titled “bp_member_blog_activity_allowed_html”Filter the kses schema used to sanitize activity-feed excerpts of new blog posts.
add_filter( 'bp_member_blog_activity_allowed_html', function ( $allowed ) { return $allowed; } );| Parameter | Type | Description |
|---|---|---|
$allowed |
array |
wp_kses-style schema |
Fired in includes/buddypress-member-blog-functions.php:805 · since 3.4.1
bp_member_blog_admin_setting_tabs
Section titled “bp_member_blog_admin_setting_tabs”Filter the admin settings tabs shown in the Member Blog hub. FROZEN HOOK: Pro plugin appends its own tabs here. Signature must remain apply_filters( 'bp_member_blog_admin_setting_tabs', $tabs ).
add_filter( 'bp_member_blog_admin_setting_tabs', function ( $tabs ) { return $tabs; } );| Parameter | Type | Description |
|---|---|---|
$tabs |
array |
Array keyed by tab slug, each value array{label: string, icon: string, group: string} |
Fired in includes/admin/class-bpmb-admin.php:126 · since 3.5.0
bp_member_blog_dashboard_custom_tab
Section titled “bp_member_blog_dashboard_custom_tab”Allow plugins to render custom tab content.
add_filter( 'bp_member_blog_dashboard_custom_tab', function ( $arg1, $tab, $user_id, $is_own_profile ) { return $arg1; }, 10, 4 );| Parameter | Type | Description |
|---|---|---|
$handled |
bool |
Whether the tab content was handled |
$tab |
string |
The active tab |
$user_id |
int |
The user ID |
$is_own_profile |
bool |
Whether viewing own profile |
Fired in public/class-buddypress-member-blog-public.php:3034 · since 3.0.0
bp_member_blog_dashboard_query_args
Section titled “bp_member_blog_dashboard_query_args”Filters the dashboard query args. FROZEN external contract (Pro’s co-authors module folds co-authored posts in through this). It is applied HERE so the SSR page and the AJAX pages get identical results — they used to disagree.
add_filter( 'bp_member_blog_dashboard_query_args', function ( $query_args, $user_id, $post_status, $tab ) { return $query_args; }, 10, 4 );| Parameter | Type | Description |
|---|---|---|
$query_args |
array |
The query arguments |
$user_id |
int |
The user ID |
$post_status |
string |
The post status being queried |
$tab |
string |
The active dashboard tab |
Fired in src/Services/DashboardService.php:146 · since 3.1.0
bp_member_blog_dashboard_tabs
Section titled “bp_member_blog_dashboard_tabs”Filter the tab slugs allowed in the [member-blog-dashboard] shortcode’s ?tab= query var. Used as a whitelist: a tab value read from the URL is only honoured if it appears in this array. PRO uses this to add its own dashboard tabs (e.g. scheduled posts, series).
add_filter( 'bp_member_blog_dashboard_tabs', function ( $arg1 ) { return $arg1; } );| Parameter | Type | Description |
|---|---|---|
$allowed_tabs |
string[] |
Allowed tab slugs. Default array( 'posts', 'drafts', 'pending', 'saved', 'following' ) |
Fired in public/class-buddypress-member-blog-public.php:2777 · since 3.0.0
bp_member_blog_draft_slug
Section titled “bp_member_blog_draft_slug”Filter the URL segment for the Draft tab. Applied in exactly one place; both the nav registration and the pagination parser read the result, so they can no longer disagree.
add_filter( 'bp_member_blog_draft_slug', function ( $arg1 ) { return $arg1; } );| Parameter | Type | Description |
|---|---|---|
$slug |
string |
Path segment. Default ‘draft’ |
Fired in includes/buddypress-member-blog-functions.php:1705 · since 3.4.1
bp_member_blog_get_user_url
Section titled “bp_member_blog_get_user_url”Filter the resolved profile URL for a member-blog author. Fires from bp_member_blog_get_user_url() itself — note the filter shares its name with the function it filters, this is the hook, not a recursive call.
add_filter( 'bp_member_blog_get_user_url', function ( $url, $author_id ) { return $url; }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$url |
string |
The resolved profile URL (BuddyPress member domain, or the standalone |
$author_id |
int |
The author’s user ID |
Fired in includes/buddypress-member-blog-functions.php:489 · since 1.0.0
bp_member_blog_menu_post_count
Section titled “bp_member_blog_menu_post_count”Filter the published post count for the blog menu item. Allows PRO plugin to include co-authored posts in the count.
add_filter( 'bp_member_blog_menu_post_count', function ( $post_count, $user_id ) { return $post_count; }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$post_count |
int |
The published post count |
$user_id |
int |
The user ID |
Fired in public/class-buddypress-member-blog-public.php:3690 · since 3.1.0
bp_member_blog_nav_visible
Section titled “bp_member_blog_nav_visible”Whether the member’s Blog tab is visible to the current visitor. The tab is registered for EVERYONE by default, including logged-out visitors. Until 4.0.0 it was gated on is_user_logged_in(), which meant a guest hitting /members/publish posts to a non-owner, and every owner action (edit / delete / create) is separately gated, so showing it to a guest exposes nothing new. Return is_user_logged_in() from this filter to restore the old members-only behaviour.
add_filter( 'bp_member_blog_nav_visible', function ( $arg1, $user_id ) { return $arg1; }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$visible |
bool |
Whether to register the Blog nav item |
$user_id |
int |
The displayed user ID |
Fired in public/class-buddypress-member-blog-public.php:1123 · since 4.0.0
bp_member_blog_pagination_args
Section titled “bp_member_blog_pagination_args”Filter the pagination arguments.
add_filter( 'bp_member_blog_pagination_args', function ( $pagination_args, $query, $tab ) { return $pagination_args; }, 10, 3 );| Parameter | Type | Description |
|---|---|---|
$pagination_args |
array |
The pagination arguments |
$query |
WP_Query |
The WP_Query object |
$tab |
string |
The current tab |
Fired in includes/buddypress-member-blog-functions.php:693 · since 3.1.0
bp_member_blog_pending_slug
Section titled “bp_member_blog_pending_slug”Filter the URL segment for the Pending tab. Applied in exactly one place; both the nav registration and the pagination parser read the result, so they can no longer disagree.
add_filter( 'bp_member_blog_pending_slug', function ( $arg1 ) { return $arg1; } );| Parameter | Type | Description |
|---|---|---|
$slug |
string |
Path segment. Default ‘pending’ |
Fired in includes/buddypress-member-blog-functions.php:1737 · since 3.4.1
bp_member_blog_post_content
Section titled “bp_member_blog_post_content”This filter is documented in templates/edit.php (bp_member_blog_post_content) */
add_filter( 'bp_member_blog_post_content', function ( $blog_post ) { return $blog_post; } );Fired in templates/peepso/edit.php:240 and 1 other place
bp_member_blog_post_data
Section titled “bp_member_blog_post_data”Filter post data before updating. Allows PRO features like scheduling to modify post data on edits.
add_filter( 'bp_member_blog_post_data', function ( $post_data, $post_id_to_update ) { return $post_data; }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$post_data |
array |
The post data array |
$post_id_to_update |
int |
The post ID being updated |
Fired in public/class-buddypress-member-blog-public.php:1738 and 1 other place
bp_member_blog_posts_per_page
Section titled “bp_member_blog_posts_per_page”Filter the number of posts shown per page on PeepSo profile blog segments. Applied identically on the published-posts, drafts, and pending-posts PeepSo segments (Buddypress_Member_Blog_Public::peepso_render_*_segment()).
add_filter( 'bp_member_blog_posts_per_page', function ( $posts_per_page ) { return $posts_per_page; } );| Parameter | Type | Description |
|---|---|---|
$posts_per_page |
int |
Posts per page. Default the ‘posts_per_page’ admin setting, or 10 |
Fired in public/class-buddypress-member-blog-public.php:3926 and 12 other places · since 3.0.0
bp_member_blog_posts_query_args
Section titled “bp_member_blog_posts_query_args”Filter the query args before creating the pending posts query.
add_filter( 'bp_member_blog_posts_query_args', function ( $query_args, $user_id, $arg3 ) { return $query_args; }, 10, 3 );| Parameter | Type | Description |
|---|---|---|
$query_args |
array |
The query arguments |
$user_id |
int |
The user ID |
$post_status |
string |
The post status being queried |
Fired in templates/pending-posts.php:74 and 2 other places · since 3.1.0
bp_member_blog_pro_validate_post
Section titled “bp_member_blog_pro_validate_post”Filter to run PRO-only validation before a post is updated from the front-end form. PRO uses this for word-count limits and required custom fields. Return a non-empty array of error strings to block the save — the caller joins them into a single message, shows it to the member, and redirects back to the form.
add_filter( 'bp_member_blog_pro_validate_post', function ( $arg1, $post_data ) { return $arg1; }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$validation_errors |
array |
Error messages so far. Default empty array (no errors) |
$post_data |
array |
The post data about to be passed to wp_update_post() |
Fired in public/class-buddypress-member-blog-public.php:1752 and 2 other places · since 3.1.0
bp_member_blog_published_count
Section titled “bp_member_blog_published_count”Filter the published post count for navigation. Allows PRO plugin to include co-authored published posts.
add_filter( 'bp_member_blog_published_count', function ( $count, $user_id ) { return $count; }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$count |
int |
The published post count |
$user_id |
int |
The user ID |
Fired in includes/buddypress-member-blog-functions.php:449 · since 3.1.0
bp_member_blog_shortcode_areas_inject
Section titled “bp_member_blog_shortcode_areas_inject”Final escape hatch — let themes / integrations opt out per context.
add_filter( 'bp_member_blog_shortcode_areas_inject', function ( $arg1, $context ) { return $arg1; }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$should_inject |
bool |
Whether to inject. Default true at this point |
$context |
string |
‘archive’ or ‘single’ |
Fired in includes/class-bp-member-blog-shortcode-areas.php:156 · since 3.5.0
bp_member_blog_shortcode_areas_raw
Section titled “bp_member_blog_shortcode_areas_raw”Filter the raw shortcode string before rendering.
add_filter( 'bp_member_blog_shortcode_areas_raw', function ( $raw, $slot ) { return $raw; }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$raw |
string |
Raw stored shortcode string |
$slot |
string |
Slot key |
Fired in includes/class-bp-member-blog-shortcode-areas.php:193 · since 3.5.0
bp_member_blog_template_dir
Section titled “bp_member_blog_template_dir”Filter the theme-relative directory the plugin looks in for template overrides. The plugin checks <child-theme>/{this}/<template> then <parent-theme>/{this}/<template> before falling back to its own templates/<template>.
add_filter( 'bp_member_blog_template_dir', function ( $arg1 ) { return $arg1; } );| Parameter | Type | Description |
|---|---|---|
$template_dir |
string |
Directory name, relative to the theme root. Default ‘bp-member-blog’ |
Fired in includes/buddypress-member-blog-functions.php:510 · since 1.0.0
bp_member_blog_terms_args
Section titled “bp_member_blog_terms_args”This filter is documented in templates/edit.php (bp_member_blog_terms_args) */
add_filter( 'bp_member_blog_terms_args', function ( $exclude ) { return $exclude; } );Fired in templates/peepso/edit.php:359 and 1 other place
bp_member_blog_total_posted_count
Section titled “bp_member_blog_total_posted_count”Filter the total post count for navigation. Allows PRO plugin to include co-authored posts.
add_filter( 'bp_member_blog_total_posted_count', function ( $count, $user_id, $is_my_profile ) { return $count; }, 10, 3 );| Parameter | Type | Description |
|---|---|---|
$count |
int |
The post count |
$user_id |
int |
The user ID |
$is_my_profile |
bool |
Whether viewing own profile |
Fired in includes/buddypress-member-blog-functions.php:398 · since 3.1.0
bp_member_blog_user_post_counts
Section titled “bp_member_blog_user_post_counts”Filter user post counts to allow PRO plugin to include co-authored posts.
add_filter( 'bp_member_blog_user_post_counts', function ( $counts, $user_id ) { return $counts; }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$counts |
object |
Object with published, drafts, pending, and total counts |
$user_id |
int |
The user ID |
Fired in includes/class-bp-member-blog-helpers.php:221 · since 3.1.0
bp_member_change_blog_label
Section titled “bp_member_change_blog_label”Filter the label text used for the member’s Blog nav tab (BuddyPress/BuddyBoss profile nav).
add_filter( 'bp_member_change_blog_label', function ( $total_posts ) { return $total_posts; } );| Parameter | Type | Description |
|---|---|---|
$blog_label |
string |
The nav item label, including the post-count <span> |
Fired in public/class-buddypress-member-blog-public.php:1099 and 2 other places · since 1.0.0
bp_member_change_blog_lable
Section titled “bp_member_change_blog_lable”Filter the label text for the standalone-mode admin-bar Blog menu. Note the misspelling (“lable” not “label”) — this is a legacy hook name kept exactly as originally shipped; renaming it would break any site already using it. Use {@see bp_member_change_blog_label} for the BuddyPress/BuddyBoss nav tab instead.
add_filter( 'bp_member_change_blog_lable', function ( $arg1 ) { return $arg1; } );| Parameter | Type | Description |
|---|---|---|
$blog_label |
string |
The admin-bar menu label. Default ‘Blog’ |
Fired in public/class-buddypress-member-blog-public.php:2706 · since 3.0.0
bp_member_change_blog_slug
Section titled “bp_member_change_blog_slug”Filter the URL segment the member blog lives on. This is the ONLY place the filter is applied — every other call site in Free and Pro goes through bp_member_blog_get_blog_slug(). The admin “tab slug” setting feeds this via bp_member_blog_apply_admin_tab_slug() at priority 5, so a theme or site filter at the default priority 10 still wins.
add_filter( 'bp_member_change_blog_slug', function ( $arg1 ) { return $arg1; } );| Parameter | Type | Description |
|---|---|---|
$slug |
string |
The blog slug. Default ‘blog’ |
Fired in includes/buddypress-member-blog-functions.php:1670 · since 1.0.0
bpmb_allow_private_posts
Section titled “bpmb_allow_private_posts”Filter whether a member may mark their own post private.
add_filter( 'bpmb_allow_private_posts', function ( $arg1 ) { return $arg1; } );| Parameter | Type | Description |
|---|---|---|
$allowed |
bool |
Default true — the submission form offers the option, so it has |
Fired in src/Services/PostSubmissionService.php:137 · since 4.0.0
bpmb_allowed_iframe_hosts
Section titled “bpmb_allowed_iframe_hosts”Filter the list of iframe src hosts allowed in member blog post content.
add_filter( 'bpmb_allowed_iframe_hosts', function ( $defaults ) { return $defaults; } );| Parameter | Type | Description |
|---|---|---|
$hosts |
string[] |
Lowercase hostnames (no scheme, no trailing slash) |
Fired in buddypress-member-blog.php:788 · since 3.5.0
bpmb_allowed_image_mime_types
Section titled “bpmb_allowed_image_mime_types”Filters the allowed MIME types for member image uploads.
add_filter( 'bpmb_allowed_image_mime_types', function ( $mimes ) { return $mimes; } );| Parameter | Type | Description |
|---|---|---|
$mimes |
string[] |
Allowed MIME types |
Fired in src/Services/MediaService.php:157 · since 3.0.0
bpmb_allowed_member_types
Section titled “bpmb_allowed_member_types”Filter allowed member types for post creation.
add_filter( 'bpmb_allowed_member_types', function ( $types ) { return $types; } );| Parameter | Type | Description |
|---|---|---|
$types |
array |
Array of allowed member type slugs |
Fired in includes/class-bp-member-blog-access-control.php:703 · since 3.1.0
bpmb_allowed_roles
Section titled “bpmb_allowed_roles”Filter allowed roles for post creation.
add_filter( 'bpmb_allowed_roles', function ( $roles ) { return $roles; } );| Parameter | Type | Description |
|---|---|---|
$roles |
array |
Array of allowed role slugs |
Fired in includes/class-bp-member-blog-access-control.php:677 · since 3.1.0
bpmb_authors_query_args
Section titled “bpmb_authors_query_args”Filter the author-directory query args. THE extension point for who appears in the directory and in what order. Applied AFTER normalisation and BEFORE the cache read, so a filtered result is cached under its own key rather than colliding with the unfiltered one. Note the fast-path conditions below: leaving role empty, term_id 0 and orderby as post_count/total_views keeps the indexed stats-table path. Setting any of them is legitimate but falls through to the live aggregate, which costs more on a large site.
add_filter( 'bpmb_authors_query_args', function ( $args ) { return $args; } );| Parameter | Type | Description |
|---|---|---|
$args |
array |
Normalised args (per_page, page, orderby, order, role, term_id) |
Fired in src/Services/PostQuery.php:840 · since 4.0.0
bpmb_bookmark_list_query_args
Section titled “bpmb_bookmark_list_query_args”Filter the reading-list query. Pro’s hook for collections / folders: narrow the set without a second implementation of the list.
add_filter( 'bpmb_bookmark_list_query_args', function ( $user_id, $user_id ) { return $user_id; }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$args |
array |
{ user_id, page, per_page } |
$user_id |
int |
User |
Fired in src/Services/BookmarkService.php:313 · since 4.0.0
bpmb_can_create_post
Section titled “bpmb_can_create_post”Filter whether user can create posts. PRO plugin uses this to add: - Post count restrictions - Credits/balance checks - Time-based limits
add_filter( 'bpmb_can_create_post', function ( $can_create, $user_id ) { return $can_create; }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$can_create |
bool |
Whether user can create posts |
$user_id |
int |
The user ID |
Fired in includes/class-bp-member-blog-access-control.php:176 · since 3.1.0
bpmb_can_delete_post
Section titled “bpmb_can_delete_post”Filter whether user can delete a post. PRO plugin uses this to add: - Group blog admin permissions
add_filter( 'bpmb_can_delete_post', function ( $can_delete, $post_id, $user_id ) { return $can_delete; }, 10, 3 );| Parameter | Type | Description |
|---|---|---|
$can_delete |
bool |
Whether user can delete the post |
$post_id |
int |
The post ID |
$user_id |
int |
The user ID |
Fired in includes/class-bp-member-blog-access-control.php:324 · since 3.1.0
bpmb_can_edit_post
Section titled “bpmb_can_edit_post”Filter whether user can edit a post. PRO plugin uses this to add: - Co-author edit permissions - Group blog admin/mod permissions
add_filter( 'bpmb_can_edit_post', function ( $can_edit, $post_id, $user_id ) { return $can_edit; }, 10, 3 );| Parameter | Type | Description |
|---|---|---|
$can_edit |
bool |
Whether user can edit the post |
$post_id |
int |
The post ID |
$user_id |
int |
The user ID |
Fired in includes/class-bp-member-blog-access-control.php:260 · since 3.1.0
bpmb_can_manage_categories
Section titled “bpmb_can_manage_categories”Filter whether user can manage categories. PRO plugin uses this to add: - Group category management
add_filter( 'bpmb_can_manage_categories', function ( $can_manage, $user_id ) { return $can_manage; }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$can_manage |
bool |
Whether user can manage categories |
$user_id |
int |
The user ID |
Fired in includes/class-bp-member-blog-access-control.php:648 · since 3.1.0
bpmb_can_publish_post
Section titled “bpmb_can_publish_post”Filter whether user can publish a post. PRO plugin uses this to: - Deduct credits on publish - Check credit balance
add_filter( 'bpmb_can_publish_post', function ( $can_publish, $post_id, $user_id ) { return $can_publish; }, 10, 3 );| Parameter | Type | Description |
|---|---|---|
$can_publish |
bool |
Whether user can publish the post |
$post_id |
int |
The post ID (0 for new posts) |
$user_id |
int |
The user ID |
Fired in includes/class-bp-member-blog-access-control.php:425 · since 3.1.0
bpmb_can_view_draft
Section titled “bpmb_can_view_draft”Filter whether user can view a draft post. PRO plugin uses this to add: - Co-author visibility
add_filter( 'bpmb_can_view_draft', function ( $can_view, $post_id, $user_id ) { return $can_view; }, 10, 3 );| Parameter | Type | Description |
|---|---|---|
$can_view |
bool |
Whether user can view the draft |
$post_id |
int |
The post ID |
$user_id |
int |
The user ID |
Fired in includes/class-bp-member-blog-access-control.php:501 · since 3.1.0
bpmb_can_view_unpublished
Section titled “bpmb_can_view_unpublished”Filter whether a viewer may see an author’s unpublished posts. PRO uses this to widen visibility (group admins, co-authors).
add_filter( 'bpmb_can_view_unpublished', function ( $can_view, $author_id, $viewer_id ) { return $can_view; }, 10, 3 );| Parameter | Type | Description |
|---|---|---|
$can_view |
bool |
Whether the viewer may see unpublished posts |
$author_id |
int |
The author being listed |
$viewer_id |
int |
The viewer (0 = logged-out) |
Fired in includes/class-bp-member-blog-access-control.php:547 · since 3.5.1
bpmb_color_tokens
Section titled “bpmb_color_tokens”Filters the plugin’s colour tokens for light mode. Return a map of token name => CSS value. Only the names in {@see self::COLOR_SEAM_TOKENS} are emitted; anything else is ignored, so a filter cannot make “danger” green or repaint the Google preview.
add_filter( 'bpmb_color_tokens', function ( $arg1 ) { return $arg1; } );| Parameter | Type | Description |
|---|---|---|
$tokens |
array<string,string> |
Token name => value. Empty by default |
Fired in public/class-buddypress-member-blog-public.php:494 · since 4.0.2
bpmb_color_tokens_dark
Section titled “bpmb_color_tokens_dark”Filters the plugin’s colour tokens for dark mode. Same contract as bpmb_color_tokens. Emitted against the dark selector list so it beats the plugin’s own dark block, which a plain :root rule cannot.
add_filter( 'bpmb_color_tokens_dark', function ( $arg1 ) { return $arg1; } );| Parameter | Type | Description |
|---|---|---|
$tokens |
array<string,string> |
Token name => value. Empty by default |
Fired in public/class-buddypress-member-blog-public.php:506 · since 4.0.2
bpmb_composer_sections
Section titled “bpmb_composer_sections”Filters the composer’s panel sections. Adding a key here gives an extension its own section in the panel rather than forcing it to squeeze into somebody else’s. Array order IS display order.
add_filter( 'bpmb_composer_sections', function ( $sections ) { return $sections; } );| Parameter | Type | Description |
|---|---|---|
$sections |
array |
Section id => [ title, open ] |
Fired in src/Rendering/Composer.php:87 · since 4.1.0
bpmb_csp_policy
Section titled “bpmb_csp_policy”Filter the Content-Security-Policy header value sent on member blog editor pages. The default policy allows the inline scripts/styles WordPress and jQuery need, plus YouTube/Vimeo iframes (matches {@see bpmb_allowed_iframe_hosts()}) and Google Fonts. Only applied on editor pages (see is_editor_page()) so it never touches the rest of the site. Sites embedding other trusted origins should append to, not replace, the default directives.
add_filter( 'bpmb_csp_policy', function ( $this ) { return $this; } );| Parameter | Type | Description |
|---|---|---|
$csp_policy |
string |
The semicolon-joined CSP directive string |
Fired in public/class-buddypress-member-blog-public.php:123 · since 3.1.0
bpmb_default_post_image
Section titled “bpmb_default_post_image”Filters the fallback image used when a post has no featured image. Defaults to no image: a grey placeholder on every text-only post spent the card on a picture of nothing. Return a URL to bring a fallback back.
add_filter( 'bpmb_default_post_image', function ( $arg1 ) { return $arg1; } );| Parameter | Type | Description |
|---|---|---|
$url |
string |
Fallback image URL, or ‘’ for none |
Fired in src/Rendering/PostCardRenderer.php:1162 · since 4.1.1 Default changed from the bundled placeholder to ‘’.
bpmb_digest_body
Section titled “bpmb_digest_body”Filter the digest body before the footer is appended.
add_filter( 'bpmb_digest_body', function ( $out, $user_id, $posts ) { return $out; }, 10, 3 );| Parameter | Type | Description |
|---|---|---|
$out |
string |
Body HTML |
$user_id |
int |
Member |
$posts |
\WP_Post[] |
Posts |
Fired in src/Services/DigestService.php:492 · since 4.0.0
bpmb_digest_content
Section titled “bpmb_digest_content”Filter the COMPLETE digest e-mail content, body and unsubscribe footer together. Use this to wrap the whole message — a masthead above and a signature below, an HTML layout table, inline styles for a specific mail client — when a dev needs the finished article rather than just the post list. {@see ‘bpmb_digest_body’} is the narrower seam that edits only the body BEFORE the unsubscribe footer is appended; prefer it if you only want to touch the list of posts. A filter here MUST preserve the unsubscribe link the footer carries — recurring mail without a working one-click opt-out is spam, whatever the intent, and stripping it will burn the site’s sending reputation.
add_filter( 'bpmb_digest_content', function ( $content, $user_id, $posts ) { return $content; }, 10, 3 );| Parameter | Type | Description |
|---|---|---|
$content |
string |
Full digest HTML (body + unsubscribe footer) |
$user_id |
int |
Member |
$posts |
\WP_Post[] |
Posts included in this digest |
Fired in src/Services/DigestService.php:513 · since 4.0.0
bpmb_edd_item_id
Section titled “bpmb_edd_item_id”Filter the EDD product ID for the free plugin.
add_filter( 'bpmb_edd_item_id', function ( $arg1 ) { return $arg1; } );| Parameter | Type | Description |
|---|---|---|
$item_id |
int |
The product ID on wbcomdesigns.com |
Fired in buddypress-member-blog.php:286 and 1 other place · since 4.0.0
bpmb_edit_url_fallback
Section titled “bpmb_edit_url_fallback”Filters the fallback edit URL used when the configured edit page is invalid. Defaults to an inert ‘#’ so the button is a no-op rather than a broken link.
add_filter( 'bpmb_edit_url_fallback', function ( $arg1, $post_id ) { return $arg1; }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$fallback |
string |
The fallback URL (‘#’) |
$post_id |
int |
The post ID |
Fired in src/Services/DashboardService.php:212 · since 4.0.0
bpmb_email_body
Section titled “bpmb_email_body”Filters one email’s body, by id, after any template override.
add_filter( 'bpmb_email_body', function ( $message, $id ) { return $message; }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$message |
`string | array` |
$id |
string |
Email id |
Fired in src/Services/EmailDispatcher.php:117 · since 4.1.0
bpmb_email_enabled
Section titled “bpmb_email_enabled”Filters whether a specific member-blog email is sent.
add_filter( 'bpmb_email_enabled', function ( $arg1, $id ) { return $arg1; }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$enabled |
bool |
Whether to send |
$id |
string |
Email id |
Fired in src/Services/EmailRegistry.php:251 · since 4.1.0
bpmb_email_palette
Section titled “bpmb_email_palette”Filters the colours used in member-blog emails.
add_filter( 'bpmb_email_palette', function ( $palette ) { return $palette; } );| Parameter | Type | Description |
|---|---|---|
$palette |
array |
Hex values keyed by role |
Fired in src/Services/EmailTemplate.php:65 · since 4.1.0
bpmb_email_subject
Section titled “bpmb_email_subject”Filters one email’s subject, by id.
add_filter( 'bpmb_email_subject', function ( $subject, $id ) { return $subject; }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$subject |
string |
Subject line |
$id |
string |
Email id |
Fired in src/Services/EmailDispatcher.php:94 · since 4.1.0
bpmb_email_template_path
Section titled “bpmb_email_template_path”Filters the resolved template path for an email.
add_filter( 'bpmb_email_template_path', function ( $plugin, $id ) { return $plugin; }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$path |
string |
Template path, or ‘’ when none exists |
$id |
string |
Email id |
Fired in src/Services/EmailRegistry.php:290 · since 4.1.0
bpmb_emails
Section titled “bpmb_emails”Filters the catalogue of member-blog emails. Adding an entry here is what makes a new email discoverable to an admin screen, to is_enabled() and to the template-override lookup.
add_filter( 'bpmb_emails', function ( $emails ) { return $emails; } );| Parameter | Type | Description |
|---|---|---|
$emails |
array |
Email definitions keyed by id |
Fired in src/Services/EmailRegistry.php:217 · since 4.1.0
bpmb_enforced_excluded_categories
Section titled “bpmb_enforced_excluded_categories”Filters the categories members may not post into. FROZEN — Pro’s restrictions module extends the list.
add_filter( 'bpmb_enforced_excluded_categories', function ( $excluded_ids, $user_id ) { return $excluded_ids; }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$excluded_ids |
int[] |
Excluded term IDs from settings |
$user_id |
int |
The submitting user |
Fired in src/Services/PostSubmissionService.php:224
bpmb_engagement_enabled
Section titled “bpmb_engagement_enabled”Override an engagement switch. The admin setting is the site owner’s answer; this filter is the developer’s, and it wins — so a theme can suppress the bar on one post type, or one post, without touching the setting.
add_filter( 'bpmb_engagement_enabled', function ( $enabled, $what ) { return $enabled; }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$enabled |
bool |
Whether it is on |
$what |
string |
claps |
Fired in includes/buddypress-member-blog-functions.php:1503 · since 4.0.0
bpmb_enqueue_card_styles
Section titled “bpmb_enqueue_card_styles”Force the card stylesheet on. For a theme or a plugin that renders a shortcode outside post_content — a widget, a template part, a page builder — where neither has_shortcode() nor has_block() can see it.
add_filter( 'bpmb_enqueue_card_styles', function ( $arg1 ) { return $arg1; } );| Parameter | Type | Description |
|---|---|---|
$needed |
bool |
Whether to enqueue |
Fired in includes/shortcodes/class-shortcodes-loader.php:305 · since 4.0.0
bpmb_feature_capability
Section titled “bpmb_feature_capability”Filter the capability required to feature a post.
add_filter( 'bpmb_feature_capability', function ( $arg1 ) { return $arg1; } );| Parameter | Type | Description |
|---|---|---|
$cap |
string |
Default edit_others_posts — an EDITOR, not an author. An author |
Fired in src/Services/FeaturedService.php:53 · since 4.0.0
bpmb_features
Section titled “bpmb_features”Filter the feature list shown on the Features screen.
add_filter( 'bpmb_features', function ( $features ) { return $features; } );| Parameter | Type | Description |
|---|---|---|
$features |
array |
The features |
Fired in includes/class-bpmb-features.php:120 · since 4.0.0
bpmb_follow_notify_recipients
Section titled “bpmb_follow_notify_recipients”Filter who gets told about a new post from a writer they follow.
add_filter( 'bpmb_follow_notify_recipients', function ( $followers, $post_id, $author_id ) { return $followers; }, 10, 3 );| Parameter | Type | Description |
|---|---|---|
$followers |
int[] |
Follower user IDs |
$post_id |
int |
The post |
$author_id |
int |
The writer |
Fired in src/Services/FollowNotifier.php:109 · since 4.0.0
bpmb_followable_taxonomies
Section titled “bpmb_followable_taxonomies”Filter the taxonomies a member can follow. Default array( 'category' ) — NOT every taxonomy the hub renders for. Adding post_tag makes every tag on the site followable, which on a community site means thousands of followable things and a reading feed full of near-duplicates. See the method docblock.
add_filter( 'bpmb_followable_taxonomies', function ( $arg1 ) { return $arg1; } );| Parameter | Type | Description |
|---|---|---|
$taxonomies |
string[] |
Taxonomy names a member may follow |
Fired in src/Frontend/TermArchive.php:99 · since 4.0.0
bpmb_format_activity_action_new_blog_post
Section titled “bpmb_format_activity_action_new_blog_post”Filter the human-readable action sentence for the ‘new_blog_post’ activity type. Called by BuddyPress ({@see register_activity_actions()}) when it needs a sentence to display in the activity stream for a member’s new post.
add_filter( 'bpmb_format_activity_action_new_blog_post', function ( $formatted, $activity ) { return $formatted; }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$formatted |
string |
The formatted sentence, e.g. “User wrote a new blog post: Title” |
$activity |
object |
The BP_Activity_Activity object |
Fired in public/class-buddypress-member-blog-public.php:4256 · since 3.5.0
bpmb_gamification_award_comment_for_post
Section titled “bpmb_gamification_award_comment_for_post”Filter whether a comment on this post awards the post author gamification points. Defaults to true for the standard post type (the member-blog post type). A site can narrow this (e.g. only certain categories) or widen it to other post types.
add_filter( 'bpmb_gamification_award_comment_for_post', function ( $post, $post ) { return $post; }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$eligible |
bool |
Whether the post qualifies for the comment award. Default true for post |
$post |
WP_Post |
The post that received the comment |
Fired in wb-gamification.php:125 · since 4.0.0
bpmb_icon_registry
Section titled “bpmb_icon_registry”Filter the icon registry. Add an icon by supplying its INNER svg markup (paths, lines, polygons) - the wrapper, viewBox and stroke settings come from bpmb_icon().
add_filter( 'bpmb_icon_registry', function ( $icons ) { return $icons; } );| Parameter | Type | Description |
|---|---|---|
$icons |
array<string,string> |
Icon name => inner SVG markup |
Fired in includes/bpmb-icons.php:141 · since 4.0.0
bpmb_installer_catalog
Section titled “bpmb_installer_catalog”Filters the Discover catalog. Pro and third-party add-ons extend the range here rather than waiting for a core release. An entry with an item_id and key becomes installable; one with only a store_url renders as “Learn more”.
add_filter( 'bpmb_installer_catalog', function ( $catalog ) { return $catalog; } );| Parameter | Type | Description |
|---|---|---|
$catalog |
array |
Catalog keyed by slug |
Fired in includes/admin/class-bpmb-plugin-installer.php:227 · since 4.0.0
bpmb_is_member_blog_post
Section titled “bpmb_is_member_blog_post”Filter whether a post counts as a member blog post. Posts created before 4.1.1 carry no mark, so a site that wants its existing posts treated as member blog posts can say so here.
add_filter( 'bpmb_is_member_blog_post', function ( $is_ours, $post_id ) { return $is_ours; }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$is_ours |
bool |
Whether the post is a member blog post |
$post_id |
int |
Post ID |
Fired in includes/buddypress-member-blog-functions.php:1799 · since 4.1.1
bpmb_max_claps
Section titled “bpmb_max_claps”Filter the per-member clap cap.
add_filter( 'bpmb_max_claps', function ( $arg1 ) { return $arg1; } );| Parameter | Type | Description |
|---|---|---|
$max |
int |
Default 50, as Medium |
Fired in src/Services/ReactionService.php:65 · since 4.0.0
bpmb_max_upload_size
Section titled “bpmb_max_upload_size”Filters the maximum member upload size, in MEGABYTES. Applies only when the site owner has set an explicit limit; with no setting there is no megabyte figure of ours to filter, and the server’s own limit stands.
add_filter( 'bpmb_max_upload_size', function ( $mb ) { return $mb; } );| Parameter | Type | Description |
|---|---|---|
$mb |
int |
Maximum upload size in megabytes |
Fired in src/Services/MediaService.php:232 · since 3.0.0
bpmb_moderate_edits
Section titled “bpmb_moderate_edits”Filter whether editing an already-published post sends it back for review.
add_filter( 'bpmb_moderate_edits', function ( $arg1, $current ) { return $arg1; }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$moderate_edits |
bool |
Default false — the post stays live |
$current |
string |
The post’s current status |
Fired in src/Services/PostSubmissionService.php:95 · since 4.0.0
bpmb_notification_pref_defaults
Section titled “bpmb_notification_pref_defaults”Filter the notification preference keys and their defaults.
add_filter( 'bpmb_notification_pref_defaults', function ( $defaults ) { return $defaults; } );Fired in src/Services/NotificationPrefs.php:96 · since 4.0.0
bpmb_notification_pref_labels
Section titled “bpmb_notification_pref_labels”Filter the human-readable labels shown on the one-click unsubscribe confirmation page. Keys must match the preference keys from {@see bpmb_notification_pref_defaults} — a key with no matching label here falls back to the raw preference key in the confirmation message. Pro’s Author Settings screen has its own labels for the full preferences UI; this filter only affects the “Done. You will no longer receive {label}.” wp_die() page.
add_filter( 'bpmb_notification_pref_labels', function ( $arg1 ) { return $arg1; } );Fired in src/Services/Unsubscribe.php:212 · since 4.0.0
bpmb_peepso_activity_block
Section titled “bpmb_peepso_activity_block”Filter the member blog block added to a PeepSo activity entry.
add_filter( 'bpmb_peepso_activity_block', function ( $out, $post_id ) { return $out; }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$out |
string |
Markup prepended to the activity content |
$post_id |
int |
The member blog post |
Fired in public/class-buddypress-member-blog-public.php:3778 · since 4.1.1
bpmb_popular_query_args
Section titled “bpmb_popular_query_args”Filter the popular-posts query args. THE extension point for “what counts as popular”. Applied AFTER normalisation and BEFORE the cache read, so a filtered result is cached under its own key rather than colliding with the unfiltered one.
add_filter( 'bpmb_popular_query_args', function ( $args ) { return $args; } );| Parameter | Type | Description |
|---|---|---|
$args |
array |
Normalised args (per_page, page, timeframe, …) |
Fired in src/Services/PostQuery.php:339 · since 4.0.0
bpmb_popular_straight_join_pages
Section titled “bpmb_popular_straight_join_pages”Filter how much larger than one page the scoped set must be before the query is forced to lead with the stats table. Lower means the index scan is used more often; higher keeps the (cheap) sort for longer. 10 pages is deliberately conservative.
add_filter( 'bpmb_popular_straight_join_pages', function ( $arg1 ) { return $arg1; } );| Parameter | Type | Description |
|---|---|---|
$multiplier |
int |
Pages’ worth of rows. Default 10 |
Fired in src/Support/ViewCountStore.php:789 · since 4.0.0
bpmb_post_card_can_act
Section titled “bpmb_post_card_can_act”Filter whether the current user may act on this post (show the edit/publish/delete buttons). Runs AFTER the author/co-author/admin check above, so a site can widen or narrow who sees the action buttons on a post card without re-implementing the ownership logic.
add_filter( 'bpmb_post_card_can_act', function ( $bpmb_can_act, $bpmb_post_id ) { return $bpmb_can_act; }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$can_act |
bool |
Whether to show the action buttons. Default per the ownership check above |
$post_id |
int |
The post being rendered |
Fired in templates/parts/post-card.php:64 · since 4.0.0
bpmb_post_title_badges
Section titled “bpmb_post_title_badges”Filter the badges shown before a post title.
add_filter( 'bpmb_post_title_badges', function ( $arg1, $post_id, $context ) { return $arg1; }, 10, 3 );| Parameter | Type | Description |
|---|---|---|
$badges |
string |
Markup to place before the title. Default ‘’ |
$post_id |
int |
Post being rendered |
$context |
string |
Rendering surface, e.g. ‘dashboard’ |
Fired in src/Rendering/PostCardRenderer.php:444 · since 4.1.1
bpmb_reading_info_position
Section titled “bpmb_reading_info_position”Filter the position of reading info relative to post content.
add_filter( 'bpmb_reading_info_position', function ( $arg1, $post_id ) { return $arg1; }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$position |
string |
‘before’ or ‘after’. Default ‘before’ |
$post_id |
int |
Post ID |
Fired in public/class-buddypress-member-blog-public.php:3505 · since 3.2.1
bpmb_related_heading
Section titled “bpmb_related_heading”Filter the “Related posts” heading.
add_filter( 'bpmb_related_heading', function ( $arg1, $post_id ) { return $arg1; }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$heading |
string |
Heading text |
$post_id |
int |
The post being read |
Fired in includes/shortcodes/class-shortcode-related-posts.php:122 · since 4.0.0
bpmb_related_query_args
Section titled “bpmb_related_query_args”Filter the related-posts query. THE one extension point for relatedness. Pro (or a site) can re-rank, widen or narrow it here — there is deliberately no second filter name and no parallel “related” implementation to drift from this one.
add_filter( 'bpmb_related_query_args', function ( $query_args, $post_id, $args ) { return $query_args; }, 10, 3 );| Parameter | Type | Description |
|---|---|---|
$query_args |
array |
WP_Query args |
$post_id |
int |
The post we are finding relatives of |
$args |
array |
The caller’s args (per_page, strategy) |
Fired in src/Services/PostQuery.php:549 · since 4.0.0
bpmb_rest_allow_app_passwords
Section titled “bpmb_rest_allow_app_passwords”Filters whether Application Passwords may perform plugin writes. Default FALSE: an App Password is a bearer credential with the user’s full capabilities, usable headlessly. Every member-facing write here is a UI action. Turn this on only if you genuinely need scripted writes.
add_filter( 'bpmb_rest_allow_app_passwords', function ( $arg1 ) { return $arg1; } );| Parameter | Type | Description |
|---|---|---|
$allowed |
bool |
Whether to allow App-Password writes |
Fired in src/Rest/RestController.php:142 · since 4.0.0
bpmb_rest_collection_items
Section titled “bpmb_rest_collection_items”Filters the items in any Member Blog REST collection before they are returned. ONE seam rather than one per controller. Every collection endpoint in Free and Pro exits through this method - the writer directory, popular, featured, bookmarks, follows, the dashboard list - so a single filter here reaches all of them, and a new controller inherits the extension point instead of having to remember to add its own. The request is passed so a listener can target one endpoint, or read the query args, without string-matching a URL. Add fields, redact fields, reorder - but return an array of the same shape, because the pagination headers below are already computed from the unfiltered total.
add_filter( 'bpmb_rest_collection_items', function ( $items, $request, $total, $max_pages ) { return $items; }, 10, 4 );| Parameter | Type | Description |
|---|---|---|
$items |
array |
The page of items about to be returned |
$request |
`WP_REST_Request | null` |
$total |
int |
Total matching items across all pages |
$max_pages |
int |
Total number of pages |
Fired in src/Rest/RestController.php:196 · since 4.0.0
bpmb_rest_exposed_post_meta
Section titled “bpmb_rest_exposed_post_meta”Filters the post meta the plugin exposes on core’s REST endpoint. Keys added here become readable — and, for anyone passing the auth callback, writable — on /wp/v2/posts. Read the class docblock before adding one: the keys left out are billing and moderation state, and exposing those is a security decision rather than a convenience.
add_filter( 'bpmb_rest_exposed_post_meta', function ( $arg1 ) { return $arg1; } );| Parameter | Type | Description |
|---|---|---|
$exposed |
array<string,array{type:string,description:string}> |
Meta key => schema |
Fired in src/Rest/MetaFields.php:99 · since 4.0.2
bpmb_rest_gate_exempt
Section titled “bpmb_rest_gate_exempt”Filters whether a user is exempt from the REST submission gate. Exempt users skip the create/edit/publish gate and the blocked-category enforcement on /wp/v2/posts. Site staff are exempt by default; return false to hold everyone, including administrators, to the member rules.
add_filter( 'bpmb_rest_gate_exempt', function ( $exempt, $user_id ) { return $exempt; }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$exempt |
bool |
Whether the user is exempt |
$user_id |
int |
User being tested |
Fired in src/Rest/RestGate.php:106 · since 4.0.2
bpmb_rest_upload_allowed_types
Section titled “bpmb_rest_upload_allowed_types”Filters the allowed MIME types for uploads on the REST/AJAX surfaces. Kept as a second, separately-documented filter because it is part of the frozen public contract. It now applies to EVERY surface, not just REST — a site that tightened uploads through this filter was previously still wide open on the form-submit path.
add_filter( 'bpmb_rest_upload_allowed_types', function ( $mimes ) { return $mimes; } );| Parameter | Type | Description |
|---|---|---|
$mimes |
string[] |
Allowed MIME types |
Fired in src/Services/MediaService.php:171 · since 3.2.2
bpmb_rest_upload_max_size
Section titled “bpmb_rest_upload_max_size”Filters the maximum member upload size, in BYTES. Applied last, and deliberately NOT clamped afterwards: a site that filters this is stating a deliberate figure and may have raised the server limit by other means.
add_filter( 'bpmb_rest_upload_max_size', function ( $bytes ) { return $bytes; } );| Parameter | Type | Description |
|---|---|---|
$bytes |
int |
Maximum upload size in bytes |
Fired in src/Services/MediaService.php:255 · since 3.2.2
bpmb_single_engagement
Section titled “bpmb_single_engagement”Show the clap and save buttons under a single post. The developer’s override, on top of the admin setting above. Return false to suppress the bar – site-wide, or for one post – for a theme that would rather place it itself. Both renderers are public; see the class docblock.
add_filter( 'bpmb_single_engagement', function ( $arg1, $arg2 ) { return $arg1; }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$show |
bool |
Whether to append the engagement bar |
$post_id |
int |
The post |
Fired in src/Frontend/SingleEngagement.php:173 · since 4.0.0
bpmb_takeover_author_archive
Section titled “bpmb_takeover_author_archive”Filter whether the plugin renders the writer profile on the WP author archive. The code-level escape hatch; the admin has a setting for the same thing (Content -> Writer profiles). Return false and everything reverts to the theme’s author.php — no other behaviour changes, because WriterUrl keeps pointing here either way.
add_filter( 'bpmb_takeover_author_archive', function ( $enabled, $arg2 ) { return $enabled; }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$takeover |
bool |
Whether to take over. Defaults to the admin setting |
$user_id |
int |
The writer being viewed |
Fired in src/Frontend/AuthorArchive.php:74 · since 4.0.0
bpmb_takeover_term_archive
Section titled “bpmb_takeover_term_archive”Filter whether the plugin renders the topic hub on a term archive. The code-level escape hatch; the admin has a setting for the same thing. Return false and the theme’s category.php / tag.php takes over again, with nothing else changed.
add_filter( 'bpmb_takeover_term_archive', function ( $enabled, $term ) { return $enabled; }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$takeover |
bool |
Whether to take over. Defaults to the admin setting |
$term |
\WP_Term |
The term being viewed |
Fired in src/Frontend/TermArchive.php:137 · since 4.0.0
bpmb_template_part_path
Section titled “bpmb_template_part_path”Filter the resolved path of a member-blog template part.
add_filter( 'bpmb_template_part_path', function ( $located, $part, $args ) { return $located; }, 10, 3 );| Parameter | Type | Description |
|---|---|---|
$located |
string |
Absolute path |
$part |
string |
Requested part |
$args |
array |
Args passed to the part |
Fired in includes/buddypress-member-blog-functions.php:1296 · since 4.0.0
bpmb_topic_header
Section titled “bpmb_topic_header”Filter the rendered topic-hub header.
add_filter( 'bpmb_topic_header', function ( $out, $term ) { return $out; }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$out |
string |
Markup |
$term |
\WP_Term |
Term |
Fired in src/Rendering/TopicHubRenderer.php:120 · since 4.0.0
bpmb_topic_hub_per_page
Section titled “bpmb_topic_hub_per_page”Filter how many posts are shown per page on the topic hub (/category/{slug}/, /tag/{slug}/).
add_filter( 'bpmb_topic_hub_per_page', function ( $arg1, $bpmb_term ) { return $arg1; }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$per_page |
int |
Posts per page. Default 12 |
$term |
WP_Term |
The term being viewed |
Fired in templates/topic-hub.php:33 · since 4.0.0
bpmb_topic_hub_taxonomies
Section titled “bpmb_topic_hub_taxonomies”Filter the taxonomies the topic hub takes over the archive for. Default array( 'category', 'post_tag' ). Adding a custom taxonomy here also widens {@see TermArchive::is_ours()} and PostQuery’s tax scope — an unrecognised scope argument in PostQuery::paginate() is NOT a safe no-op, it is the WIDEST possible query (every post on the site), so a custom taxonomy added here must be one PostQuery actually understands.
add_filter( 'bpmb_topic_hub_taxonomies', function ( $arg1 ) { return $arg1; } );| Parameter | Type | Description |
|---|---|---|
$taxonomies |
string[] |
Taxonomy names the hub renders for. Default the core post taxonomies |
Fired in src/Frontend/TermArchive.php:58 · since 4.0.0
bpmb_visible_statuses_for_author
Section titled “bpmb_visible_statuses_for_author”Filter the post_status set a viewer may query for an author.
add_filter( 'bpmb_visible_statuses_for_author', function ( $statuses, $author_id, $viewer_id ) { return $statuses; }, 10, 3 );| Parameter | Type | Description |
|---|---|---|
$statuses |
string[] |
Allowed post_status values |
$author_id |
int |
The author being listed |
$viewer_id |
`int | null` |
Fired in includes/class-bp-member-blog-access-control.php:578 · since 3.5.1
bpmb_writer_header
Section titled “bpmb_writer_header”Filter the rendered writer header.
add_filter( 'bpmb_writer_header', function ( $out, $user_id, $profile ) { return $out; }, 10, 3 );| Parameter | Type | Description |
|---|---|---|
$out |
string |
Markup |
$user_id |
int |
Writer |
$profile |
array |
Profile data |
Fired in src/Rendering/WriterProfileRenderer.php:110 · since 4.0.0
bpmb_writer_profile
Section titled “bpmb_writer_profile”Filter a writer’s profile data.
add_filter( 'bpmb_writer_profile', function ( $profile, $user_id ) { return $profile; }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$profile |
array |
Profile |
$user_id |
int |
Writer |
Fired in src/Services/WriterProfile.php:91 · since 4.0.0
bpmb_writer_profile_per_page
Section titled “bpmb_writer_profile_per_page”Filter how many posts are shown per page on the writer profile (/author/{nick}/).
add_filter( 'bpmb_writer_profile_per_page', function ( $arg1, $bpmb_writer_id ) { return $arg1; }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$per_page |
int |
Posts per page. Default 12 |
$bpmb_writer_id |
int |
The writer being viewed |
Fired in templates/writer-profile.php:34 · since 4.0.0
bpmb_writer_url
Section titled “bpmb_writer_url”Filter the canonical writer URL. The single seam for a site that hosts its writers somewhere else entirely.
add_filter( 'bpmb_writer_url', function ( $url, $user_id ) { return $url; }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$url |
string |
Resolved URL |
$user_id |
int |
Writer |
Fired in src/Support/WriterUrl.php:92 · since 4.0.0
buddypress_member_blog_should_load_assets
Section titled “buddypress_member_blog_should_load_assets”Filter whether the plugin’s public CSS/JS should be enqueued on the current request. should_load_assets() already checks for the editor/dashboard shortcodes, the configured post page, single posts, and the various BuddyPress/PeepSo/standalone profile screens. Use this filter to force assets on (custom templates that render the editor without one of the above signals) or off (a page falsely matched).
add_filter( 'buddypress_member_blog_should_load_assets', function ( $should_load_assets, $post ) { return $should_load_assets; }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$should_load_assets |
bool |
Whether assets should load, as determined above |
$post |
`\WP_Post | null` |
Fired in public/class-buddypress-member-blog-public.php:1319 · since 3.0.0
member_blog_integration_mode
Section titled “member_blog_integration_mode”Filter the detected community-platform integration mode. Runs once per request (the result is memoized in self::$mode), after auto-detection has already picked BuddyBoss / BuddyPress / PeepSo / standalone by presence.
add_filter( 'member_blog_integration_mode', function ( $mode ) { return $mode; } );| Parameter | Type | Description |
|---|---|---|
$mode |
string |
Detected mode: one of ‘standalone’, ‘buddypress’, ‘buddyboss’, ‘peepso’ |
Fired in includes/class-member-blog-compat.php:348 · since 3.0.0
member_blog_supports
Section titled “member_blog_supports”Filter whether the active platform provides a given capability. Lets a new/custom platform adapter declare capabilities get_mode() doesn’t already know about, or a site override the built-in BuddyPress/BuddyBoss/PeepSo capability map.
add_filter( 'member_blog_supports', function ( $supported, $capability, $mode ) { return $supported; }, 10, 3 );| Parameter | Type | Description |
|---|---|---|
$supported |
bool |
Whether the capability is currently supported |
$capability |
string |
Capability token being checked (e.g. ‘activity’, ‘groups’) |
$mode |
string |
The active integration mode |
Fired in includes/class-member-blog-compat.php:451 · since 4.0.0
plugin_locale
Section titled “plugin_locale”This filter is documented in wp-includes/l10n.php */
add_filter( 'plugin_locale', function ( $locale, $arg2 ) { return $locale; }, 10, 2 );Fired in includes/class-buddypress-member-blog-i18n.php:90
wbcom_hub_wrapper_helper_slugs
Section titled “wbcom_hub_wrapper_helper_slugs”Filter the slugs of legacy wbcom-wrapper boilerplate helper pages to hide. These are not real plugins — they’re the “Our Plugins” / “Our Themes” / “Support” / “License” helper pages older wbcom-wrapper installs register under this hub — so they are excluded from the plugin-card grid. Filterable so another plugin can add its own legacy wrapper slugs to the exclusion list.
add_filter( 'wbcom_hub_wrapper_helper_slugs', function ( $arg1 ) { return $arg1; } );| Parameter | Type | Description |
|---|---|---|
$wrapper_helper_slugs |
string[] |
Page slugs to exclude from the hub grid |
Fired in includes/admin/views/hub.php:36 · since 3.5.0
Pro — Actions
Section titled “Pro — Actions”bp_accept_tos_errors
Section titled “bp_accept_tos_errors”Fires at the end of the reCAPTCHA widget output on registration/post forms, after the reCAPTCHA markup and hidden nonce fields. Intended as a placement point for rendering Terms of Service acceptance error messaging alongside the reCAPTCHA field. No consumers ship with WB Member Blog Pro itself.
add_action( 'bp_accept_tos_errors', function () { } );Fired in class-buddypress-member-blog-pro.php:1036 · since 1.0.0
bp_member_blog_after_series_header
Section titled “bp_member_blog_after_series_header”Fires after the series header.
add_action( 'bp_member_blog_after_series_header', function ( $series ) { } );| Parameter | Type | Description |
|---|---|---|
$series |
WP_Term |
The series term object |
Fired in templates/series-landing-page.php:117
bp_member_blog_after_series_posts
Section titled “bp_member_blog_after_series_posts”Fires after the series posts list.
add_action( 'bp_member_blog_after_series_posts', function ( $series, $posts ) { }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$series |
WP_Term |
The series term object |
$posts |
array |
Array of posts in the series |
Fired in templates/series-landing-page.php:273
bp_member_blog_before_series_header
Section titled “bp_member_blog_before_series_header”Fires before the series header.
add_action( 'bp_member_blog_before_series_header', function ( $series ) { } );| Parameter | Type | Description |
|---|---|---|
$series |
WP_Term |
The series term object |
Fired in templates/series-landing-page.php:59
bp_member_blog_before_series_posts
Section titled “bp_member_blog_before_series_posts”Fires before the series posts list.
add_action( 'bp_member_blog_before_series_posts', function ( $series, $posts ) { }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$series |
WP_Term |
The series term object |
$posts |
array |
Array of posts in the series |
Fired in templates/series-landing-page.php:168
bp_member_blog_post_added_to_series
Section titled “bp_member_blog_post_added_to_series”Fires after a post is added to a series.
add_action( 'bp_member_blog_post_added_to_series', function ( $post_id, $series_id ) { }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$post_id |
int |
Post ID |
$series_id |
int |
Series term ID |
Fired in includes/class-buddypress-member-blog-pro-series.php:658 · since 2.0.0
bp_member_blog_series_created
Section titled “bp_member_blog_series_created”Fires after a series is created.
add_action( 'bp_member_blog_series_created', function ( $term ) { } );| Parameter | Type | Description |
|---|---|---|
$term_id |
int |
Series term ID |
Fired in includes/class-buddypress-member-blog-pro-series.php:2026 · since 2.0.0
bpmb_coauthor_accepted
Section titled “bpmb_coauthor_accepted”Fires after a co-author invitation is accepted.
add_action( 'bpmb_coauthor_accepted', function ( $post_id, $user_id, $inviter_id ) { }, 10, 3 );| Parameter | Type | Description |
|---|---|---|
$post_id |
int |
Post ID |
$user_id |
int |
User ID who accepted |
$inviter_id |
int |
User ID of original inviter |
Fired in includes/class-buddypress-member-blog-pro-coauthors.php:954 · since 2.0.0
bpmb_coauthor_added
Section titled “bpmb_coauthor_added”Fires after a co-author is added to a post.
add_action( 'bpmb_coauthor_added', function ( $post_id, $user_id ) { }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$post_id |
int |
Post ID |
$user_id |
int |
Co-author user ID |
Fired in includes/class-buddypress-member-blog-pro-coauthors.php:562 · since 2.0.0
bpmb_coauthor_declined
Section titled “bpmb_coauthor_declined”Fires after a co-author invitation is declined.
add_action( 'bpmb_coauthor_declined', function ( $post_id, $user_id, $inviter_id ) { }, 10, 3 );| Parameter | Type | Description |
|---|---|---|
$post_id |
int |
Post ID |
$user_id |
int |
User ID who declined |
$inviter_id |
int |
User ID of original inviter |
Fired in includes/class-buddypress-member-blog-pro-coauthors.php:1037 · since 2.0.0
bpmb_coauthor_invited
Section titled “bpmb_coauthor_invited”Fires after a co-author invitation is sent.
add_action( 'bpmb_coauthor_invited', function ( $post_id, $invitee_user, $inviter_id ) { }, 10, 3 );| Parameter | Type | Description |
|---|---|---|
$post_id |
int |
Post ID |
$user_id |
int |
Invitee user ID |
$inviter_id |
int |
Inviter user ID |
Fired in includes/class-buddypress-member-blog-pro-coauthors.php:823 · since 2.0.0
bpmb_coauthor_removed
Section titled “bpmb_coauthor_removed”Fires after a co-author is removed from a post.
add_action( 'bpmb_coauthor_removed', function ( $post_id, $user_id ) { }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$post_id |
int |
Post ID |
$user_id |
int |
Co-author user ID |
Fired in includes/class-buddypress-member-blog-pro-coauthors.php:621 · since 2.0.0
bpmb_credits_added
Section titled “bpmb_credits_added”Fires after credits have been added to a user’s balance and the transaction has been logged (Post Credits module). Fired from add_credits(), inside the per-user credit lock, after self::META_BALANCE user meta has been updated. The membership integrations (WooCommerce, PMPro, MemberPress, WC Memberships) call add_credits() when a purchase/renewal grants credits, which is what ultimately triggers this action. This is the hook to react to a successful credit grant (e.g. send a custom notification, sync to an external ledger).
add_action( 'bpmb_credits_added', function ( $user_id, $amount, $type, $source, $reference ) { }, 10, 5 );| Parameter | Type | Description |
|---|---|---|
$user_id |
int |
User the credits were added to |
$amount |
int |
Number of credits added |
$type |
string |
Transaction type: ‘purchase’, ‘admin_add’, |
$source |
string |
Source: ‘pmpro’, ‘woo’, ‘memberpress’, ‘manual’ |
$reference |
string |
Reference ID (e.g. order_id, level_id) |
Fired in includes/class-buddypress-member-blog-pro-post-credits.php:696 · since 2.0.0
bpmb_credits_deducted
Section titled “bpmb_credits_deducted”Fires after credits have been deducted from a user’s balance and the transaction has been logged (Post Credits module). Fired from deduct_credits(), inside the per-user credit lock, after self::META_BALANCE user meta has been updated (and, for non-refund types, after the used-count meta has been incremented). Most commonly fires with $type = ‘post_used’ when a member publishes a post and one credit (or the bpmb_credit_deduct_amount-filtered amount) is spent.
add_action( 'bpmb_credits_deducted', function ( $user_id, $amount, $type, $source, $reference ) { }, 10, 5 );| Parameter | Type | Description |
|---|---|---|
$user_id |
int |
User the credits were deducted from |
$amount |
int |
Number of credits deducted (positive number; |
$type |
string |
Transaction type: ‘post_used’, ‘admin_remove’, ‘refund’ |
$source |
string |
Source: ‘post’, ‘manual’, ‘woocommerce’, etc |
$reference |
string |
Reference ID (usually the post ID for ‘post_used’) |
Fired in includes/class-buddypress-member-blog-pro-post-credits.php:827 · since 2.0.0
bpmb_memberpress_credits_added
Section titled “bpmb_memberpress_credits_added”Fires after the Post Credits module has granted initial credits for a MemberPress membership purchase (MemberPress integration). Fired from add_membership_credits() after add_credits() has been called with type ‘purchase’. Only fires when the credit_source setting accepts integration-granted credits and the product is mapped in the bpmb_post_credits_membership_map option.
add_action( 'bpmb_memberpress_credits_added', function ( $user_id, $credits, $product_id, $type ) { }, 10, 4 );| Parameter | Type | Description |
|---|---|---|
$user_id |
int |
User the credits were granted to |
$credits |
int |
Number of credits granted |
$product_id |
int |
MemberPress product (membership) ID |
$type |
string |
Membership type: ‘subscription’ or ‘lifetime’ |
Fired in includes/integrations/class-bpmb-credits-memberpress.php:245 · since 2.0.0
bpmb_memberpress_credits_renewed
Section titled “bpmb_memberpress_credits_renewed”Fires after the Post Credits module has granted renewal credits for a MemberPress subscription (MemberPress integration). Fired from on_subscription_renewal(), hooked to mepr-txn-status-complete, after add_credits() has been called with type ‘subscription’. Only fires for membership products mapped to ‘subscription’ type in the bpmb_post_credits_membership_map option — credits accumulate additively on each renewal, they are never reset to a fixed amount.
add_action( 'bpmb_memberpress_credits_renewed', function ( $user_id, $credits, $product_id ) { }, 10, 3 );| Parameter | Type | Description |
|---|---|---|
$user_id |
int |
User whose subscription renewed |
$credits |
int |
Number of credits granted for this renewal |
$product_id |
int |
MemberPress product (membership) ID |
Fired in includes/integrations/class-bpmb-credits-memberpress.php:179 · since 2.0.0
bpmb_pmpro_credits_added
Section titled “bpmb_pmpro_credits_added”Fires after the Post Credits module has granted credits for a Paid Memberships Pro level change (PMPro integration). Fired from on_membership_change(), hooked to pmpro_after_change_membership_level, after add_credits() has been called with type ‘purchase’. Only fires when the credit_source setting accepts integration-granted credits and the level is mapped in the bpmb_post_credits_membership_map option.
add_action( 'bpmb_pmpro_credits_added', function ( $user_id, $credits, $level_id, $type ) { }, 10, 4 );| Parameter | Type | Description |
|---|---|---|
$user_id |
int |
User the credits were granted to |
$credits |
int |
Number of credits granted |
$level_id |
int |
PMPro membership level ID |
$type |
string |
Membership type: ‘subscription’ or ‘lifetime’ |
Fired in includes/integrations/class-bpmb-credits-pmpro.php:128 · since 2.0.0
bpmb_pmpro_credits_renewed
Section titled “bpmb_pmpro_credits_renewed”Fires after the Post Credits module has granted renewal credits for a Paid Memberships Pro subscription (PMPro integration). Fired from on_subscription_renewal(), hooked to pmpro_subscription_payment_completed, after add_credits() has been called with type ‘subscription’. Only fires for levels mapped to ‘subscription’ type in the bpmb_post_credits_membership_map option.
add_action( 'bpmb_pmpro_credits_renewed', function ( $user_id, $credits, $level_id ) { }, 10, 3 );| Parameter | Type | Description |
|---|---|---|
$user_id |
int |
User whose subscription renewed |
$credits |
int |
Number of credits granted for this renewal |
$level_id |
int |
PMPro membership level ID |
Fired in includes/integrations/class-bpmb-credits-pmpro.php:203 · since 2.0.0
bpmb_post_rescheduled
Section titled “bpmb_post_rescheduled”Fires when an already-scheduled future post is moved to a new date/time from the Scheduling module’s calendar. Counterpart to bpmb_post_scheduled, which fires instead when the post being scheduled was previously a draft. Fires after wp_update_post() has succeeded in changing post_date/post_date_gmt.
add_action( 'bpmb_post_rescheduled', function ( $post_id, $old_datetime, $datetime ) { }, 10, 3 );| Parameter | Type | Description |
|---|---|---|
$post_id |
int |
Post ID |
$old_datetime |
string |
Previous post_date (site-local ‘Y-m-d H:i:s’) |
$datetime |
string |
New schedule datetime, site-local ‘Y-m-d H:i:s’ |
Fired in includes/class-buddypress-member-blog-pro-scheduling.php:1227 · since 2.5.0
bpmb_post_scheduled
Section titled “bpmb_post_scheduled”Fires when an unscheduled draft is scheduled from the calendar.
add_action( 'bpmb_post_scheduled', function ( $post_id, $datetime ) { }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$post_id |
int |
Post ID |
$datetime |
string |
New schedule datetime, site-local ‘Y-m-d H:i:s’ |
Fired in includes/class-buddypress-member-blog-pro-scheduling.php:1212 · since 2.5.0
bpmb_scheduled_post_publish_blocked
Section titled “bpmb_scheduled_post_publish_blocked”Fires after a scheduled post is reverted to draft due to failed access re-validation.
add_action( 'bpmb_scheduled_post_publish_blocked', function ( $post_id, $author_id ) { }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$post_id |
int |
Post ID |
$author_id |
int |
Post author user ID |
Fired in includes/class-buddypress-member-blog-pro-scheduling.php:992 · since 2.5.0
bpmb_scheduled_post_published
Section titled “bpmb_scheduled_post_published”Fires after a scheduled member post has gone live and its “your post was published” notification email has been sent (Scheduling module). Fired from send_publish_notification(), hooked to the publish_future_post transition, once the author’s opt-in email (or the skip, if they opted out via _bpmb_schedule_notification) has been handled. Use this to run additional side effects when a scheduled post goes live, independent of the built-in email.
add_action( 'bpmb_scheduled_post_published', function ( $post ) { } );| Parameter | Type | Description |
|---|---|---|
$post_id |
int |
ID of the post that was just published |
Fired in includes/class-buddypress-member-blog-pro-scheduling.php:824 · since 2.0.0
bpmb_woo_memberships_credits_added
Section titled “bpmb_woo_memberships_credits_added”Fires after the Post Credits module has granted credits for a new/ reactivated WooCommerce Memberships plan (WooCommerce Memberships integration). Fired from add_membership_credits() — called from both on_membership_status_change() (status transitions to ‘active’) and on_membership_created() — after add_credits() has been called with type ‘purchase’. Only fires when the credit_source setting accepts integration-granted credits and the plan is mapped in the bpmb_post_credits_membership_map option.
add_action( 'bpmb_woo_memberships_credits_added', function ( $user_id, $credits, $plan_id, $type ) { }, 10, 4 );| Parameter | Type | Description |
|---|---|---|
$user_id |
int |
User the credits were granted to |
$credits |
int |
Number of credits granted |
$plan_id |
int |
WooCommerce Memberships plan ID |
$type |
string |
Membership type: ‘subscription’ or ‘lifetime’ |
Fired in includes/integrations/class-bpmb-credits-woo-memberships.php:167 · since 2.0.0
bpmb_woo_memberships_credits_renewed
Section titled “bpmb_woo_memberships_credits_renewed”Fires after the Post Credits module has granted renewal credits for a WooCommerce Subscriptions-backed Memberships plan (WooCommerce Memberships integration). Fired from on_subscription_renewal(), hooked to woocommerce_subscription_renewal_payment_complete, once per active membership on the user with type ‘subscription’, after add_credits() has been called with type ‘subscription’.
add_action( 'bpmb_woo_memberships_credits_renewed', function ( $user_id, $credits, $plan_id ) { }, 10, 3 );| Parameter | Type | Description |
|---|---|---|
$user_id |
int |
User whose subscription renewed |
$credits |
int |
Number of credits granted for this renewal |
$plan_id |
int |
WooCommerce Memberships plan ID |
Fired in includes/integrations/class-bpmb-credits-woo-memberships.php:280 · since 2.0.0
bpmb_woocommerce_credits_added
Section titled “bpmb_woocommerce_credits_added”Fires after the Post Credits module has granted credits for a completed WooCommerce credit-pack order (plain WooCommerce integration, distinct from the membership-based WooCommerce Memberships integration). Fired from on_order_completed(), hooked to WooCommerce’s order-completed event, after add_credits() has been called with type ‘purchase’ and the order has been tagged/annotated. $total_credits sums every credit-pack line item on the order (credits-per-pack x quantity), across all packs purchased in that single order.
add_action( 'bpmb_woocommerce_credits_added', function ( $user_id, $total_credits, $order_id ) { }, 10, 3 );| Parameter | Type | Description |
|---|---|---|
$user_id |
int |
Customer the credits were granted to |
$total_credits |
int |
Total credits granted across all credit-pack |
$order_id |
int |
WooCommerce order ID |
Fired in includes/integrations/class-bpmb-credits-woocommerce.php:555 · since 2.0.0
buddypress_member_blog_loaded
Section titled “buddypress_member_blog_loaded”Fires once the WB Member Blog Pro singleton has finished its constructor (constants defined, hooks registered). Use this to detect that Pro is active and fully wired, e.g. from third-party integrations.
add_action( 'buddypress_member_blog_loaded', function () { } );Fired in class-buddypress-member-blog-pro.php:141 · since 1.0.0
Pro — Filters
Section titled “Pro — Filters”alter_bp_blog_pro_check_limit
Section titled “alter_bp_blog_pro_check_limit”Filters the matched Restrictions role-limit bucket for the current user. Returns the user_role value of the first restriction row (from the blog_restriction option) that matches one of the current user’s roles, or an empty string when no restriction row applies. The result feeds the per-hour/day/week/month/year post-count checks in the Restrictions module.
add_filter( 'alter_bp_blog_pro_check_limit', function ( $allow_post ) { return $allow_post; } );| Parameter | Type | Description |
|---|---|---|
$allow_post |
string |
The matched user_role key, or ‘’ if none matched |
Fired in includes/buddypress-member-blog-pro-general.php:66 · since 1.0.0
alter_bp_blog_pro_get_current_login_user_role
Section titled “alter_bp_blog_pro_get_current_login_user_role”Filters the current logged-in user’s roles as used by the Restrictions module. Consumed everywhere the module needs to match a user against a role-based post limit or submission permission (e.g. bp_member_blog_pro_check_limit(), bp_member_blog_pro_check_user_submit_post()). Empty array for logged-out users.
add_filter( 'alter_bp_blog_pro_get_current_login_user_role', function ( $roles ) { return $roles; } );| Parameter | Type | Description |
|---|---|---|
$roles |
array |
The current user’s WP role slugs, or an empty array when logged out |
Fired in includes/buddypress-member-blog-pro-general.php:35 · since 1.0.0
alter_bp_member_blog_pro_check_user_submit_post
Section titled “alter_bp_member_blog_pro_check_user_submit_post”Filters whether the current user is allowed to submit a post. Computed by intersecting the current user’s roles against Free’s bp_create_post setting (the roles allowed to submit member posts). Part of the Restrictions module’s submission gate.
add_filter( 'alter_bp_member_blog_pro_check_user_submit_post', function ( $allow_submit_posts ) { return $allow_submit_posts; } );| Parameter | Type | Description |
|---|---|---|
$allow_submit_posts |
bool |
True if the user’s role is permitted to submit posts |
Fired in includes/buddypress-member-blog-pro-general.php:92 · since 1.0.0
alter_bp_member_blog_pro_get_shortcode_restriction_image
Section titled “alter_bp_member_blog_pro_get_shortcode_restriction_image”Filters the image markup shown on the Restrictions module’s “limit exceeded” notice.
add_filter( 'alter_bp_member_blog_pro_get_shortcode_restriction_image', function ( $bp_member_blog_pro_shortcode_restriction_image ) { return $bp_member_blog_pro_shortcode_restriction_image; } );| Parameter | Type | Description |
|---|---|---|
$bp_member_blog_pro_shortcode_restriction_image |
string |
<img> HTML for the |
Fired in includes/buddypress-member-blog-pro-general.php:109 · since 1.0.0
alter_bp_member_blog_pro_shortcode_restriction_content
Section titled “alter_bp_member_blog_pro_shortcode_restriction_content”Filters the full HTML content of the Restrictions “limit exceeded” notice. Built by bp_member_blog_pro_shortcode_restriction_content() once a per-hour/ day/week/month/year post limit has been reached for the current user’s matched restriction row. Empty string (via the early return false above) never reaches this filter.
add_filter( 'alter_bp_member_blog_pro_shortcode_restriction_content', function ( $bp_member_blog_pro_shortcode_content ) { return $bp_member_blog_pro_shortcode_content; } );| Parameter | Type | Description |
|---|---|---|
$bp_member_blog_pro_shortcode_content |
string |
Restriction notice HTML markup |
Fired in includes/buddypress-member-blog-pro-general.php:149 · since 1.0.0
bp_activity_excerpt_append_text
Section titled “bp_activity_excerpt_append_text”Filters the “Read more” link text appended to a truncated blog comment excerpt inside group activity content (Groups module).
add_filter( 'bp_activity_excerpt_append_text', function ( $arg1 ) { return $arg1; } );| Parameter | Type | Description |
|---|---|---|
$append_text |
string |
Link text, default “ Read more” |
Fired in includes/class-buddypress-member-blog-pro-groups.php:1416 and 1 other place · since 1.0.0
bp_blog_pro_group_blog_tab
Section titled “bp_blog_pro_group_blog_tab”Filters the subnav item array registered for the group “Blog” tab before it is passed to bp_core_new_subnav_item() (Groups module).
add_filter( 'bp_blog_pro_group_blog_tab', function ( $nav ) { return $nav; } );| Parameter | Type | Description |
|---|---|---|
$nav |
array |
BP subnav item args (name, slug, parent_url, parent_slug, |
Fired in includes/class-buddypress-member-blog-pro-groups.php:215 · since 1.0.0
bp_blog_pro_group_label
Section titled “bp_blog_pro_group_label”Filters the label shown on the group “Blog” subnav tab (Groups module). Defaults to the shared blog_label general setting, falling back to “Blog”. Runs before the group subnav item is registered.
add_filter( 'bp_blog_pro_group_label', function ( $blog_group_label ) { return $blog_group_label; } );| Parameter | Type | Description |
|---|---|---|
$blog_group_label |
string |
Translated label for the group blog tab |
Fired in includes/class-buddypress-member-blog-pro-groups.php:173 · since 1.0.0
bp_blog_pro_group_slug
Section titled “bp_blog_pro_group_slug”Filters the URL slug for the group “Blog” subnav tab (Groups module). Defaults to the shared blog_slug general setting, falling back to ‘blog’. Runs before the group subnav item is registered.
add_filter( 'bp_blog_pro_group_slug', function ( $blog_group_slug ) { return $blog_group_slug; } );| Parameter | Type | Description |
|---|---|---|
$blog_group_slug |
string |
URL slug for the group blog tab |
Fired in includes/class-buddypress-member-blog-pro-groups.php:183 · since 1.0.0
bp_core_template_plugin
Section titled “bp_core_template_plugin”Filters the template BuddyPress loads for the Coauthors “Invitations” profile subnav screen. Standard BuddyPress convention for a component that registers a profile “plugin” screen (title/content injected via bp_template_title / bp_template_content). Themes can override ‘members/single/plugins’ to point at their own template part.
add_filter( 'bp_core_template_plugin', function ( $arg1 ) { return $arg1; } );| Parameter | Type | Description |
|---|---|---|
$template |
string |
Template part passed to bp_core_load_template() |
Fired in includes/class-buddypress-member-blog-pro-coauthors.php:1632 · since 2.0.0
bp_get_activity_content
Section titled “bp_get_activity_content”Filters the excerpted activity content for a group post activity item, inside the plugin’s own bp_get_activity_content_body override (Groups module, BuddyBoss theme path). Deliberately a DIFFERENT hook name from BuddyPress core’s bp_get_activity_content_body to avoid re-entering this same override (this method IS a callback on that core hook). Fires once for the truncated/ellipsis branch and once for the un-truncated branch of bp_member_blog_pro_activity_content_override().
add_filter( 'bp_get_activity_content', function ( $content ) { return $content; } );| Parameter | Type | Description |
|---|---|---|
$content |
string |
Excerpted or full post content built so far |
$activity |
object |
The BP_Activity_Activity object being rendered |
Fired in includes/class-buddypress-member-blog-pro-groups.php:1382 and 3 other places · since 1.0.0
bp_mem_blog_pro_add_feature_image_blog_post_as_activity_content
Section titled “bp_mem_blog_pro_add_feature_image_blog_post_as_activity_content”Filters the featured-image HTML prepended to a group post’s BuddyBoss activity content (Groups module, BuddyBoss theme path). Starts empty; the class’s own bp_member_blog_pro_activity_content_with_read_more() callback is hooked here (priority 10) to render a linked thumbnail when the post has a featured image. Runs from bp_member_blog_pro_activity_content_override(), the bp_get_activity_content_body override for group-post activity items.
add_filter( 'bp_mem_blog_pro_add_feature_image_blog_post_as_activity_content', function ( $arg1, $blog_post ) { return $arg1; }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$content_img |
string |
Featured-image HTML, empty by default |
$blog_post_id |
int |
ID of the member blog post the activity item is for |
Fired in includes/class-buddypress-member-blog-pro-groups.php:1357 · since 1.0.0
bp_member_blog_pro_activity_action
Section titled “bp_member_blog_pro_activity_action”Filters the sprintf() format string used for the “posted a new post in group” BuddyPress activity action sentence (Groups module). The returned string is passed to sprintf() with $user_link, $post_link_html, $group_link_html as %1$s/%2$s/%3$s, so a replacement string must keep those three placeholders (in any order). This same filter fires from every code path that creates or re-creates the group-post activity item (immediate publish, pending-post approval, etc.) with identical semantics each time.
add_filter( 'bp_member_blog_pro_activity_action', function ( $s ) { return $s; } );| Parameter | Type | Description |
|---|---|---|
$format |
string |
Translatable sprintf() format string with %1$s |
Fired in includes/class-buddypress-member-blog-pro-groups.php:1152 and 3 other places · since 1.0.0
bp_member_blog_pro_custom_field_settings
Section titled “bp_member_blog_pro_custom_field_settings”Filters a Custom Fields field definition before it is saved to the bp_member_blog_pro_custom_fields option. Fires for both new fields and edited fields, from the admin AJAX handler that builds the field settings array from $_POST. Part of the Custom Fields module.
add_filter( 'bp_member_blog_pro_custom_field_settings', function ( $field_settings, $type ) { return $field_settings; }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$field_settings |
array |
Sanitized field settings (type, label, key, |
$type |
string |
The field type (text, select, number, url, file, etc.) |
Fired in admin/class-buddypress-member-blog-pro-admin.php:934 and 1 other place · since 2.5.0
bp_member_blog_pro_reign_buddyx_pro_add_feature_image_blog_post_as_activity_content
Section titled “bp_member_blog_pro_reign_buddyx_pro_add_feature_image_blog_post_as_activity_content”Filters the featured-image HTML prepended to a group post’s activity content on the Reign/BuddyX (non-BuddyBoss) theme path (Groups module). Starts empty; the class’s own bp_member_blog_pro_reign_buddyx_pro_add_feature_image_blog_post_as_activity_content_callback() is hooked here (priority 10) to render a linked thumbnail when the post has a featured image. Counterpart to bp_mem_blog_pro_add_feature_image_blog_post_as_activity_content used on the BuddyBoss theme path.
add_filter( 'bp_member_blog_pro_reign_buddyx_pro_add_feature_image_blog_post_as_activity_content', function ( $arg1, $blog_post ) { return $arg1; }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$content_img |
string |
Featured-image HTML, empty by default |
$blog_post_id |
int |
ID of the member blog post the activity item is for |
Fired in includes/class-buddypress-member-blog-pro-groups.php:1471 · since 1.0.0
bp_member_blog_pro_user_can_manage_forms
Section titled “bp_member_blog_pro_user_can_manage_forms”Filters whether a user may manage Custom Fields form definitions in admin. Gates every Custom Fields module AJAX handler (add/edit/delete/reorder a custom field) in admin/class-buddypress-member-blog-pro-admin.php. Defaults to is_super_admin(); use this to grant the capability to other roles (e.g. a site owner without super-admin on multisite). Note: the user ID being checked is NOT passed to this filter; if you need it, read $user_id from the enclosing bp_member_blog_pro_user_can_manage_forms() call via get_current_user_id() (the only caller passes the current user).
add_filter( 'bp_member_blog_pro_user_can_manage_forms', function ( $user_id ) { return $user_id; } );| Parameter | Type | Description |
|---|---|---|
$can_manage |
bool |
True if the user may manage form/custom-field definitions |
Fired in includes/buddypress-member-blog-pro-general.php:590 · since 1.0.0
bp_member_blog_series_nav_html
Section titled “bp_member_blog_series_nav_html”Filter the series navigation HTML.
add_filter( 'bp_member_blog_series_nav_html', function ( $nav_html, $post_id, $series ) { return $nav_html; }, 10, 3 );| Parameter | Type | Description |
|---|---|---|
$nav_html |
string |
Navigation HTML |
$post_id |
int |
Post ID |
$series_id |
int |
Series term ID |
Fired in includes/class-buddypress-member-blog-pro-series.php:1172 · since 2.0.0
bpmb_access_denied_actions
Section titled “bpmb_access_denied_actions”Filters the actions offered to a member who has been refused posting. Each entry: url, label, and optional primary (bool). Site owners with their own credit shop, a contact form or a membership page can add or replace these — the default is a purchase link when one is configured, plus a way back to the member’s own dashboard.
add_filter( 'bpmb_access_denied_actions', function ( $purchase_url, $user_id, $purchase_url ) { return $purchase_url; }, 10, 3 );| Parameter | Type | Description |
|---|---|---|
$actions |
array |
Actions to render |
$user_id |
int |
The member being refused |
$purchase_url |
string |
The configured purchase URL, or ‘’ when unset |
Fired in includes/class-bp-member-blog-pro-access-control.php:1480 · since 4.0.2
bpmb_analytics_cleanup_batch_size
Section titled “bpmb_analytics_cleanup_batch_size”Filter the per-batch size for the analytics retention cron.
add_filter( 'bpmb_analytics_cleanup_batch_size', function ( $arg1 ) { return $arg1; } );| Parameter | Type | Description |
|---|---|---|
$batch_size |
int |
Rows processed per page. Default 100 |
Fired in includes/class-buddypress-member-blog-pro-analytics.php:471 · since 2.5.1
bpmb_author_settings_tabs
Section titled “bpmb_author_settings_tabs”Filters the tabs shown on the member-facing Author Settings dashboard. $tabs is built from the admin-configured tab toggles (Overview, Post Limits, Notifications, Scheduled Posts, Analytics — gated by the current user’s analytics access, Co-Authors, Series when its module is enabled). Keys are tab slugs, values are the translated tab labels. Part of the Author Settings module.
add_filter( 'bpmb_author_settings_tabs', function ( $tabs ) { return $tabs; } );| Parameter | Type | Description |
|---|---|---|
$tabs |
array |
Map of tab slug => translated tab label |
Fired in includes/class-buddypress-member-blog-pro-author-settings.php:601 · since 2.0.0
bpmb_calendar_community_cap
Section titled “bpmb_calendar_community_cap”Filter the capability that gates the community calendar view.
add_filter( 'bpmb_calendar_community_cap', function ( $arg1 ) { return $arg1; } );| Parameter | Type | Description |
|---|---|---|
$cap |
string |
Capability required to see ALL members’ posts |
Fired in includes/class-buddypress-member-blog-pro-calendar.php:430 · since 2.6.0
bpmb_checkbox_display_label
Section titled “bpmb_checkbox_display_label”Filters how a ticked option-less checkbox reads on the front end. Defaults to “Yes”/“No”. A site that words its yes/no fields differently (“Confirmed”, “Verified”) can say so without overriding the whole field.
add_filter( 'bpmb_checkbox_display_label', function ( $ticked, $ticked, $field, $post_id ) { return $ticked; }, 10, 4 );| Parameter | Type | Description |
|---|---|---|
$label |
string |
The word shown for this state |
$ticked |
bool |
Whether the member ticked the box |
$field |
array |
The field definition |
$post_id |
int |
Post being displayed |
Fired in includes/buddypress-member-blog-pro-custom-fields.php:1800 · since 4.0.2
bpmb_coauthor_backfill_batch
Section titled “bpmb_coauthor_backfill_batch”Filter the per-run backfill batch size.
add_filter( 'bpmb_coauthor_backfill_batch', function ( $arg1 ) { return $arg1; } );| Parameter | Type | Description |
|---|---|---|
$size |
int |
Posts processed per admin_init run. Default 50 |
Fired in includes/class-buddypress-member-blog-pro-coauthors.php:4178 · since 2.5.1
bpmb_coauthor_invitation_bp_notification
Section titled “bpmb_coauthor_invitation_bp_notification”Filters the formatted Co-Authors invitation/accept/decline BuddyPress notification, from the Coauthors module’s format_coauthor_notifications() callback (hooked to BP’s notifications component formatter). Fires from two call sites with DIFFERENT signatures depending on $format: when $format is ‘string’ the filtered value is an <a> HTML string and the extra args are ($notification_string, $notification_link); otherwise the filtered value is an array with ‘text’/‘link’ keys and the extra args are ($notification_link, $notification_string, $post_title). Check $format (or the shape of the first arg) before relying on arg order.
add_filter( 'bpmb_coauthor_invitation_bp_notification', function ( $notification_link, $notification_string, $notification_link ) { return $notification_link; }, 10, 3 );| Parameter | Type | Description |
|---|---|---|
$notification |
`string | array` |
$notification_string |
string |
Plain notification message text |
$notification_link |
string |
URL the notification links to |
Fired in includes/class-buddypress-member-blog-pro-coauthors.php:1544 and 1 other place · since 2.0.0
bpmb_coauthor_posts_limit
Section titled “bpmb_coauthor_posts_limit”Filter the maximum co-authored posts loaded for the dashboard tab. Bounds this request-time query so it never runs unbounded (numberposts => -1) for a prolific co-author. Default 200.
add_filter( 'bpmb_coauthor_posts_limit', function ( $arg1 ) { return $arg1; } );| Parameter | Type | Description |
|---|---|---|
$max |
int |
Maximum co-authored posts. Default 200 |
Fired in includes/class-buddypress-member-blog-pro-author-settings.php:1557 · since 2.5.1
bpmb_comment_notification_message
Section titled “bpmb_comment_notification_message”Filter the comment-notification email body.
add_filter( 'bpmb_comment_notification_message', function ( $message, $post, $comment ) { return $message; }, 10, 3 );| Parameter | Type | Description |
|---|---|---|
$message |
string |
Email body |
$post |
WP_Post |
The commented-on post |
$comment |
WP_Comment |
The comment |
Fired in includes/class-buddypress-member-blog-pro-notifications.php:1508 · since 2.5.1
bpmb_comment_notification_subject
Section titled “bpmb_comment_notification_subject”Filter the comment-notification email subject.
add_filter( 'bpmb_comment_notification_subject', function ( $subject, $post, $comment ) { return $subject; }, 10, 3 );| Parameter | Type | Description |
|---|---|---|
$subject |
string |
Email subject |
$post |
WP_Post |
The commented-on post |
$comment |
WP_Comment |
The comment |
Fired in includes/class-buddypress-member-blog-pro-notifications.php:1498 · since 2.5.1
bpmb_credit_deduct_amount
Section titled “bpmb_credit_deduct_amount”Filter the credit deduction amount. Allows developers to implement variable credit costs based on different criteria such as post categories, post types, user roles, member types, etc.
add_filter( 'bpmb_credit_deduct_amount', function ( $amount, $user_id, $type, $source, $reference ) { return $amount; }, 10, 5 );| Parameter | Type | Description |
|---|---|---|
$amount |
int |
The amount to deduct (default: 1) |
$user_id |
int |
The user ID |
$type |
string |
Transaction type: ‘post_used’, ‘admin_remove’, ‘refund’ |
$source |
string |
Source: ‘post’, ‘manual’, ‘woocommerce’, etc |
$reference |
string |
Reference ID (usually post_id for post_used type) |
Fired in includes/class-buddypress-member-blog-pro-post-credits.php:755 · since 2.2.1
bpmb_credit_purchase_url
Section titled “bpmb_credit_purchase_url”Filters the credit-pack purchase URL used as a fallback CTA link on the “no credits remaining” message (Post Credits module). Only consulted when the WooCommerce credits integration is active and credit packs exist; the admin-configured purchase_url setting takes priority over this filter’s result when both are set (see display_no_credits_message()). Empty by default — integrators return the URL of a page containing the credit-pack shortcode/product.
add_filter( 'bpmb_credit_purchase_url', function ( $arg1 ) { return $arg1; } );| Parameter | Type | Description |
|---|---|---|
$purchase_link |
string |
Purchase page URL, empty by default |
Fired in includes/class-buddypress-member-blog-pro-post-credits.php:1051 · since 2.0.0
bpmb_credits_user_bypassed
Section titled “bpmb_credits_user_bypassed”Filters whether a user bypasses the Post Credits balance check entirely. Defaults to true for users who can manage_options (admins) or edit_others_posts (editors) — they may always publish regardless of balance. A bypassed user is never charged and never blocked, so this is the primary integration point for exempting specific roles or memberships (e.g. an “unlimited” membership tier) from the credit gate.
add_filter( 'bpmb_credits_user_bypassed', function ( $bypassed, $user_id ) { return $bypassed; }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$bypassed |
bool |
Whether the user bypasses credit checks |
$user_id |
int |
User ID being checked |
Fired in includes/class-buddypress-member-blog-pro-post-credits.php:350 · since 2.0.0
bpmb_credits_zero_message
Section titled “bpmb_credits_zero_message”Filters the message shown to a member with zero post credits, on the balance notice rendered above the post submission form (Post Credits module). Defaults to the admin-configured zero_message setting. Output is passed through wp_kses_post() after filtering, so returned HTML is limited to post-safe tags.
add_filter( 'bpmb_credits_zero_message', function ( $settings ) { return $settings; } );| Parameter | Type | Description |
|---|---|---|
$zero_message |
string |
Message shown when the balance is zero or less |
Fired in includes/class-buddypress-member-blog-pro-post-credits.php:1161 · since 2.0.0
bpmb_custom_field_types
Section titled “bpmb_custom_field_types”Filters the renderable custom-field types.
add_filter( 'bpmb_custom_field_types', function ( $types ) { return $types; } );| Parameter | Type | Description |
|---|---|---|
$types |
string[] |
Field-type slugs |
Fired in includes/buddypress-member-blog-pro-custom-fields.php:231 · since 4.0.0
bpmb_denial_reason_icons
Section titled “bpmb_denial_reason_icons”add_filter( 'bpmb_denial_reason_icons', function ( $arg1 ) { return $arg1; } );Fired in includes/class-bp-member-blog-pro-access-control.php:1401
bpmb_enqueue_author_settings_assets
Section titled “bpmb_enqueue_author_settings_assets”Filters whether the Author Settings module’s CSS/JS assets are enqueued on the current request. By default the assets load when the [bp-member-blog-author-settings] or [member-blog-dashboard] shortcode is present on the queried post, or on the BuddyPress blog Settings subnav. Use this to force-enqueue on a custom template that doesn’t match those checks.
add_filter( 'bpmb_enqueue_author_settings_assets', function ( $should_enqueue ) { return $should_enqueue; } );| Parameter | Type | Description |
|---|---|---|
$should_enqueue |
bool |
Whether to enqueue the Author Settings assets |
Fired in includes/class-buddypress-member-blog-pro-author-settings.php:208 · since 2.0.0
bpmb_enqueue_calendar_assets
Section titled “bpmb_enqueue_calendar_assets”Filter whether calendar assets should load on the current page.
add_filter( 'bpmb_enqueue_calendar_assets', function ( $should_enqueue ) { return $should_enqueue; } );| Parameter | Type | Description |
|---|---|---|
$should_enqueue |
bool |
Whether to enqueue |
Fired in includes/class-buddypress-member-blog-pro-calendar.php:1441 · since 2.5.0
bpmb_enqueue_calendar_interactive
Section titled “bpmb_enqueue_calendar_interactive”Filter whether the interactive (flatpickr + drag/picker) calendar JS loads. The community view is read-only, so a page with ONLY community calendars skips this bundle. Defaults to true when a member calendar is present.
add_filter( 'bpmb_enqueue_calendar_interactive', function ( $has_interactive ) { return $has_interactive; } );| Parameter | Type | Description |
|---|---|---|
$has_interactive |
bool |
Whether to load the picker/drag JS |
Fired in includes/class-buddypress-member-blog-pro-calendar.php:1456 · since 2.6.0
bpmb_group_posts_query_args
Section titled “bpmb_group_posts_query_args”Filters the WP_Query args used to fetch a group’s linked blog posts. $query_args already scopes to the group’s member authors (via a direct user_id lookup against the group members table) and the bp_blog_pro_group_links postmeta. The Groups class hooks this itself (prioritize_featured_posts(), priority 10) to reorder featured posts to the top of the group listing.
add_filter( 'bpmb_group_posts_query_args', function ( $query_args, $group_id ) { return $query_args; }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$query_args |
array |
WP_Query arguments for the group posts query |
$group_id |
int |
ID of the BuddyPress group being viewed |
Fired in includes/class-buddypress-member-blog-pro-groups.php:2003 · since 2.0.0
bpmb_member_type_restrictions
Section titled “bpmb_member_type_restrictions”Filter member type restrictions.
add_filter( 'bpmb_member_type_restrictions', function ( $restrictions ) { return $restrictions; } );| Parameter | Type | Description |
|---|---|---|
$restrictions |
array |
Array of member type restrictions |
Fired in includes/class-buddypress-member-blog-pro-restrictions.php:886 · since 2.1.0
bpmb_module_requires
Section titled “bpmb_module_requires”Filters the map of Pro module keys to the platform capabilities they require. Consulted by bpmb_is_module_enabled() so a module that is toggled “on” in settings still degrades cleanly when the required capability (e.g. BuddyPress groups) isn’t provided by any active platform. Each value is an array of capability keys evaluated by Free’s bpmb_module_requirements_met().
add_filter( 'bpmb_module_requires', function ( $arg1 ) { return $arg1; } );| Parameter | Type | Description |
|---|---|---|
$requires |
array |
Map of module_key => array of required capability keys |
Fired in class-buddypress-member-blog-pro.php:1296 · since 4.0.0
bpmb_pro_denial_reasons
Section titled “bpmb_pro_denial_reasons”Filter the denial reasons array. Allows other extensions to add their own denial reasons.
add_filter( 'bpmb_pro_denial_reasons', function ( $this, $user_id ) { return $this; }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$denial_reasons |
array |
Array of denial reasons |
$user_id |
int |
User ID |
Fired in includes/class-bp-member-blog-pro-access-control.php:1074 · since 2.0.0
bpmb_pro_edd_item_id
Section titled “bpmb_pro_edd_item_id”Filter the EDD product ID for Pro.
add_filter( 'bpmb_pro_edd_item_id', function ( $arg1 ) { return $arg1; } );| Parameter | Type | Description |
|---|---|---|
$item_id |
int |
Product ID on wbcomdesigns.com |
Fired in edd-license/edd-plugin-license.php:78 · since 4.0.0
bpmb_pro_group_create_posts_activity_action
Section titled “bpmb_pro_group_create_posts_activity_action”Filters the formatted BuddyPress activity action string for “New post published in group” activity items (Groups module). Registered as the format callback for the bp_member_blog_pro_group_posts_activity_action activity type via bp_member_blog_pro_register_activity_actions(). $action already contains the built HTML sentence (“User posted a new post [title] in group [name]”).
add_filter( 'bpmb_pro_group_create_posts_activity_action', function ( $action ) { return $action; } );| Parameter | Type | Description |
|---|---|---|
$action |
string |
The formatted activity action HTML string |
Fired in includes/class-buddypress-member-blog-pro-groups.php:1077 · since 1.0.0
bpmb_scheduled_post_can_publish
Section titled “bpmb_scheduled_post_can_publish”Filter whether a scheduled post author is allowed to publish at cron time.
add_filter( 'bpmb_scheduled_post_can_publish', function ( $can_publish, $post_id, $author_id ) { return $can_publish; }, 10, 3 );| Parameter | Type | Description |
|---|---|---|
$can_publish |
bool |
Whether the author can publish |
$post_id |
int |
Post ID |
$author_id |
int |
Post author user ID |
Fired in includes/class-buddypress-member-blog-pro-scheduling.php:870 · since 2.5.0
bpmb_scheduled_posts_per_page
Section titled “bpmb_scheduled_posts_per_page”Filter how many scheduled posts are listed per page.
add_filter( 'bpmb_scheduled_posts_per_page', function ( $arg1 ) { return $arg1; } );| Parameter | Type | Description |
|---|---|---|
$per_page |
int |
Posts per page. Default 20 |
Fired in includes/class-buddypress-member-blog-pro-scheduling.php:1057 · since 4.0.0
bpmb_series_context_html
Section titled “bpmb_series_context_html”Filter the one-line series context shown above a series post. Return an empty string to remove it without touching the navigation.
add_filter( 'bpmb_series_context_html', function ( $html, $post_id, $series, $position ) { return $html; }, 10, 4 );| Parameter | Type | Description |
|---|---|---|
$html |
string |
The context markup |
$post_id |
int |
Post being displayed |
$series |
WP_Term |
The series term |
$position |
array |
{ ‘current’ => int, ‘total’ => int } |
Fired in includes/class-buddypress-member-blog-pro-series.php:1305 · since 4.0.2
bpmb_series_create_capability
Section titled “bpmb_series_create_capability”Capability required to create a series. Series are content taxonomies tied to post authorship – default to edit_posts, which authors/editors/admins have and subscribers do not.
add_filter( 'bpmb_series_create_capability', function ( $arg1 ) { return $arg1; } );| Parameter | Type | Description |
|---|---|---|
$capability |
string |
Required capability slug |
Fired in includes/class-buddypress-member-blog-pro-series.php:1971 · since 2.4.0
bpmb_series_landing_per_page
Section titled “bpmb_series_landing_per_page”Filter how many series posts are listed per page on the landing page.
add_filter( 'bpmb_series_landing_per_page', function ( $arg1 ) { return $arg1; } );| Parameter | Type | Description |
|---|---|---|
$per_page |
int |
Posts per page. Default 20 |
Fired in includes/class-buddypress-member-blog-pro-series.php:1588 · since 4.0.0
bpmb_series_max_posts
Section titled “bpmb_series_max_posts”Filter the maximum number of posts loaded for a single series. Series navigation, TOC and progress consume the whole set, so this is a high safety ceiling (not a display page size) that keeps the query bounded instead of running an unbounded posts_per_page => -1 on a pathologically large series.
add_filter( 'bpmb_series_max_posts', function ( $arg1 ) { return $arg1; } );| Parameter | Type | Description |
|---|---|---|
$max |
int |
Maximum posts per series. Default 500 |
Fired in includes/class-buddypress-member-blog-pro-series.php:872 · since 2.5.1
bpmb_series_selector_limit
Section titled “bpmb_series_selector_limit”Filter the cap on how many series are listed in a selector.
add_filter( 'bpmb_series_selector_limit', function ( $arg1 ) { return $arg1; } );| Parameter | Type | Description |
|---|---|---|
$max |
int |
Maximum series. Default 200 |
Fired in includes/class-buddypress-member-blog-pro-series.php:2333 · since 4.0.0
bpmb_user_can_link_post_to_group
Section titled “bpmb_user_can_link_post_to_group”This filter is documented below. */
add_filter( 'bpmb_user_can_link_post_to_group', function ( $arg1, $user_id, $selected_group ) { return $arg1; }, 10, 3 );Fired in includes/class-buddypress-member-blog-pro-groups.php:611 and 3 other places
bpmb_user_credit_balance
Section titled “bpmb_user_credit_balance”Filters the user’s post-credit balance as read from user meta (Post Credits module). $balance already reflects the stored self::META_BALANCE value (initialized to the configured opening balance on first read). Use this to source the balance from an external system instead of postmeta, or to apply a temporary adjustment for display.
add_filter( 'bpmb_user_credit_balance', function ( $balance, $user_id ) { return $balance; }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$balance |
int |
Current credit balance (may be negative when the |
$user_id |
int |
User ID the balance belongs to |
Fired in includes/class-buddypress-member-blog-pro-post-credits.php:410 · since 2.0.0
bpmb_user_scheduled_posts_limit
Section titled “bpmb_user_scheduled_posts_limit”Filter the maximum scheduled posts loaded for a user at once. Bounds the member-facing [bp-member-blog-scheduled] shortcode so it never runs an unbounded posts_per_page => -1 query for a user with many future posts. Default 100 (well above any realistic per-user queue).
add_filter( 'bpmb_user_scheduled_posts_limit', function ( $arg1 ) { return $arg1; } );| Parameter | Type | Description |
|---|---|---|
$max |
int |
Maximum scheduled posts. Default 100 |
Fired in includes/class-buddypress-member-blog-pro-scheduling.php:1013 · since 2.5.1
bpmb_user_series_limit
Section titled “bpmb_user_series_limit”Filter the cap on how many of a user’s series are loaded at once. This was unbounded. Every caller (the dashboard panel, the series-list shortcode) renders the whole set, so an author with a pathological number of series could pull every one of them into memory. A ceiling, not a page size.
add_filter( 'bpmb_user_series_limit', function ( $arg1 ) { return $arg1; } );| Parameter | Type | Description |
|---|---|---|
$max |
int |
Maximum series per user. Default 200 |
Fired in includes/class-buddypress-member-blog-pro-series.php:1022 · since 4.0.0
bpmb_view_milestones
Section titled “bpmb_view_milestones”Filter the view-count milestones that trigger an author notification.
add_filter( 'bpmb_view_milestones', function ( $arg1, $post_id ) { return $arg1; }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$milestones |
int[] |
Ordered list of view thresholds |
$post_id |
int |
The post being evaluated |
Fired in includes/class-buddypress-member-blog-pro-notifications.php:793 · since 2.6.0
bpmb_write_legacy_view_metas
Section titled “bpmb_write_legacy_view_metas”Filters whether the legacy serialized view metas are still written. Defaults to false once the indexed view store is live. Set true to keep _bpmb_views_history / _bpmb_traffic_sources populated for code that reads them directly — at the cost of 4 extra postmeta queries per pageview.
add_filter( 'bpmb_write_legacy_view_metas', function ( $store_ready ) { return $store_ready; } );| Parameter | Type | Description |
|---|---|---|
$write |
bool |
Whether to write the legacy metas |
Fired in includes/class-buddypress-member-blog-pro-analytics.php:334 · since 4.0.0
bpmbp_notification_content
Section titled “bpmbp_notification_content”Filters the final notification email/body content (Notifications module). $content is the admin-configured template with its merge tags already substituted ({site_name}, {blog_name}, {publisher_name}, {site_admin}). Used for post approval/rejection notification emails.
add_filter( 'bpmbp_notification_content', function ( $content, $notification_content, $blog_post ) { return $content; }, 10, 3 );| Parameter | Type | Description |
|---|---|---|
$content |
string |
Resolved notification body content |
$notification_content |
array |
Raw notification settings array this |
$blog_post |
WP_Post |
The member blog post the notification is about |
Fired in includes/class-buddypress-member-blog-pro-notifications.php:1361 · since 1.0.0
bpmbp_notification_subject
Section titled “bpmbp_notification_subject”Filters the final notification email subject line (Notifications module). $subject is the admin-configured template with the {site_name} tag already substituted. Used for post approval/rejection notification emails.
add_filter( 'bpmbp_notification_subject', function ( $subject, $notification_subject ) { return $subject; }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$subject |
string |
Resolved subject line |
$notification_subject |
array |
Raw notification settings array this |
Fired in includes/class-buddypress-member-blog-pro-notifications.php:1301 · since 1.0.0
bpmbp_rejection_reason
Section titled “bpmbp_rejection_reason”Filter the rejection reason shown to the author when their post is sent back. The core plugin never writes the bpmb_rejection_reason post meta, so this filter is the supported extension point for a site or moderation UI to supply a reason for the “Reason: %s” e-mail branch. Return an empty string to keep the generic, no-reason message.
add_filter( 'bpmbp_rejection_reason', function ( $reason, $post ) { return $reason; }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$reason |
string |
The rejection reason (empty when none was stored) |
$post_id |
int |
ID of the post that was rejected |
Fired in includes/class-buddypress-member-blog-pro-notifications.php:518 · since 2.6.0
bpmbpro_validation_errors
Section titled “bpmbpro_validation_errors”Filters the WP_Error object returned by the Pro post-submission form validator. Runs from buddypress_member_blog_pro_validate_form_data(), which extends Free’s title/content validation with the Custom Fields module’s required-field and number min/max checks. Fires here when the module is disabled (no custom field checks were run) and again at the end of the function when it is enabled. Integrators can add or remove WP_Error codes to change what blocks submission.
add_filter( 'bpmbpro_validation_errors', function ( $errors, $post_data, $arg3 ) { return $errors; }, 10, 3 );| Parameter | Type | Description |
|---|---|---|
$errors |
WP_Error |
Validation errors collected so far |
$post_data |
array |
Raw submitted post form data |
$custom_fields |
array |
Registered custom field definitions (empty here |
Fired in includes/buddypress-member-blog-pro-custom-fields.php:1227 and 1 other place · since 2.0.0
buddypress_member_blog_pro_plugin_locale
Section titled “buddypress_member_blog_pro_plugin_locale”Filters the locale used to load the WB Member Blog Pro translation file.
add_filter( 'buddypress_member_blog_pro_plugin_locale', function ( $arg1, $arg2 ) { return $arg1; }, 10, 2 );| Parameter | Type | Description |
|---|---|---|
$locale |
string |
The current site/user locale, from get_locale() |
$text_domain |
string |
The plugin’s text domain, ‘buddypress-member-blog-pro’ |
Fired in class-buddypress-member-blog-pro.php:696 · since 1.0.0
buddypress_member_blog_pro_should_load_assets
Section titled “buddypress_member_blog_pro_should_load_assets”add_filter( 'buddypress_member_blog_pro_should_load_assets', function ( $post, $post, $wp_query ) { return $post; }, 10, 3 );Fired in class-buddypress-member-blog-pro.php:591

