欢迎光临
我们一直在努力

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

建站超值云服务器,限时71元/月

本文目录
[隐藏]

  • 1让用户拥有上传文件的权限
  • 2限制用户上传文件的类型
  • 3限制用户上传的文件大小
  • 4限制不同用户角色可上传的文件类型及大小

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

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

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

1
2
3
4
5
6
7
8
//允许用户投稿时上传文件
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');
}

//允许用户投稿时上传文件 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 默认允许上传的文件类型,打开WordPress的 /wp-includes/functions.php 文件,然后搜索 function wp_get_mime_types 定位到那里,你就会看到详细的文件类型:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
function wp_get_mime_types() {
	// Accepted MIME types are set here as PCRE unless provided.
	return apply_filters( 'mime_types', array(
	// Image formats
	'jpg|jpeg|jpe' => 'image/jpeg',
	'gif' => 'image/gif',
	'png' => 'image/png',
	'bmp' => 'image/bmp',
	'tif|tiff' => 'image/tiff',
	'ico' => 'image/x-icon',
	// Video formats
	'asf|asx|wax|wmv|wmx' => 'video/asf',
	'avi' => 'video/avi',
	'divx' => 'video/divx',
	'flv' => 'video/x-flv',
	'mov|qt' => 'video/quicktime',
	'mpeg|mpg|mpe' => 'video/mpeg',
	'mp4|m4v' => 'video/mp4',
	'ogv' => 'video/ogg',
	'mkv' => 'video/x-matroska',
	// Text formats
	'txt|asc|c|cc|h' => 'text/plain',
	'csv' => 'text/csv',
	'tsv' => 'text/tab-separated-values',
	'ics' => 'text/calendar',
	'rtx' => 'text/richtext',
	'css' => 'text/css',
	'htm|html' => 'text/html',
	// Audio formats
	'mp3|m4a|m4b' => 'audio/mpeg',
	'ra|ram' => 'audio/x-realaudio',
	'wav' => 'audio/wav',
	'ogg|oga' => 'audio/ogg',
	'mid|midi' => 'audio/midi',
	'wma' => 'audio/wma',
	'mka' => 'audio/x-matroska',
	// Misc application formats
	'rtf' => 'application/rtf',
	'js' => 'application/javascript',
	'pdf' => 'application/pdf',
	'swf' => 'application/x-shockwave-flash',
	'class' => 'application/java',
	'tar' => 'application/x-tar',
	'zip' => 'application/zip',
	'gz|gzip' => 'application/x-gzip',
	'rar' => 'application/rar',
	'7z' => 'application/x-7z-compressed',
	'exe' => 'application/x-msdownload',
	// MS Office formats
	'doc' => 'application/msword',
	'pot|pps|ppt' => 'application/vnd.ms-powerpoint',
	'wri' => 'application/vnd.ms-write',
	'xla|xls|xlt|xlw' => 'application/vnd.ms-excel',
	'mdb' => 'application/vnd.ms-access',
	'mpp' => 'application/vnd.ms-project',
	'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
	'docm' => 'application/vnd.ms-word.document.macroEnabled.12',
	'dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',
	'dotm' => 'application/vnd.ms-word.template.macroEnabled.12',
	'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
	'xlsm' => 'application/vnd.ms-excel.sheet.macroEnabled.12',
	'xlsb' => 'application/vnd.ms-excel.sheet.binary.macroEnabled.12',
	'xltx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',
	'xltm' => 'application/vnd.ms-excel.template.macroEnabled.12',
	'xlam' => 'application/vnd.ms-excel.addin.macroEnabled.12',
	'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
	'pptm' => 'application/vnd.ms-powerpoint.presentation.macroEnabled.12',
	'ppsx' => 'application/vnd.openxmlformats-officedocument.presentationml.slideshow',
	'ppsm' => 'application/vnd.ms-powerpoint.slideshow.macroEnabled.12',
	'potx' => 'application/vnd.openxmlformats-officedocument.presentationml.template',
	'potm' => 'application/vnd.ms-powerpoint.template.macroEnabled.12',
	'ppam' => 'application/vnd.ms-powerpoint.addin.macroEnabled.12',
	'sldx' => 'application/vnd.openxmlformats-officedocument.presentationml.slide',
	'sldm' => 'application/vnd.ms-powerpoint.slide.macroEnabled.12',
	'onetoc|onetoc2|onetmp|onepkg' => 'application/onenote',
	// OpenOffice formats
	'odt' => 'application/vnd.oasis.opendocument.text',
	'odp' => 'application/vnd.oasis.opendocument.presentation',
	'ods' => 'application/vnd.oasis.opendocument.spreadsheet',
	'odg' => 'application/vnd.oasis.opendocument.graphics',
	'odc' => 'application/vnd.oasis.opendocument.chart',
	'odb' => 'application/vnd.oasis.opendocument.database',
	'odf' => 'application/vnd.oasis.opendocument.formula',
	// WordPerfect formats
	'wp|wpd' => 'application/wordperfect',
	) );
}

function wp_get_mime_types() { // Accepted MIME types are set here as PCRE unless provided. return apply_filters( ‘mime_types’, array( // Image formats ‘jpg|jpeg|jpe’ => ‘image/jpeg’, ‘gif’ => ‘image/gif’, ‘png’ => ‘image/png’, ‘bmp’ => ‘image/bmp’, ‘tif|tiff’ => ‘image/tiff’, ‘ico’ => ‘image/x-icon’, // Video formats ‘asf|asx|wax|wmv|wmx’ => ‘video/asf’, ‘avi’ => ‘video/avi’, ‘divx’ => ‘video/divx’, ‘flv’ => ‘video/x-flv’, ‘mov|qt’ => ‘video/quicktime’, ‘mpeg|mpg|mpe’ => ‘video/mpeg’, ‘mp4|m4v’ => ‘video/mp4’, ‘ogv’ => ‘video/ogg’, ‘mkv’ => ‘video/x-matroska’, // Text formats ‘txt|asc|c|cc|h’ => ‘text/plain’, ‘csv’ => ‘text/csv’, ‘tsv’ => ‘text/tab-separated-values’, ‘ics’ => ‘text/calendar’, ‘rtx’ => ‘text/richtext’, ‘css’ => ‘text/css’, ‘htm|html’ => ‘text/html’, // Audio formats ‘mp3|m4a|m4b’ => ‘audio/mpeg’, ‘ra|ram’ => ‘audio/x-realaudio’, ‘wav’ => ‘audio/wav’, ‘ogg|oga’ => ‘audio/ogg’, ‘mid|midi’ => ‘audio/midi’, ‘wma’ => ‘audio/wma’, ‘mka’ => ‘audio/x-matroska’, // Misc application formats ‘rtf’ => ‘application/rtf’, ‘js’ => ‘application/javascript’, ‘pdf’ => ‘application/pdf’, ‘swf’ => ‘application/x-shockwave-flash’, ‘class’ => ‘application/java’, ‘tar’ => ‘application/x-tar’, ‘zip’ => ‘application/zip’, ‘gz|gzip’ => ‘application/x-gzip’, ‘rar’ => ‘application/rar’, ‘7z’ => ‘application/x-7z-compressed’, ‘exe’ => ‘application/x-msdownload’, // MS Office formats ‘doc’ => ‘application/msword’, ‘pot|pps|ppt’ => ‘application/vnd.ms-powerpoint’, ‘wri’ => ‘application/vnd.ms-write’, ‘xla|xls|xlt|xlw’ => ‘application/vnd.ms-excel’, ‘mdb’ => ‘application/vnd.ms-access’, ‘mpp’ => ‘application/vnd.ms-project’, ‘docx’ => ‘application/vnd.openxmlformats-officedocument.wordprocessingml.document’, ‘docm’ => ‘application/vnd.ms-word.document.macroEnabled.12’, ‘dotx’ => ‘application/vnd.openxmlformats-officedocument.wordprocessingml.template’, ‘dotm’ => ‘application/vnd.ms-word.template.macroEnabled.12’, ‘xlsx’ => ‘application/vnd.openxmlformats-officedocument.spreadsheetml.sheet’, ‘xlsm’ => ‘application/vnd.ms-excel.sheet.macroEnabled.12’, ‘xlsb’ => ‘application/vnd.ms-excel.sheet.binary.macroEnabled.12’, ‘xltx’ => ‘application/vnd.openxmlformats-officedocument.spreadsheetml.template’, ‘xltm’ => ‘application/vnd.ms-excel.template.macroEnabled.12’, ‘xlam’ => ‘application/vnd.ms-excel.addin.macroEnabled.12’, ‘pptx’ => ‘application/vnd.openxmlformats-officedocument.presentationml.presentation’, ‘pptm’ => ‘application/vnd.ms-powerpoint.presentation.macroEnabled.12’, ‘ppsx’ => ‘application/vnd.openxmlformats-officedocument.presentationml.slideshow’, ‘ppsm’ => ‘application/vnd.ms-powerpoint.slideshow.macroEnabled.12’, ‘potx’ => ‘application/vnd.openxmlformats-officedocument.presentationml.template’, ‘potm’ => ‘application/vnd.ms-powerpoint.template.macroEnabled.12’, ‘ppam’ => ‘application/vnd.ms-powerpoint.addin.macroEnabled.12’, ‘sldx’ => ‘application/vnd.openxmlformats-officedocument.presentationml.slide’, ‘sldm’ => ‘application/vnd.ms-powerpoint.slide.macroEnabled.12’, ‘onetoc|onetoc2|onetmp|onepkg’ => ‘application/onenote’, // OpenOffice formats ‘odt’ => ‘application/vnd.oasis.opendocument.text’, ‘odp’ => ‘application/vnd.oasis.opendocument.presentation’, ‘ods’ => ‘application/vnd.oasis.opendocument.spreadsheet’, ‘odg’ => ‘application/vnd.oasis.opendocument.graphics’, ‘odc’ => ‘application/vnd.oasis.opendocument.chart’, ‘odb’ => ‘application/vnd.oasis.opendocument.database’, ‘odf’ => ‘application/vnd.oasis.opendocument.formula’, // WordPerfect formats ‘wp|wpd’ => ‘application/wordperfect’, ) ); }

=> 的前面为格式,后面为格式描述。如果你要禁止上传其中的某些类型,可以参考下面的例子:

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

1
2
3
4
5
6
7
8
9
10
11
12
//禁止上传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;
 
}

//禁止上传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; }

如果你还要禁止更多,可以按照 unset ($existing_mimes[‘格式’]);  样例添加即可。

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

1
2
3
4
5
6
7
8
9
10
11
12
//只允许上传图片文件
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;
 
}

//只允许上传图片文件 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; }

如果你还要允许上传其他格式,重复使用 $existing_mimes[‘格式’]=’描述’;  即可。

限制用户上传的文件大小

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

1
2
3
4
5
6
7
8
//限制上传文件的最大体积
function max_up_size() {
 
return 500*1024; // 500 kb
 
}
 
add_filter('upload_size_limit', 'max_up_size');

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

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

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
//不同用户上传的类型
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');
 
}

//不同用户上传的类型 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如何判断登录用户的角色》

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » WordPress 限制不同用户角色可上传的文件类型及大小
分享到: 更多 (0)