---
title: pp_get_groups_for_user
description: "``` /** * Retrieve groups for a specified user * @param int user_id * @param string agent_type * @param array args : * - cols ('all' | 'id') * - status ('active' | 'scheduled' | 'expired' | 'any') * -…"
url: "https://publishpress.com/knowledge-base/pp-get-groups-for-user/"
updated: "2025-05-06"
category: PublishPress Permissions / Developer
---

# pp_get_groups_for_user

```
/**
 * Retrieve groups for a specified user

 * @param int user_id
 * @param string agent_type
 * @param array args :
 *   - cols ('all' | 'id')
 *   - status ('active' | 'scheduled' | 'expired' | 'any')
 *   - metagroup_type (default null)
 *   - force_refresh (default false)
 * @return array (object or storage date string, with group id as array key)
 */
function pp_get_groups_for_user( $user_id, $agent_type = 'pp_group', $args = array() )
```

## Example usage

```
$user_id = '321';

// get this user's custom groups and WP role metagroups
$user_groups = pp_get_groups_for_user( $user_id );
$user_group_ids = array_keys( $user_groups );

// get this user's custom groups, excluding metagroups but including scheduled and expired memberships
$user_custom_groups = pp_get_groups_for_user( $user_id, 'pp_group', array( 'metagroup_type' => '', 'status' => 'any' ) );
$user_custom_group_ids = array_keys( $user_custom_groups );

// get this user's custom network groups
$user_net_groups = pp_get_groups_for_user( $user_id, 'pp_net_group' );
$user_net_group_ids = array_keys( $user_net_groups );
```

## Notes

- If you are retrieving groups for the currently logged user using non-default $args, it may be necessary to also include force_refresh => true in the arguments array to override internal caching.
- scheduled and expired statuses require the PP Membership extension.
