Roles in wordpress are case sensitive, I used the lowercase text for the same.
Your function must return a value.
add_filter('insert_user_meta', function ($meta, $user, $update) {
if (true !== $update) return $meta;
//Check 'email_subscriber' meta-key for the user
$email_subscriber_meta = get_user_meta($user, 'email_subscriber', true);
// Check the user if it is subscribed by meta-value if checkbox value is something else replace 1 with that value
$is_email_subscriber = !empty($email_subscriber_meta) && $email_subscriber_meta === '1';
if ($is_email_subscriber) {
// Add the role incase itdoesn't exist
if (!in_array('email_subscriber', $user->roles)) {
$user->add_role('email_subscriber');
}
} else {
// Remove the role if it exists
if (in_array('email_subscriber', $user->roles)) {
$user->remove_role('email_subscriber');
}
}
return $meta;
}, 10, 3);