首頁  >  文章  >  CMS教程  >  如何讓WordPress支援上傳SVG格式圖片並顯示在媒體庫中

如何讓WordPress支援上傳SVG格式圖片並顯示在媒體庫中

藏色散人
藏色散人轉載
2020-12-09 13:53:052528瀏覽

以下由WordPress教學欄位介紹讓WordPress支援上傳SVG格式圖片並顯示在媒體庫中的方法,希望對需要的朋友有所幫助!

如何讓WordPress支援上傳SVG格式圖片並顯示在媒體庫中

因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'] = 'image/svg+xml';
return $mimes;
});
}

媒體庫清單模式顯示SVG圖片

r​​rreee

網路上有很多以上類似的程式碼,但都不支援媒體庫網格模式顯示SVG圖片,下面的程式碼可以實現:

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

另一個相對程式碼較少的支援媒體庫網格模式顯示SVG圖片程式碼,不過若開啟偵錯模式會有錯誤提示,但不影響使用。

// 媒体库网格模式显示SVG图片
function zm_display_svg_media($response, $attachment, $meta){
if($response[&#39;type&#39;] === &#39;image&#39; && $response[&#39;subtype&#39;] === &#39;svg+xml&#39; && class_exists(&#39;SimpleXMLElement&#39;)){
try {
$path = get_attached_file($attachment->ID);
if(@file_exists($path)){
$svg                = new SimpleXMLElement(@file_get_contents($path));
$src                = $response[&#39;url&#39;];
$width              = (int) $svg[&#39;width&#39;];
$height             = (int) $svg[&#39;height&#39;];
$response[&#39;image&#39;]  = compact( &#39;src&#39;, &#39;width&#39;, &#39;height&#39; );
$response[&#39;thumb&#39;]  = compact( &#39;src&#39;, &#39;width&#39;, &#39;height&#39; );
 
$response[&#39;sizes&#39;][&#39;full&#39;] = array(
&#39;height&#39;        => $height,
&#39;width&#39;         => $width,
&#39;url&#39;           => $src,
&#39;orientation&#39;   => $height > $width ? &#39;portrait&#39; : &#39;landscape&#39;,
);
}
}
catch(Exception $e){}
}
return $response;
}
add_filter(&#39;wp_prepare_attachment_for_js&#39;, &#39;zm_display_svg_media&#39;, 10, 3);

至於加這個功能用於什麼,那要看你用的主​​題是否有這個功能需要了,直接FTP上傳後獲取連結也一樣在網頁中使用。

嫌折騰程式碼麻煩,可以使用下面的相關外掛程式:

// 媒体库网格模式显示SVG图片
function zm_svg_metadata($data, $post_id) {
$data = array(
&#39;sizes&#39; => array(
&#39;large&#39; => array(
&#39;file&#39; => pathinfo(wp_get_attachment_url($post_id), PATHINFO_BASENAME)
)
)
);
return $data;
}
add_filter(&#39;wp_get_attachment_metadata&#39;, &#39;zm_svg_metadata&#39;, 10, 2);

 

 

#

以上是如何讓WordPress支援上傳SVG格式圖片並顯示在媒體庫中的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:zmingcx.com。如有侵權,請聯絡admin@php.cn刪除