I am looking to display content based on multiple different user roles.
The aim is to display content for two or three different user roles, and then block it for other user roles, displaying a message that it is only for certain logged in users.
So far, I have the following:
<?php
global $user_login, $current_user;
get_currentuserinfo();
$user_info = get_userdata($current_user->ID);
$roles = array (
'administrator',
'subscriber',
);
if (is_user_logged_in() && in_array( $roles, $user_info->roles)) {
//content here
} else {
// they aren't logged in, so show them the login form
}
?>
At the moment, the issue I am having seems to be that the code is looking for both the administrator and subscriber roles at the same time and as a result, the if statement is not satisfied and the login form shows.
If I change $roles to 'administrator' or 'subscriber', it then works fine.
So, how would I search through the array to display either role, not all of them.
Thanks
You could use: array_intersect (link)
array_intersect will check between two array to see if the needle (
$roles
) exists in the haystack ($user_info->roles
). I have tested this against my own and works well.See below the use of
array_intersect
.Example 1: LINK the
$roles
array does not match.Example 2: LINK the
$roles
array has one match.