So the problem with either post meta or user meta is that if your key is e.g. _group_members_value_key
you only have one item of data per user or per post in which to store the data, and you need many items for each user and many items for each post. This is two columns of data, but in the meta tables you only have one.
Let’s say you have this data:
User ID | Group Id
1 | 10
1 | 20
1 | 30
2 | 10
2 | 40
3 | 30
To put this in e.g. usermeta for user 1 you have these choices:
user id | meta_key | value
1 | "_group_members_value_key" | "10,20,30"
Or:
user id | meta_key | value
1 | "_group_members_value_key_10" | "yes"
1 | "_group_members_value_key_10" | "yes"
1 | "_group_members_value_key_10" | "yes"
Note in the second case you have to put the group ID as part of the key.
So perhaps this second solution works for you – just add the group id to the key and use some extra logic like:
To put a user in a group:
update_user_meta($userId, "_group_members_value_key_" . $groupId, "yes")
To remove a user from a group:
update_user_meta($userId, "_group_members_value_key_" . $groupId, "no")
To check if a user is in a group:
if (get_user_meta($userId, "_group_members_value_key_" . $groupId) == "yes") {
Find all the users in a group:
$user_query = new WP_User_Query( array( 'meta_key' => "_group_members_value_key_" . $groupId, 'meta_value' => 'yes' ) );
I’m not sure if this works for what you want to do though. Let me know. These are code examples so you may have to edit them a bit for exactly what you need but this data structure should work for what you need.
It looks like $_POST['group_members_field']
will be an array, so if for example it was post ID’s you need to do something like:
foreach($_POST['group_members_field'] as $postId) {
update_user_meta($someUserId, '_group_members_value_key'.$postId, "yes");
}