Title: user_can_for_site
Published: November 13, 2024
Last modified: May 20, 2026

---

# user_can_for_site( int|WP_User $user, int $site_id, string $capability, mixed $args ): bool

## In this article

 * [Description](https://developer.wordpress.org/reference/functions/user_can_for_site/?output_format=md#description)
 * [Parameters](https://developer.wordpress.org/reference/functions/user_can_for_site/?output_format=md#parameters)
 * [Return](https://developer.wordpress.org/reference/functions/user_can_for_site/?output_format=md#return)
 * [Source](https://developer.wordpress.org/reference/functions/user_can_for_site/?output_format=md#source)
 * [Related](https://developer.wordpress.org/reference/functions/user_can_for_site/?output_format=md#related)
 * [Changelog](https://developer.wordpress.org/reference/functions/user_can_for_site/?output_format=md#changelog)

[ Back to top](https://developer.wordpress.org/reference/functions/user_can_for_site/?output_format=md#wp--skip-link--target)

Returns whether a particular user has the specified capability for a given site.

## 󠀁[Description](https://developer.wordpress.org/reference/functions/user_can_for_site/?output_format=md#description)󠁿

This function also accepts an ID of an object to check against if the capability
is a meta capability. Meta capabilities such as `edit_post` and `edit_user` are 
capabilities used by the `map_meta_cap()` function to map to primitive capabilities
that a user or role has, such as `edit_posts` and `edit_others_posts`.

Example usage:

    ```php
    user_can_for_site( $user->ID, $site_id, 'edit_posts' );
    user_can_for_site( $user->ID, $site_id, 'edit_post', $post->ID );
    user_can_for_site( $user->ID, $site_id, 'edit_post_meta', $post->ID, $meta_key );
    ```

## 󠀁[Parameters](https://developer.wordpress.org/reference/functions/user_can_for_site/?output_format=md#parameters)󠁿

 `$user`int|[WP_User](https://developer.wordpress.org/reference/classes/wp_user/)
required

User ID or object.

`$site_id`intrequired

Site ID.

`$capability`stringrequired

Capability name.

`$args`mixedoptional

Optional further parameters, typically starting with an object ID.

## 󠀁[Return](https://developer.wordpress.org/reference/functions/user_can_for_site/?output_format=md#return)󠁿

 bool Whether the user has the given capability.

## 󠀁[Source](https://developer.wordpress.org/reference/functions/user_can_for_site/?output_format=md#source)󠁿

    ```php
    function user_can_for_site( $user, $site_id, $capability, ...$args ) {
    	if ( ! is_object( $user ) ) {
    		$user = get_userdata( $user );
    	}

    	if ( empty( $user ) ) {
    		// User is logged out, create anonymous user object.
    		$user = new WP_User( 0 );
    		$user->init( new stdClass() );
    	}

    	// Check if the blog ID is valid.
    	if ( ! is_numeric( $site_id ) || $site_id <= 0 ) {
    		return false;
    	}

    	$switched = is_multisite() ? switch_to_blog( $site_id ) : false;

    	$can = user_can( $user->ID, $capability, ...$args );

    	if ( $switched ) {
    		restore_current_blog();
    	}

    	return $can;
    }
    ```

[View all references](https://developer.wordpress.org/reference/files/wp-includes/capabilities.php/)
[View on Trac](https://core.trac.wordpress.org/browser/tags/7.0/src/wp-includes/capabilities.php#L1045)
[View on GitHub](https://github.com/WordPress/wordpress-develop/blob/7.0/src/wp-includes/capabilities.php#L1045-L1070)

## 󠀁[Related](https://developer.wordpress.org/reference/functions/user_can_for_site/?output_format=md#related)󠁿

| Uses | Description | 
| [WP_User::__construct()](https://developer.wordpress.org/reference/classes/wp_user/__construct/)`wp-includes/class-wp-user.php` |

Constructor.

  | 
| [user_can()](https://developer.wordpress.org/reference/functions/user_can/)`wp-includes/capabilities.php` |

Returns whether a particular user has the specified capability.

  | 
| [switch_to_blog()](https://developer.wordpress.org/reference/functions/switch_to_blog/)`wp-includes/ms-blogs.php` |

Switches the current blog.

  | 
| [restore_current_blog()](https://developer.wordpress.org/reference/functions/restore_current_blog/)`wp-includes/ms-blogs.php` |

Restores the current blog, after calling [switch_to_blog()](https://developer.wordpress.org/reference/functions/switch_to_blog/) .

  | 
| [get_userdata()](https://developer.wordpress.org/reference/functions/get_userdata/)`wp-includes/pluggable.php` |

Retrieves user info by user ID.

  | 
| [is_multisite()](https://developer.wordpress.org/reference/functions/is_multisite/)`wp-includes/load.php` |

Determines whether Multisite is enabled.

  |

[Show 2 more](https://developer.wordpress.org/reference/functions/user_can_for_site/?output_format=md#)
[Show less](https://developer.wordpress.org/reference/functions/user_can_for_site/?output_format=md#)

## 󠀁[Changelog](https://developer.wordpress.org/reference/functions/user_can_for_site/?output_format=md#changelog)󠁿

| Version | Description | 
| [6.7.0](https://developer.wordpress.org/reference/since/6.7.0/) | Introduced. |

## User Contributed Notes

You must [log in](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Ffunctions%2Fuser_can_for_site%2F)
before being able to contribute a note or feedback.