Show content based on multiple user roles in WordP

2019-08-13 18:56发布

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

标签: php wordpress
1条回答
何必那么认真
2楼-- · 2019-08-13 19:33

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.

<?php 
    global $user_login, $current_user;
    get_currentuserinfo();
    $user_info = get_userdata($current_user->ID);
    $roles = array (
        'administrator',
        'subscriber',
    );

if (is_user_logged_in() && array_intersect( $roles, $user_info->roles)) {

echo 'success';

} else {

echo 'failure';

}
?>

Example 1: LINK the $roles array does not match.

Example 2: LINK the $roles array has one match.

查看更多
登录 后发表回答