自WordPress3.5版本开始,隐藏了后台媒体设置页面的“默认上传路径和文件的完整URL地址”选项,可以通过下面的代码将该选项调出来。WordPress自定义文件上传路径的方法。
将下面的代码添加到当前主题functions.php文件中,就可以调出该选项:
if(get_option('upload_path')=='wp-content/uploads' || get_option('upload_path')==null) {
update_option('upload_path',WP_CONTENT_DIR.'/uploads');
}注:该代码使用后删除即可,不用保留在主题中。
如果遇到:WordPress 遇到“抱歉,您无权上传此文件类型”如何解决。可以试下下面的方法解决。
让WordPress支持上传更多文件类型:
图片:.jpg .png .gif .jpeg .ico
文件:.pdf .doc .ppt .odt .xls .psd
音频:.mp3 .m4a .ogg .wav
视频:.mp4 .mov .avi .mpg .ogv .3gp .3g2
可以在functions.php中这样写:
add_filter('upload_mimes', 'wpdit_filter_mime_types');
function wpdit_filter_mime_types($mimes)
{
$mimes['ttf'] = 'font/ttf';
$mimes['woff'] = 'font/woff';
$mimes['svg'] = 'font/svg';
$mimes['eot'] = 'font/eot';
$mimes['json']= 'text/plain';
$mimes['zip'] = 'application/zip';
$mimes['gif'] = 'image/gif';
$mimes['png'] = 'image/png';
$mimes['mp4'] = 'video/mp4';
// 下载是禁止上传的文件类型
unset( $mimes['exe'] );
return $mimes;
}允许上传指定文件类型:
使用插件上传某些自定义文件类型,这样更安全。比如 WP Extra File Types,这款插件更新比较频繁,兼容最新版本 WordPress。
WordPress 遇到不允许上传的文件类型,有多种解决方案,比较合适且安全的是使用插件来解决。其实还有一个更直接的方法,就是 ftp上传文件到 /wp-content/uploads/ 目录中,这种方法直接、粗暴、有效。
大家可以先了解一下 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;
}如果你仅仅只需要允许用户上传几种类型而已,还可以通过下面的更简洁的方法,代码添加到主题的 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)。
限制不同用户角色可上传的文件类型及大小
其实上面已经给出了限制类型和大小的方法,要根据不同用户角色来限制,只需要添加角色判断代码即可。小编举个综合的例子:
举个综合的例子:
//不同用户上传的类型
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 语句判断不同的角色赋予不同的权限即可。
让用户拥有上传文件的权限
默认情况下,有些用户是不允许上传文件的,你可以在主题的 functions.php 添加下面的代码:
默认情况下,有些用户是不允许上传文件的,你可以在主题的 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' (上传文件)的权限。
加入特定代码:
由于我function.php文件中并没有application函数,因此以下内容仅供参考,效果未知:
wordpress添加自定义上传附件类型添加rar支持
在wp-includes/functions.php文件中查找application/zip,在“// openoffice formats”这行的上面加上
‘rar’ => ‘application/rar’,
参考:农业经网