인터넷 브라우저가 발전함에 따라 웹 사이트를 코딩 할 때 SVGS를 사용하는 것이 더욱 편리해졌습니다. 특히 아이콘과 PNG로 대체 할 수있는 간단한 그래픽 및 아이콘에 적합합니다.
워드 프레스는 거의 SVGS를 지원하는 것 같습니다. 나는 거의 이유 때문에 :
기본적으로 워드 프레스에서 허용되는 파일 형식이 아닙니다. SVG를 업로드하기 전에 추가해야합니다
미디어 갤러리에서 SVG 썸네일을 볼 수 없습니다. (아래 이미지 참조)
때로는 미디어 추가 버튼을 통해 편집기에 추가 할 때 편집기에서 svg 크기를 알 수 없으므로 svg를 이미지로 추가하더라도 너비와 높이가 0입니다.
미디어 업로드 팝업 내에서 "이미지 편집"을 클릭하면 "이미지가 없습니다"라는 메시지가 나타납니다. 아래 이미지를 참조하십시오.
이 목록의 항목 1에는 문제가 없지만 수정 항목 2 3 및 4를 어떻게 알아낼 수 있습니까?
항목 1에 대한 업데이트 :
SVG와 같은 새로운 MIME 유형을 허용하려면 functions.php에 후크를 추가하면됩니다.
function allow_new_mime_type($mimes) {
$mimes['svg'] = 'image/svg+xml';
return $mimes;
}
add_filter( 'mime_types', 'allow_new_mime_type' );
이제 SVG를 업로드 할 수 있어야합니다. 이 튜토리얼 에서 추가 정보를 찾을 수 있습니다 . 이것은 이전에 언급했듯이 나에게 문제가되지 않는 항목 1 만 해결합니다 (기본적으로 허용되어야한다고 생각하지만).
항목 2에 대한 업데이트 :
첨부 파일이 이미지인지 여부를 결정하는 기능을 파고 추적했습니다. 그것은 모두 wp-includes / post.php 에서이 기능에 해당되는 것으로 보입니다.
/**
* Check if the attachment is an image.
*
* @since 2.1.0
*
* @param int $post_id Attachment ID
* @return bool
*/
function wp_attachment_is_image( $post_id = 0 ) {
$post_id = (int) $post_id;
if ( !$post = get_post( $post_id ) )
return false;
if ( !$file = get_attached_file( $post->ID ) )
return false;
$ext = preg_match('/\.([^.]+)$/', $file, $matches) ? strtolower($matches[1]) : false;
$image_exts = array( 'jpg', 'jpeg', 'jpe', 'gif', 'png' );
if ( 'image/' == substr($post->post_mime_type, 0, 6) || $ext && 'import' == $post->post_mime_type && in_array($ext, $image_exts) )
return true;
return false;
}
보시다시피이 함수에는 유효한 이미지 확장 배열이 정의되어 있습니다. 해당 배열을 수정하는 데 사용할 수있는 필터가 없습니다. 그러나 그것은 시작입니다 ...
왜 마지막 if 문이 svgs에 대해 false를 반환하는지 잘 모르겠습니다. svg 확장자를 $ image_exts 배열에 추가하지 않더라도 첫 번째 조건은 true를 반환해야합니까?
if ( 'image/' == substr($post->post_mime_type, 0, 6)
이는 'image /'가 MIME 유형의 첫 6 자 (예 : svg의 경우 image / svg + xml)인지 확인합니다 (처음 6 개는 "image /"임).
최신 정보
추가 조사 결과 문제는 wp_attachment_is_image에 전혀 문제가 없지만 SVG가 업로드 될 때 이미지 크기 (너비 및 높이)가 첨부 파일 메타 데이터에 추가되지 않기 때문입니다. 사용 된 이미지를 계산하는 함수는 PHP의 getimagesize () 함수이기 때문에 SVG의 이미지 크기를 반환하지 않습니다. getimagesize 함수와 svgs의 동작에 대한 stackoverflow에 대한 답변을 찾았습니다. 여기를 참조하십시오.