Multisite: One Community on the Main Site
BuddyNext overviewFree + ProGet BuddyNext →
How BuddyNext behaves on a WordPress network, and what themes and partner plugins should rely on.
Overview / Contract
Section titled “Overview / Contract”| Fact | Detail |
|---|---|
| Where the community lives | The network’s main site. One community per network. |
| Activation | Network Activate only (Network: true). |
| Other sites | BuddyNext defines nothing on them except buddynext_is_community_site(). No constants, classes, functions, routes, tables or options. |
| Who is a member | A user with a role on the main site. Network users join on their first community write action. |
Detect BuddyNext
Section titled “Detect BuddyNext”// Is BuddyNext loaded on this request?if ( defined( 'BUDDYNEXT_VERSION' ) || class_exists( \BuddyNext\Core\Plugin::class ) ) { // Safe to call BuddyNext functions.}
// Is this the site that runs the community?if ( buddynext_is_community_site() ) { // A single site, or the main site of a network.}buddynext_is_community_site() is public API. It is always defined, on every site, and returns ! is_multisite() || is_main_site(). On a subsite, defined( 'BUDDYNEXT_VERSION' ) is false, so a theme or partner that detects BuddyNext that way behaves as if it were not installed.
Member scope for your own queries
Section titled “Member scope for your own queries”The users table is shared by the whole network. When you list or count members with a raw query, restrict it to the community:
$where = buddynext_member_scope_sql( 'u.ID', ' AND ' ); // '' on a single site.WP_User_Query already limits to the current site and needs nothing.
Removing a member
Section titled “Removing a member”Use buddynext_remove_member( $user_id, $actor_id ). It always removes the community data. On a network it deletes the account only when the person belongs to no other site and the actor is the member, a system job (actor 0) or a user allowed to delete users.
Events that fire while a site is switched
Section titled “Events that fire while a site is switched”Content listeners (posts, comments) do nothing when the current site is not the community site, so switch_to_blog() plus a publish never reaches BuddyNext’s tables. User listeners keep running because user data is network-wide. If your plugin switches sites and fires user events, expect BuddyNext to react to them as it would on the main site.
Related hooks
Section titled “Related hooks”| Hook | When |
|---|---|
buddynext_network_user_joined (action, int $user_id) |
A network user has just become a member through their first action. Sign-up listeners (search index, onboarding, auto-join, welcome, webhook) hook this. |

