8 min read
Step-by-Step Guide to Adding Status Updates in BuddyPress
Status updates are the heartbeat of a BuddyPress community: the short “what’s new” posts that land in the activity stream and give members a reason to come back. BuddyPress ships with everything needed to post them, but the feature is easy to leave half-configured, and there is a second kind of status (a one-line mood or headline next to the member’s name) that core does not offer at all. This guide walks through both, from the settings screen to the code you would use to post updates programmatically.
Two things people mean by “status update”

Before touching settings, decide which of these you are after, because they are built differently.
- Activity updates. The post form at the top of the activity stream (“What’s new, Sarah?”). Each update is an activity item of type
activity_update, appears in the sitewide, profile and group streams, and supports comments, favourites and @mentions. This is core BuddyPress. - Profile status lines. A short current status (“Out of office until Monday”, “Feeling excited”) shown beside the member’s name in the profile header and members directory, sometimes with an emoji or mood. BuddyPress core does not have this; you add it with a plugin.
Most sites want the first. Communities modelled on older social networks, or workplace intranets where availability matters, often want both.
Enabling activity updates in BuddyPress

These steps assume BuddyPress 14.x (14.5.2 is current as of August 2026) on WordPress 6.1 or later. The screens are the same on 12.x and 13.x.
- Go to Settings → BuddyPress → Components and tick Activity Streams. Save. Without this component there is no update form anywhere.
- Still under Settings → BuddyPress, open the Options tab. In the Activity section you will find:
- Post Comments: allow activity stream commenting on posts and comments. Leave on unless you want a quiet feed.
- Activity auto-refresh: polls for new items and shows a “Load Newest” bar. Turn it off on very busy sites to cut admin-ajax load.
- Akismet: if the Akismet plugin is active, activity updates are checked for spam. Worth enabling on any open-registration site.
- Open Settings → BuddyPress → Pages (on 12.x and later this is handled through the BP Rewrites screens, but the Activity directory page still needs to exist). Make sure an Activity directory page is assigned; BuddyPress creates one on activation.
- Check the template pack under Options → Template Pack. BP Nouveau is the default and the one with the modern post form (placeholder text, “Post in” selector for profile or group, and an @mention autocomplete). BP Legacy still works but is frozen.
- Visit
/activity/while logged in. The update form should appear at the top. If you only see the stream and no form, you are either logged out, or a theme template override is hiding it (see troubleshooting).
That is the whole core setup. Members can now post from the sitewide activity page, their own profile’s Activity tab, and any group’s Activity tab (group updates are visible according to the group’s privacy setting).
Controlling who sees what
Activity updates are visible to logged-in members by default, and the sitewide stream is publicly readable unless you restrict it. A few common adjustments:
- Hide the sitewide feed from visitors. Add a small plugin or mu-plugin that redirects logged-out users away from the activity directory:
add_action( 'bp_template_redirect', function () { if ( bp_is_activity_directory() && ! is_user_logged_in() ) { wp_safe_redirect( wp_login_url( bp_get_activity_directory_permalink() ) ); exit; } } ); - Limit what shows in the feed. By default the stream mixes updates with new-member, friendship, group-join and blog-post items, which can drown out the human posts. The free BuddyPress Activity Filter lets an admin tick which activity types appear, without code.
- Let members fix typos. Core has no edit button for updates. BuddyPress Edit Activity adds one with a configurable time window, which cuts down on delete-and-repost noise.
Putting the update form somewhere other than the activity page
A common request is a status box on the home page, a member dashboard, or a sidebar. Options, in rough order of effort:
- Blocks. BuddyPress ships activity blocks (Latest Activities, Sitewide Activity) that display the feed. They do not include the post form as of 14.x.
- Shortcodes. The free Shortcodes for BuddyPress plugin provides an activity shortcode that renders the stream, with the post form for logged-in users, inside any page or widget area. This is the quickest route for non-developers.
- Template part. In a child theme, load the Nouveau post form directly:
<?php if ( is_user_logged_in() && bp_is_active( 'activity' ) ) { bp_get_template_part( 'activity/post-form' ); } ?>The form needs the activity JavaScript enqueued, which happens automatically on BuddyPress pages. On a non-BP page you may also need
bp_nouveau()->activity->enqueue_scripts()or to hook intobp_enqueue_scripts.
Posting status updates with code
Developers often need to create updates from elsewhere: a custom form, a REST request, a cron job that posts a daily prompt, or an integration that mirrors content from another system. The function is bp_activity_post_update(), and it takes care of action strings, @mention parsing and the activity_update type for you.
$activity_id = bp_activity_post_update( array(
'content' => 'Welcome to the Monday check-in. What are you working on this week?',
'user_id' => 1, // the member who "posts" it
'error_type' => 'wp_error', // return WP_Error on failure instead of false
) );
if ( is_wp_error( $activity_id ) ) {
error_log( $activity_id->get_error_message() );
}
For a group update, use groups_post_update() with a group_id. For any other kind of activity item (a custom type from your plugin, say), use the lower-level bp_activity_add(), which requires you to pass component, type and action yourself and to register an action string with bp_activity_set_action() so the item renders properly.
To react when a member posts (send a notification, award points, sync to Slack), hook bp_activity_posted_update:
add_action( 'bp_activity_posted_update', function ( $content, $user_id, $activity_id ) {
// $content is the raw update text.
}, 10, 3 );
The BP REST API also exposes updates at POST /wp-json/buddypress/v2/activity with a content field and type: activity_update, authenticated with a nonce or application password. That is the route to take for a mobile app or a headless front end.
Adding a profile status line

If what you want is the short status beside a member’s name, the approach is different because core has nowhere to store or display it. You have three routes.
| Route | Effort | What you get |
|---|---|---|
| xProfile field | 10 minutes, no code | A “Current status” text field on the profile. Members edit it under Profile → Edit. It shows in the profile fields list, not in the header or directory, unless you add template code. |
| Custom user meta plus template override | A few hours | Full control over storage and display. You write the form, the AJAX save, the escaping and the output in the header and directory templates. |
| BuddyPress Status plugin | 15 minutes | A 140-character status with emoji picker and optional mood, shown in the profile header and truncated in the members directory; status history per member; admin-curated suggested statuses. Posting with a feeling also tags an activity item. |
The xProfile route is fine for a quick test. To show that field in the header, add this to a child theme’s buddypress/members/single/member-header.php override:
<?php
$status = xprofile_get_field_data( 'Current status', bp_displayed_user_id() );
if ( $status ) {
echo '<p class="member-status">' . esc_html( $status ) . '</p>';
}
?>
If you want emoji, moods, history and a directory display without maintaining template overrides through BuddyPress and theme updates, the plugin route pays for itself quickly. Its settings live under WB Plugins → BuddyPress Status, where you choose which roles may set a status and whether it appears in the directory.
Troubleshooting
The update form does not appear
Check, in order: the Activity component is enabled; you are logged in; the theme is not overriding activity/post-form.php with an old Legacy template. Switch to a default theme for a moment. If the form appears, the issue is in your theme’s buddypress/ folder.
Posting does nothing or shows “There was a problem posting your update”
This is almost always a JavaScript or AJAX failure. Open the browser console and watch the admin-ajax.php request when you click Post Update. A 403 usually means a security plugin or WAF blocking the request; a 500 points to a PHP error in a plugin hooked to bp_activity_posted_update. Caching plugins that cache admin-ajax responses or strip nonces cause the same symptom.
Updates appear but without the member’s name in the action
The action string is generated at display time by a registered callback. If a custom type was added with bp_activity_add() but never registered with bp_activity_set_action(), the item renders bare. Register the action on bp_register_activity_actions.
Duplicate updates on double-click
Nouveau disables the button while the request is in flight, but a slow server can still produce duplicates. Either throttle on the server side (compare the last update’s content and time for that user in bp_activity_posted_update) or improve the response time of whatever runs on that hook.
Frequently asked questions
Can members attach images or videos to status updates?
Not in core. Media attachments come from add-ons; BuddyX Pro and Reign include a media component, and several third-party media plugins exist. Link previews for pasted URLs are also an add-on.
How do I change the “What’s new” placeholder text?
Filter bp_nouveau_get_activity_post_form_placeholder (Nouveau) and return your own string. You can vary it by context with bp_is_group() if group posts should prompt differently.
Can updates be scheduled or pinned?
Core posts immediately and sorts strictly by date. Scheduling and pinning are both solved by small plugins: BuddyPress Sticky Post pins an update to the top of the feed, and there is a separate schedule-activity add-on for timed posts.
Does this work with BuddyBoss Platform?
BuddyBoss forked BuddyPress and kept the same function names for activity (bp_activity_post_update(), bp_activity_add(), the same hooks), so the code samples above work. The settings screens and template paths differ.
Where to start
Turn on the Activity component, switch to Nouveau, post a test update and comment on it. Then decide whether the feed needs filtering, whether members need an edit button, and whether a profile status line is worth adding. Do those in that order; a clean, active feed does more for a community than any single extra feature. If you are building a community from scratch, a theme made for BuddyPress such as BuddyX styles the post form and stream properly out of the box, which saves a day of CSS before you have written a line.
Related reading
- ai Moderation Wordpress Wpmediaverse
- Jetonomy And Paid Memberships Pro Gating Your Community by Membership Level
- Introducing Eventonomy Wordpress Events Plugin
- Community Events Wordpress
- Buddynext 1 0 4 What it Takes to Ship a Community Platform People Actually Join
- Online Community Shouldnt Get Slower as it Grows