Как исправить проблему с загрузкой файлов SVG в WordPress?

Почему моя загрузка SVG не удается, даже при установке плагина для загрузки? Получаю сообщение о том, что сервер не может обработать изображение из-за возможной перегрузки или недостатка ресурсов. Предложено попробовать загрузить изображение с размером не более 2560 пикселей. Как можно решить эту проблему?
  • 15 августа 2024 г. 13:23
Ответы на вопрос 2
Для исправления проблемы с загрузкой файлов SVG в WordPress, нужно сделать следующее:

1. Проверьте настройки вашего хостинга. Возможно, сервер ограничивает загрузку файлов большого размера или определенного типа. Обратитесь к провайдеру хостинга, чтобы уточнить это.

2. Попробуйте использовать специальный плагин для загрузки файлов SVG. Например, плагин "SVG Support" позволяет загружать и отображать файлы SVG в WordPress.

3. Если после установки плагина по-прежнему возникает ошибка, попробуйте изменить размер файла SVG. Уменьшите его размер до 2560 пикселей в ширину или высоту, как указано в сообщении об ошибке.

4. Убедитесь, что ваш файл SVG не содержит ошибок или некорректного кода. Попробуйте проверить файл в специализированной программе для редактирования векторной графики, например, Adobe Illustrator.

5. Если все вышеперечисленные методы не помогли, попробуйте загрузить файл SVG на другой сервер или платформу, чтобы убедиться, что проблема не связана с WordPress.

При выполнении этих шагов вы должны сможете успешно загрузить файл SVG в WordPress и отобразить его на вашем сайте.
Попробую в function.php 
<?php

add_filter( 'upload_mimes', 'svg_upload_allow' );

# Добавляет SVG в список разрешенных для загрузки файлов.
function svg_upload_allow( $mimes ) {
	$mimes['svg']  = 'image/svg+xml';

	return $mimes;
}

add_filter( 'wp_check_filetype_and_ext', 'fix_svg_mime_type', 10, 5 );

# Исправление MIME типа для SVG файлов.
function fix_svg_mime_type( $data, $file, $filename, $mimes, $real_mime = '' ){

	// WP 5.1 +
	if( version_compare( $GLOBALS['wp_version'], '5.1.0', '>=' ) ){
		$dosvg = in_array( $real_mime, [ 'image/svg', 'image/svg+xml' ] );
	}
	else {
		$dosvg = ( '.svg' === strtolower( substr( $filename, -4 ) ) );
	}

	// mime тип был обнулен, поправим его
	// а также проверим право пользователя
	if( $dosvg ){

		// разрешим
		if( current_user_can('manage_options') ){

			$data['ext']  = 'svg';
			$data['type'] = 'image/svg+xml';
		}
		// запретим
		else {
			$data['ext']  = false;
			$data['type'] = false;
		}

	}

	return $data;
}

# ограничиваем размер загружаемых файлов по типу
add_filter( 'wp_handle_sideload'.'_prefilter', 'check_file_upload_size' );
add_filter( 'wp_handle_upload'.'_prefilter', 'check_file_upload_size' );

function check_file_upload_size( $file ){

	// для SVG
	if( false !== strpos( $file['type'], 'image/svg+xml') ){
		$size_limit = 2048; // макс размер в KB
	}
	// для всех остальных картинок
	elseif( false !== strpos( $file['type'], 'image') ){
		$size_limit = 4096;
	}

	if( isset($size_limit) ){
		$size_limit *= 1024;
		if( intval($file['size']) > $size_limit )
			$file['error'] = 'ERROR: Размер этого типа файлов не может превышать '. size_format( $size_limit );
	}

	return $file;
}

PS По умолчанию, загрузка файлов svg в wordpress запрещена по соображениям безопасности. Связано это с тем, что SVG файлы представляют из себя не просто изображения, а конкретный код. Благодаря этому изображения на сайте весят гораздо меньше, но зато нет гарантии, что они не содержат вредоносный код.
Похожие вопросы