WordPress 限制不同用户角色可上传的文件类型及大小

开放注册的WordPress站点,一般都会根据不同等级的用户角色来赋予不同的权限。文件上传功能就是一个比较常用的功能,那么,如何限制不同用户角色可上传的文件类型及大小呢?

让用户拥有上传文件的权限

默认情况下,有些用户是不允许上传文件的,你可以在主题的 functions.php 添加下面的代码:

//允许用户投稿时上传文件
if ( current_user_can('contributor') && !current_user_can('upload_files') )
 add_action('admin_init', 'allow_contributor_uploads');
 
 function allow_contributor_uploads() {
 $contributor = get_role('contributor');
 $contributor->add_cap('upload_files');
}

上面的代码就是给 'contributor' 这个用户角色添加了 'upload_files' (上传文件)的权限。

限制用户上传文件的类型

WordPress 默认允许上传的文件类型

将下面的代码添加到主题的 functions.php 文件:

//禁止上传avi和mp4格式的文件
 
add_filter('upload_mimes', 'custom_upload_mimes');
 
function custom_upload_mimes ( $existing_mimes=array() ) {
 
unset ($existing_mimes['avi']);
unset ($existing_mimes['mp4']);
 
return $existing_mimes;
 
}

如果你仅仅只需要允许用户上传几种类型而已,还可以通过下面的更简洁的方法,代码添加到主题的 functions.php 文件:

//只允许上传图片文件
 add_filter('upload_mimes', 'custom_upload_mimes');
function custom_upload_mimes ( $existing_mimes=array() ) {
unset ($existing_mimes);//禁止上传任何文件
$existing_mimes['jpg|jpeg|gif|png']='image/image';//允许用户上传jpg,gif,png文件
return $existing_mimes;
}

限制用户上传的文件大小

同样在主题的 functions.php 文件中,添加下面的代码:

//限制上传文件的最大体积
function max_up_size() {
 return 500*1024; // 500 kb
 }
 
add_filter('upload_size_limit', 'max_up_size');

上面的例子是限制所有用户上传的文件的最大体积为 500 kb (1M =1024*1024)。

注意:主机空间和WordPress本身一般设置了允许上传的文件的最大体积,所以在这里设置需要考虑到这点。

限制不同用户角色可上传的文件类型及大小

其实上面已经给出了限制类型和大小的方法,要根据不同用户角色来限制,只需要添加角色判断代码即可。倡萌举个综合的例子:

//不同用户上传的类型
function custom_upload_mimes ( $existing_mimes=array() ) {
 
 unset ($existing_mimes);//禁止上传任何文件
 
 if( current_user_can( 'publish_posts' ) && !current_user_can( 'publish_pages' ) ) {
 
 //允许作者(Author)上传的类型
 $existing_mimes['jpg|jpeg|gif|png']='image/image';//允许用户上传jpg,gif,png文件
 $existing_mimes['zip']='application/zip'; //允许用户上传zip压缩包
 $existing_mimes['pdf']='application/pdf'; //允许用户上传pdf文件
 
 }elseif( current_user_can( 'edit_posts' ) && !current_user_can( 'publish_posts' ) ) {
 
 //允许投稿者(Contributor)上传的类型
 $existing_mimes['jpg|jpeg|gif|png']='image/image';
 $existing_mimes['pdf']='application/pdf'; 
 
 }else{
 
 //其他用户角色上传的类型
 $existing_mimes['jpg|jpeg|gif|png']='image/image';
 
 }
 
 return $existing_mimes;
 
}
 
//不同用户上传的大小
function max_up_size() {
 
 if( current_user_can( 'publish_posts' ) && !current_user_can( 'publish_pages' ) ) {
 
 return 2048*1024; // 允许作者(Author)上传 2M
 
 }elseif( current_user_can( 'edit_posts' ) && !current_user_can( 'publish_posts' ) ) {
 
 return 1024*1024; // 允许投稿者(Contributor)上传 1M
 
 }else{
 
 return 500*1024; // 其他用户角色上传 500 kb
 
 }
 
}
 
//只对非管理员执行这两个函数(即:对管理员不生效)
if( !current_user_can( 'manage_options' ) ) {
 
 add_filter('upload_mimes', 'custom_upload_mimes');
 add_filter('upload_size_limit', 'max_up_size');
 
}

大家只要灵活使用 if 语句判断不同的角色赋予不同的权限即可,关于用户角色的判断,请阅读《WordPress如何判断登录用户的角色》

原文来自:http://www.wpdaxue.com/wordpress-existing_mimes-upload_size_limit.html