700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > WordPress 限制不同用户角色可上传的文件类型及大小

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

时间:2020-09-06 03:52:54

相关推荐

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

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 文件:

//禁止上传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 文件:

//只允许上传图片文件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 文件中,添加下面的代码:

//限制上传文件的最大体积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');}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。