Skip to content

Hook Reference

Generated from source. Do not edit this file by hand — run php bin/generate-hooks-reference.php and it rebuilds from what the code actually fires. If a hook below has no description, add a docblock above the do_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.


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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//blog/ got a hard 404 — even though the posts it lists are published, publicly readable at their own permalinks, and expected to be indexable. We were 404ing the index of public content. The tab is registered whenever the platform provides member profiles; the screen itself only ever lists 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

add_filter( 'bpmb_denial_reason_icons', function ( $arg1 ) { return $arg1; } );

Fired in includes/class-bp-member-blog-pro-access-control.php:1401

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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