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.
Need help implementing this?
We turn these playbooks into shipped features. Let us scope your roadmap and support your team.
Start a project conversation