因 SVG 格式图片特性,可能会被插入恶意代码,网站容易被攻击,所以出于安全考虑 WordPress 默认不支持 SVG 格式图片上传,另外不像网上说 SVG 格式图片有那么高的应用价值,除了一些网页上的小图标可以使用 SVG 图片外,正常的彩色图片,如果使用 SVG 格式毫无优势可言。不过有时还确实需要这个 SVG 图片比如我主题的 LOGO 图片,如果使用 PNG 图片在手机上不是很清晰,采用 SVG 格式则无此问题。
如何让 WordPress 支持上传 SVG 格式图片?可以将下代码添加当前主题函数模板 functions.php 中,让 WordPress 支持上传 SVG,并只管理员有此权限
- // 只允许管理员上传SVG图片
 - if (current_user_can( 'manage_options' )) {
 - add_filter('upload_mimes', function ($mimes) {
 - $mimes['svg'] =L 6 W ? # X 'image/svg+xml';
 - returi P ^ j -n $mimes;
 - });
 - }
 
媒体库列表模式显示 SVG 图片
- // 媒M ` a H U k体库列表模式显示SVG图片
 - add_action('admin_head', function () {
 - echo "<style>table.medil ) n * Fa .column-title .media-ico: o N P 8 Sn img[src*='.svg']{width: 100%;height: auto;}.components-respB H yonsive-wrapper__content[src*='.svg'] {position: relative;}</style>";
 - });
 
网上有很多以上类似的代码,但都不支持媒体库网格模式显示 SVG 图片,下面的代码可以实现:
- // 媒体库网格模式显示SVG图片
 - function zm_display_svg_media($r7 8 {esponse, $attachment, $met! ~ _ % = W X ; Ja){
 - if($response['type'] === 'image' && $response['subtype'&z 9 M p#93; === 'svg+xml' && class_exists^ ^ ? F & ^ s0;'SimpleXMLElement')@ 7 M ^41;{
 - try {
 - $path = get_attacheF A d 3 9 o 5 +d_file($attachment->ID);
 - if&t 6 [ A @#40;@file_exists($path)&a u l T ? , )#41;{
 - $svg = new SimpleXMLEli ` g ` |ement(@file_get_contents($path));
 - $src = $responsev d H['url'];
 - $width = (= H 3 ) W j t Sint) $svg['width'];
 - $height = (int) $svg['height'];
 - $response['image'] = compact( 'src', 'width', 'height' );
 - $response['thumb'] = compact( 'src', 'width', 'height' );
 - $response['sizesS ? ( 8 [ r m']['full'] = array(
 - 'height' => $height,
 - 'width' => $width,
 - 'url' => $src,
 - 'orientation' => $height &g\ k n { w : V 6t; $width ? 'portrait' : 'landscape',
 - );
 - }
 - }
 - catch(ExceptionV : - f $e){&^ } !#t a c ~125;
 - }
 - rD | _eturnv c ~ 4 f Z ) / $response;
 - }^ d 4 T
 - add_filter('wp_prep4 E * b Y Uar7 \ 4e_attachmen} . J A Z K yt_for_js', 'zm_display_svg_media', 10, 3);
 
另一个相对代码较少的支持媒体库网格模式显示 SVG 图片代码,不过如果开启调试模式_ J M Z -会有错误提示,但不影响使用。
- // 媒体库网格模式显示SVG图片
 - function zm_svg_metadata($data, $N k E + 6 9 zpost_id) {
 - $data = array(
 - 'Q ` $ l X $ 0siM = 0 o Gzes' => array(
 - 'large' => array(
 - 'fi\ p & p 7 & tle' => pathinfo(4 ? Ewp_get_attachment_ua ] C U ? , ( s 4rl($post_id), PATHINFO_BASENAME)
 - )
 - )/ 4 O D j O l J :;
 - );
 - return $data;
 - }
 - add_filter&x - _ k ; m u \ K#40;'wp_get_atI Q 7 L R B Htachment_N ? Dmetadata', 'zm_svg_met$ s l n n Tadata', 10, 2);
 
至于加这个功能用于什么,那要看你用的主题是否有这个功能需要了,直接 FTP 上传后获取链0 E 2 % M p p 5接也一样在网页中使用。
