The current_user_can() WordPress PHP function is used to determine if the current user has a specific capability. It can also accept an object’s ID for checking meta capabilities such as ‘edit_post’ and ‘edit_user’. A meta capability maps to primitive capabilities like ‘edit_posts’ and ‘edit_others_posts’.
Usage
Here’s how you would typically use the current_user_can() function:
current_user_can( 'edit_posts' ); current_user_can( 'edit_post', $post->ID ); current_user_can( 'edit_post_meta', $post->ID, $meta_key );
Parameters
- $capability (string) – The name of the capability you want to check.
 - $args (mixed) – Optional additional parameters, generally starting with an object ID.
 
More information
See WordPress Developer Resources: current_user_can()
Please note that the current_user_can() function will always return true if the current user is a super admin, unless explicitly denied. It’s discouraged to check against specific roles instead of capabilities, as it may yield unreliable results.
Examples
Checking Roles
Here’s a way to check if the current user has one of several roles:
$user = wp_get_current_user();
$allowed_roles = array( 'editor', 'administrator', 'author' );
if ( array_intersect( $allowed_roles, $user->roles ) ) {
  // Code for allowed roles
}
Admin Bar Visibility
To hide the admin bar for users who can’t edit posts:
if ( !current_user_can( 'edit_posts' ) ) {
  show_admin_bar( false );
}
Restricting Non-Admin Access
To hide the admin bar from users without admin access:
if ( ! current_user_can( 'manage_options' ) ) {
  add_filter( 'show_admin_bar', '__return_false' );
}
Checking Post Edit Access
To check if a user can edit a specific post by ID:
if ( ! current_user_can( 'edit_post', $post_id ) ) {
  return false;
}
Capability Denial for Super Admins
Explicitly denying a capability for super admins:
add_filter( 'map_meta_cap', function( $caps, $cap ) {
  if ( 'some_capability' === $cap ) {
    $caps = array('do_not_allow');
  }
  return $caps;
}, 10, 2 );
In this example, the map_meta_cap filter is used to explicitly deny ‘some_capability’ for super admins.