Dynamic Web Lab
Back to insights

Set a maximum upload count for users on a specific user role

October 27, 20131 min read

Use the following code to limit 10 upload for specific role
[php]
add_filter( ‘wp_handle_upload_prefilter’, ‘limit_uploads_for_user_roles’ );

function limit_uploads_for_user_roles( $file ) {
$user = wp_get_current_user();
// add the role you want to limit in the array
$limit_roles = array(‘contributor’);
$filtered = apply_filters( ‘limit_uploads_for_roles’, $limit_roles, $user );
if ( array_intersect( $limit_roles, $user->roles ) ) {
$upload_count = get_user_meta( $user->ID, ‘upload_count’, true ) ? : 0;
$limit = apply_filters( ‘limit_uploads_for_user_roles_limit’, 10, $user, $upload_count, $file );
if ( ( $upload_count + 1 ) > $limit ) {
$file[‘error’] = __(‘Upload limit has been reached for this account!’, ‘yourtxtdomain’);
} else {
update_user_meta( $user->ID, ‘upload_count’, $upload_count + 1 );
}
}
return $file;
}
[/php]

This action will fire when user delete attachment

[php]
add_action(‘delete_attachment’, ‘decrease_limit_uploads_for_user’);

function decrease_limit_uploads_for_user( $id ) {
$user = wp_get_current_user();
// add the role you want to limit in the array
$limit_roles = array(‘contributor’);
$filtered = apply_filters( ‘limit_uploads_for_roles’, $limit_roles, $user );
if ( array_intersect( $limit_roles, $user->roles ) ) {
$post = get_post( $id);
if ( $post->post_author != $user->ID ) return;
$count = get_user_meta( $user->ID, ‘upload_count’, true ) ? : 0;
if ( $count ) update_user_meta( $user->ID, ‘upload_count’, $count – 1 );
}
}
[/php]

Thanks Giuseppe

Writer

Dynamic Web Lab Editorial

We share how we design, engineer, and scale digital products across the GCC, Europe, and the US.

Share this article

Need help implementing this?

We turn these playbooks into shipped features. Let us scope your roadmap and support your team.

Start a project conversation