WordPress支持上传SVG图片并显示在媒体库中

创客云

因SVG格式图片特性,可能会被插入恶意代码,网站容易被攻击,所以出于安全考虑WordPress默认不支持SVG格式图片上传,另外不像网上说SVG格式图片有那么高的应用价值,除了一些网页上的小图标可以使用SVG图片外,正常的彩色图片,如果使用SVG格式毫无优势可言。不过有时还确实需要这个SVG图片比如我主题的LOGO图片,如果使用PNG图片在手机上不是很清晰,采用SVG格式则无此问题。

如何让WordPress支持上传SVG格式图片?可以将下代码添加当前主题函数模板functions.php中,让WordPress支持上传SVG,并只管理员有此权限

  1.     // 只允许管理员上传SVG图片
  2.     if (current_user_can( 'manage_options' )) {
  3.     	add_filter('upload_mimes', function ($mimes) {
  4.     		$mimes['svg'] = 'image/svg+xml';
  5.     		return $mimes;
  6.     	});
  7.     }

媒体库列表模式显示SVG图片

  1.     // 媒体库列表模式显示SVG图片
  2.     add_action('admin_head', function () {
  3.     	echo "<style>table.media .column-title .media-icon img[src*='.svg']{width: 100%;height: auto;}.components-responsive-wrapper__content[src*='.svg'] {position: relative;}</style>";
  4.     });

网上有很多以上类似的代码,但都不支持媒体库网格模式显示SVG图片,下面的代码可以实现:

  1.     // 媒体库网格模式显示SVG图片
  2.     function zm_display_svg_media($response, $attachment, $meta){
  3.     	if($response['type'] === 'image' && $response['subtype'] === 'svg+xml' && class_exists('SimpleXMLElement')){
  4.     		try {
  5.     			$path = get_attached_file($attachment->ID);
  6.     			if(@file_exists($path)){
  7.     				$svg                = new SimpleXMLElement(@file_get_contents($path));
  8.     				$src                = $response['url'];
  9.     				$width              = (int) $svg['width'];
  10.     				$height             = (int) $svg['height'];
  11.     				$response['image']  = compact( 'src', 'width', 'height' );
  12.     				$response['thumb']  = compact( 'src', 'width', 'height' );
  13.  
  14.     				$response['sizes']['full'] = array(
  15.     					'height'        => $height,
  16.     					'width'         => $width,
  17.     					'url'           => $src,
  18.     					'orientation'   => $height > $width ? 'portrait' : 'landscape',
  19.     				);
  20.     			}
  21.     		}
  22.     		catch(Exception $e){}
  23.     	}
  24.     	return $response;
  25.     }
  26.     add_filter('wp_prepare_attachment_for_js', 'zm_display_svg_media', 10, 3);

另一个相对代码较少的支持媒体库网格模式显示SVG图片代码,不过如果开启调试模式会有错误提示,但不影响使用。

  1.     // 媒体库网格模式显示SVG图片
  2.     function zm_svg_metadata($data, $post_id) {
  3.     	$data = array(
  4.     		'sizes' => array(
  5.     			'large' => array(
  6.     				'file' => pathinfo(wp_get_attachment_url($post_id), PATHINFO_BASENAME)
  7.     			)
  8.     		)
  9.     	);
  10.     	return $data;
  11.     }
  12.     add_filter('wp_get_attachment_metadata', 'zm_svg_metadata', 10, 2);

至于加这个功能用于什么,那要看你用的主题是否有这个功能需要了,直接FTP上传后获取链接也一样在网页中使用。

本文来源知更鸟,经授权后由CityMall发布,观点不代表创客云的立场,转载请联系原作者。
云模板

发表评论

热销模板

高端信息技术产品展示DedeCMS织梦中英文模板

Envato

本站承接 WordPress / DedeCMS / ThinkPHP 等
系统建站、仿站、开发、定制等业务!