Skip to Content
Go Back
안형우

안녕하세요. 14년차 풀스택 웹개발자 안형우입니다. 이 블로그에서는 WordPress, PHP, CSS, 사용성, 리눅스 서버 등 풀스택 웹개발에서 마주하는 다양한 문제 상황과 해결책, 필요한 개념들을 다룹니다. 👉 소개


작업물

📌 CSS가 어려운 이유 — 프로젝트 중심 실전 CSS 강의 소개 2023-04-13
📌 워드프레스, 답답한 빌더와 플러그인 대신 시원하게 커스터마징하기(강의) 2023-01-15
📌 아무도 말하지 않는 PHP의 좋은 점 2018-10-13
📌 유지보수하기 쉬운 CSS 전략(슬라이드) 2016-12-20
📌 워드프레스 테마에서 템플릿 파일 매칭 순서 2013-05-12
📌 [번역] CSS 코드 냄새 2013-01-01

[워드프레스] 이미지 썸네일 만들어서 URL 가져오는 함수

워드프레스는 썸네일이 없는 경우 그냥 전체 사이즈 이미지를 리턴한다. 그러면 한 2000픽셀짜리 이미지를 HTML에서 100px로 렌더링하는 비극적인 사태가 벌어진다. 이미지 썸네일 목록이라면 한 페이지에서 30MB를 다운로드하게 될 지도 모른다.

그러니 그런 사태를 방지하기 위해서는 HTML에서 보여 줄 사이즈에 딱 맞는 썸네일을 서버에서 생성한 뒤 URL을 돌려 줘야 한다. 그걸 해 주는 함수다. 인자값은 첨부파일의 $post_id(워드프레스에선 첨부파일 정보도 post 테이블에 저장된다.), 원하는 너비와 높이다.

function mytory_get_thumb_src($attachment_id, $width, $height){
    $filepath = get_attached_file($attachment_id);
    $upload_path = wp_upload_dir();
    $basedir = $upload_path['basedir'];

    // filepath가 $basedir까지 포함하고 있는 경우가 있음.
    $filepath = str_replace($basedir, '', $filepath);
    $fullpath = $basedir . $filepath;
    if( ! is_file($fullpath)){
        return FALSE;
    }
    $pathinfo = pathinfo($fullpath);
    $new_fullpath = $pathinfo['dirname'] . '/' . $pathinfo['filename'] . "-{$width}x{$height}" . '.' . $pathinfo['extension'];
    if( ! is_file($new_fullpath)){
        $image = wp_get_image_editor($fullpath);
        if ( ! is_wp_error( $image ) ) {
            $image->resize( $width, $height, false );
            $image->save( $new_fullpath );
        }
    }
    $new_filepath = str_replace($basedir, '', $new_fullpath);
    return $upload_path['baseurl'] . $new_filepath;
}

또한, 워드프레스에서 이미지를 갖고 작업할 때는 $image = wp_get_image_editor($fullpath);로 시작을 한다. 이 함수는 WP_Image_Editor 클래스를 반환하는데, 이 클래스는 이미지를 아주 쉽게 편집할 수 있도록 API가 매우 잘 정리돼 있다.

안녕하세요. 14년차 풀스택 웹개발자 안형우입니다. 이 블로그에서는 WordPress, PHP, CSS, 사용성, 리눅스 서버 등 풀스택 웹개발에서 마주하는 다양한 문제 상황과 해결책, 필요한 개념들을 다룹니다. 👉 소개


작업물

댓글 (3개)

  • 네.. 좋은 글 잘 읽었어요. 감사합니다.
    그런데, 이미지를 서버가 있는 웹호스팅 계정이 아니라, 외부의 구글피카사 url 경로로 이미지를 불러오는 상황에서는 위 함수를 어떻게 적용해야 할까요? 그리고, 위 함수에서 별도의 이미지 생성 절차(리사이징한 이미지)를 진행해야만 함수의 기능이 가능한거죠?(요건 너무 당연한 질문인가.. ^^;;;)

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다