bp_get_descendent_groups( int|bool $group_id = false, int|bool $user_id = false, string $context = 'normal' )

Get all groups that are descendants of a specific group.

Description

To return all descendent groups, leave the $user_id parameter empty. To return only those child groups visible to a specific user, specify a $user_id.

Parameters

$group_id

(int|bool) (Optional) ID of the group.

Default value: false

$user_id

(int|bool) (Optional) ID of a user to check group visibility for.

Default value: false

$context

(string) (Optional) See bp_include_group_by_context() for description.

Default value: 'normal'

Return

(array) Array of group objects.

Source

File: bp-groups/bp-groups-template.php

function bp_get_descendent_groups( $group_id = false, $user_id = false, $context = 'normal' ) {
	/*
	 * Passing a group id of 0 would find all top-level groups, which could be
	 * intentional. We only try to find the current group when the $group_id is false.
	 */
	if ( false === $group_id ) {
		$group_id = bp_get_current_group_id();
		if ( ! $group_id ) {
			// If we can't resolve the group_id, don't proceed with a zero value.
			return array();
		}
	}

	// Prepare the return set.
	$groups = array();
	// If a user ID has been specified, we filter hidden groups accordingly.
	$filter = ( false !== $user_id && ! bp_user_can( $user_id, 'bp_moderate' ) );

	// Start from the group specified.
	$parents = array( $group_id );
	$descendants = array();

	// We work down the tree until no new children are found.
	//while ( $parents ) {
		// Fetch all child groups.
		$child_args = array(
			'parent_id'   => $parents,
			'show_hidden' => true,
			'per_page'    => false,
			'page'        => false,
		);
		$children = groups_get_groups( $child_args );

		// Reset parents array to rebuild for next round.
		$parents = array();
		foreach ( $children['groups'] as $group ) {
			if ( $filter ) {
				if ( bp_include_group_by_context( $group, $user_id, $context ) ) {
					$groups[] = $group;
					$parents[] = $group->id;
				}
			} else {
				$groups[] = $group;
				$parents[] = $group->id;
			}
		}
	//}

	return $groups;
}

Changelog

Changelog
Version Description
BuddyBoss 1.0.0 Introduced.

Questions?

We're always happy to help with code or other questions you might have! Search our developer docs, contact support, or connect with our sales team.