facebook처럼 링크를 던져넣었을때 스크린샷이 생성되는건 워드프레스 유저들이 보기에 참으로 부러운 기능인것 같다. 찾아보면 이를 원하는 질문들이 많은데, 그동안 비슷한 방법은 wordpress.com에서 제공하는 기능이다.

1. mshot 방식

http://s.wordpress.com/mshots/v1/http%3A%2F%2Fprothemedesign.com%2F?w=250

이런식으로 스크립트를 써주면 이미지가 생성된다. 이를 이용해 워드프레스 상에서 입력한 url을 저 url부분에 넣어서 스크린샷을 동적으로 보여줄 수 있고, 이를 이용한 플러그인이 많은데 나는 bm-shot이라는 플러그인을 썻다.

코드를 보면 이미지가 저 워드프레스 서버에 저장이 되고 이를 불러오는 방식인데, 한번 생성되면 느리진 않지만 나중에 다시 페이지를 읽으면 서버에서 지워졌는지 다시 지워지는 단점이 있다.

2. Shrink The Web

http://www.shrinktheweb.com/

더 좋은 방법이 없나 계속 찾다보니 이런 서비스가 있었다. 저 서비스에 가입을 하고 제공하는 코드로 url을 전송하면 이미지가 생성된다. 이 서비스에서 제공하는 Shrink The Web 플러그인을 이용했더니 좋은점은 생성된 이미지가 내 서버에 저장된다는 것이다.

무료와 유료 계정의 차이가 있지만 무료 계정으로도 한달에 5000개의 쿼리를 처리할 수 있다니 나쁘지 않다. 현재 왼쪽의 a some link부분을 이 기능으로 사용 중.

2-1. 생성된 썸네일을 thumbnail로 등록하기

2번의 방법을 계속 써 왔는데 이 방식은 매번 stw의 숏코드를 불러오는데 이 코드에서는 해당 파일이 생성되어 있는지 확인하고 그것 보여주거나, 캐시 기간이 지났을 경우 다시 서비스에 접속해서 썸네일을 생성한다. 이 방식이 필요한 사람도 있겠지만 내 경우에는 속도 문제도 있고 굳이 그렇께까지 할 필요를 못느껴서 차라리 post에 썸네일로 등록하고 싶었는데, 한참을 헤멘 끝에 간단히 해결하였다.

먼저 테마의 functions.php에 아래 코드를 추가한다.

function save_thumbnail($imageurl){
    global $post;
    $post_id = $post->ID;  
    $image_url = $imageurl;
    $upload_dir = wp_upload_dir();
    $image_data = file_get_contents($image_url);
    $filename = basename($image_url);
    if(wp_mkdir_p($upload_dir['path']))
    $file = $upload_dir['path'] . '/' . $filename;
    else
    $file = $upload_dir['basedir'] . '/' . $filename;
    file_put_contents($file, $image_data);

    $wp_filetype = wp_check_filetype($filename, null );
    $attachment = array(
        'post_mime_type' => $wp_filetype['type'],
        'post_title' => sanitize_file_name($filename),
        'post_content' => '',
        'post_status' => 'inherit'
    );
    $attach_id = wp_insert_attachment( $attachment, $file, $post_id );
    require_once(ABSPATH . 'wp-admin/includes/image.php');
    $attach_data = wp_generate_attachment_metadata( $attach_id, $file );
    wp_update_attachment_metadata( $attach_id, $attach_data );

    set_post_thumbnail( $post_id, $attach_id );
}

그리고 ‘/wp-content/plugins/shrinktheweb-website-preview-plugin/stw-wp-thumbnails.php’ 파일을 열어 line:437에 아래와 같은 부분이 있는데,

if ($useCachedThumb) {
return STWWT_plugin_getCacheURL($cacheFilename, $errorThumb);
} else {
    // File is not in cache, or we need a live version, so return it.
    return STWWT_fetch_requestThumbnailCapture($args);
}

save_thumbnail을 추가하여 아래처럼 바꾼다.

if ($useCachedThumb) {
save_thumbnail($cachePath);
return STWWT_plugin_getCacheURL($cacheFilename, $errorThumb);
} else {
    // File is not in cache, or we need a live version, so return it.
    return STWWT_fetch_requestThumbnailCapture($args);
}

참고 : wp insert post – How do I set a featured image (thumbnail) by image URL when using wp_insert_post()? – WordPress Development Stack Exchange