@thesirvlad

Что делать если не загружаются svg wordpress?

Гружу любые svg, с маленьким размером, разрешением ничего не помогает. Поставил также плагин для загрузки svg. Все равно не помогает.
Сервер не может обработать изображение, возможно он перегружен или недостаточно ресурсов для завершения задачи. Возможно поможет загрузка меньшего размера изображения. Рекомендуемый максимальный размер - 2560 пикселов.
  • Вопрос задан
  • 107 просмотров
Решения вопроса 1
@thesirvlad Автор вопроса
Исправил таким образом:
sudo apt install php-xml
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
@Kypidon4ik
Фрилансер, Wordpress developer
Попробую в 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 файлы представляют из себя не просто изображения, а конкретный код. Благодаря этому изображения на сайте весят гораздо меньше, но зато нет гарантии, что они не содержат вредоносный код.
Ответ написан
@maksam07
Какой вы плагин использовали? Пробовали этот?
https://en-gb.wordpress.org/plugins/safe-svg/
Ответ написан
re-alter
@re-alter
// _ AppSec // Bug Bounty / Legal Hacking
Привет.

Во-первых, дело не в формате изображения. Во-вторых, стоит заглянуть в лог ошибок PHP (или дебаг WordPress), чтобы не играть в угадайку. В-третьих, скорее всего эта ошибка приведёт к конфигу веб-сервера или, с меньшей долей вероятности, к конфигу PHP, так что ковырять файлы активной темы смысла особого нет.

Иногда подобная ошибка лечится таким способом (добавлять в functions.php):
function hs_image_editor_default_to_gd( $editors ) {
	$gd_editor = 'WP_Image_Editor_GD';
	$editors = array_diff( $editors, array( $gd_editor ) );
	array_unshift( $editors, $gd_editor );
	return $editors;
}
add_filter( 'wp_image_editors', 'hs_image_editor_default_to_gd' );

З.Ы.: добавлять формат SVG в список разрешённых форматов собственноручно я бы не советовал из-за вопросов безопасности. Если так нужно грузить через админпанель этот тип файлов, то делай это с помощью специальных плагинов, которые во время загрузки SVG обеспечат санитизацию.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы