WordPress设置允许上传SVG图片【非安装插件】

WordPress不允许上传SVG图片。”抱歉,由于安全原因,这个文件类型不受支持。”

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

【WP低版本】

function add_file_types_to_uploads( $file_types ){
if (current_user_can(‘administrator’)) {
$file_types[‘svg’] = ‘image/svg+xml’;
}
return $file_types;
}
add_action(‘upload_mimes’, ‘add_file_types_to_uploads’);

function year_shortcode () {
$year = date_i18n (‘Y’);
return $year;
}
add_shortcode (‘year’, ‘year_shortcode’);

【WP最新版本】

/**
* 允许WordPress和Elementor上传SVG文件
*/
function allow_svg_upload( $mimes ) {
$mimes[‘svg’] = ‘image/svg+xml’;
$mimes[‘svgz’] = ‘image/svg+xml’;
return $mimes;
}
add_filter( ‘upload_mimes’, ‘allow_svg_upload’ );

/**
* 修复WordPress媒体库中SVG的缩略图显示问题
*/
function fix_svg_thumbnail_display( $response ) {
if ( $response[‘mime’] === ‘image/svg+xml’ ) {
$response[‘sizes’] = array(
‘thumbnail’ => array(
‘url’ => $response[‘url’],
‘width’ => $response[‘width’],
‘height’ => $response[‘height’]
),
‘medium’ => array(
‘url’ => $response[‘url’],
‘width’ => $response[‘width’],
‘height’ => $response[‘height’]
),
‘large’ => array(
‘url’ => $response[‘url’],
‘width’ => $response[‘width’],
‘height’ => $response[‘height’]
),
‘full’ => array(
‘url’ => $response[‘url’],
‘width’ => $response[‘width’],
‘height’ => $response[‘height’]
)
);
}
return $response;
}
add_filter( ‘wp_prepare_attachment_for_js’, ‘fix_svg_thumbnail_display’ );

/**
* 添加SVG安全检查
*/
function check_svg_security( $file ) {
if ( $file[‘type’] === ‘image/svg+xml’ ) {
// 读取上传的SVG文件
$content = file_get_contents( $file[‘tmp_name’] );

// 检查潜在的恶意代码
$suspicious_content = array(
‘script’,
‘onclick’,
‘onload’,
‘onunload’,
‘onerror’,
‘javascript:’,
‘xlink:href’,
‘data:’,
‘fetch’,
‘eval’,
‘alert’
);

foreach ( $suspicious_content as $pattern ) {
if ( stripos( $content, $pattern ) !== false ) {
$file[‘error’] = ‘出于安全原因,您的SVG文件中包含不允许的内容。’;
break;
}
}
}
return $file;
}
add_filter( ‘wp_handle_upload_prefilter’, ‘check_svg_security’ );

/**
* 特别针对Elementor启用SVG上传
*/
function elementor_allow_svg_upload($mimes) {
return array_merge($mimes, [
‘svg’ => ‘image/svg+xml’,
‘svgz’ => ‘image/svg+xml’
]);
}
add_filter(‘elementor/files/allow_unfiltered_upload’, ‘__return_true’);
add_filter(‘elementor/files/svgs/allow_upload’, ‘__return_true’);
add_filter(‘elementor/files/svg_mime_types’, ‘elementor_allow_svg_upload’);

/**
* 增强SVG文件处理安全性
*/
function ensure_svg_file_safety($data, $file, $filename, $mimes) {
// 如果没有检测到文件类型,但文件扩展名是SVG
if (!empty($data[‘ext’]) && $data[‘ext’] === ‘svg’) {
$data[‘type’] = ‘image/svg+xml’;
$data[‘proper_filename’] = $filename;
}

return $data;
}
add_filter(‘wp_check_filetype_and_ext’, ‘ensure_svg_file_safety’, 10, 4);

0
分享到: