Skip to content

Post to Group — Guidelines

Created 2026-05-04
Tags practice-platformbuddybossclaude-code-skillsforumcommunity

Guidelines for the /post-to-group Claude Code skill. This skill handles posting content to the BuddyBoss practice platform (practice.baseworks.com) via three distinct mechanisms.


The /post-to-group skill covers:

  1. Forum topic — creates a new topic in a bbPress forum (e.g., a session summary post in the study group forum)
  2. Forum reply — replies to an existing forum topic
  3. Group activity post — posts to the BuddyBoss group activity feed

Out of scope: Direct messages (BuddyBoss messages use a separate table and a separate skill when needed).


All content posted through this skill is outward-facing and must pass a voice compliance check before the confirmation gate. The check runs in Phase 1d of the skill workflow and covers:

  • Em dashes (—): zero allowed — replace with comma, period, colon, parentheses, or restructure
  • Exclamation marks: not allowed in professional or community contexts
  • Negative-framing openers: lead with what something IS, not what it isn’t
  • Banned phrases: “land on” / “lands on” as attention metaphors; unapproved metaphors
  • Result must be reported in the confirmation gate preview (clean or fixed with description)

This applies to forum topics, forum replies, and group activity posts equally.


A mandatory preview is shown before any database write. The preview includes the full post body (with @mention HTML visible), the target forum or group, the author, and the tag list. The user must type YES before the post is created. No exceptions.


The three mechanisms use different database tables and different WordPress APIs:

  • Forum topics and replies — stored in areb_posts (WordPress posts table) with post_type=topic or post_type=reply. Created via bbp_insert_topic() and bbp_insert_reply().
  • Group activity posts — stored in areb_bp_activity (BuddyBoss activity table). Created via bp_activity_add(). These are NOT WordPress posts and cannot be created with wp post create.

These rules were learned from failures during the Spring 2026 study group. They are enforced by the skill and must not be bypassed.

Never use wp_update_post() or wp post update on bbPress content

Section titled “Never use wp_update_post() or wp post update on bbPress content”

Both silently reset post_parent to 0, detaching the topic from its forum or the reply from its topic. The post appears to exist but is no longer accessible via the forum.

If a topic or reply needs to be edited after creation, use a direct UPDATE areb_posts SET post_content = '...' WHERE ID = N query — never wp_update_post().

@mentions must be in the content at creation time

Section titled “@mentions must be in the content at creation time”

BuddyBoss @mention notifications fire when the post is first created. If the @mention HTML is patched in afterward, no notification is sent — even if the HTML looks correct visually. Build the full content including @mention HTML before calling bbp_insert_topic() or bp_activity_add().

wp post term set without --by=id interprets numeric IDs as term names and creates new terms named after those numbers (e.g., a term literally named “702”). Always pass --by=id when setting topic-tag terms by their term_id.

Tags belong in the topic-tag taxonomy only. Including a “Tags:” summary line in the post body means it appears as visible text in the forum post. The skill never adds this line to the content.

Never call bbp_update_forum_topic_count() from CLI

Section titled “Never call bbp_update_forum_topic_count() from CLI”

The WPML icl_translations filter adds NOT IN clauses to WP_Query that cause this function to return 0 when called from the command line. The forum topic count corrects itself on the next user interaction. Calling this function from CLI leaves the count at 0 and makes the forum appear empty.

Never embed content captured from wp db query

Section titled “Never embed content captured from wp db query”

wp db query output includes a column header row and may embed literal \n characters. Capturing this output and using it as post content results in malformed posts. Build post content independently.

Always fire do_action(‘bp_groups_posted_update’, …) after bp_activity_add()

Section titled “Always fire do_action(‘bp_groups_posted_update’, …) after bp_activity_add()”

bp_activity_add() does NOT fire the bp_groups_posted_update action — only the UI posting path does. Without this action, group members subscribed to the group’s activity feed receive no in-app or email notification.

After bp_activity_add() succeeds and post_title is set, always fire:

do_action( 'bp_groups_posted_update', $content, $user_id, $group_id, $activity_id );

Parameters: post content (string), author user_id, group_id, activity_id. The notification handler bb_subscription_send_subscribe_group_notifications() hooks here at priority 11.

This action is now included in the skill’s group activity template (added 2026-05-14).

bbPress kses strips all heading tags — use strong instead

Section titled “bbPress kses strips all heading tags — use strong instead”

bbp_kses_allowed_tags() does not include h1 through h6. Any heading tags in topic or reply content are stripped at save time, leaving bare unstyled text. When converting markdown headings (##, ###) to HTML for a forum post, always use <strong> — never <h2> or <h3>.

This applies to both new posts and any direct DB update fixing existing content.

Always fire do_action(‘bbp_new_reply’, …) after bbp_insert_reply()

Section titled “Always fire do_action(‘bbp_new_reply’, …) after bbp_insert_reply()”

bbp_insert_reply() does NOT fire the bbp_new_reply action hook — only the form handler bbp_new_reply_handler() does. Without this action:

  • No activity record is created in areb_bp_activity
  • Topic subscribers receive no bb_forums_subscribed_reply notifications
  • The @mention notification pipeline does not fire

After bbp_insert_reply() succeeds and post_parent is fixed, always fire:

do_action( 'bbp_new_reply', $reply_id, $topic_id, $forum_id, array(), $author_id, false, 0 );

Parameters: reply_id, topic_id, forum_id, anonymous_data (empty array), author_id, is_edit (false), reply_to (0).

Forum subscriptions vs topic subscriptions

Section titled “Forum subscriptions vs topic subscriptions”

BuddyBoss has two subscription types:

  • Forum subscription (type=forum) — notifies when a new topic is created in the forum (bb_forums_subscribed_discussion)
  • Topic subscription (type=topic) — notifies when a new reply is posted to a topic (bb_forums_subscribed_reply)

Patrick and Asia are subscribed to the Primer Community forum (item_id=20019), which means they receive new-topic notifications but NOT reply notifications. To receive reply notifications, a user must subscribe to each individual topic.

Patrick and Asia’s topic subscriptions are managed in areb_bb_notifications_subscriptions. When a new topic is created in the Primer Community forum, subscribe Patrick and Asia to it by inserting a row with type='topic', item_id=$topic_id, secondary_item_id=$forum_id.


<span class="atwho-inserted"><a class='bp-suggestions-mention' data-bb-hp-profile='USER_ID' href='{{mention_user_id_USER_ID}}' rel='nofollow'>@login</a></span>

The href uses a template placeholder format {{mention_user_id_USER_ID}} — this is resolved by BuddyBoss at render time. The data-bb-hp-profile attribute triggers the notification.


Programforum_idgroup_id
Spring 2026 Study Group Montreal219295
Nameuser_idlogin
Patrick8patrick
Asia2asia
Nathalie Doré432nathalie.dore
Noémie Normandin433noemie.normandin
Elinor Fueter435elinor.fueter
Marta Stothers436marta.stothers
James Murray438james.murray
Caitlin Bartlett439caitlin.bartlett

When a session context is active (e.g., after /session-summary), the skill infers the correct forum and group IDs from the program. Otherwise, the user provides them.