Jetpack Carousel 수정

ImageMagick 설치

제일 먼저 imagemagick을 설치해주자. WP는 기본적으로 GD library를 사용하는데, 이 경우 thumbnail에서 metadata가 사라진다. 우리는 모든 이미지에 대해서 metadata가 필요하다. 워드프레스는 metadata를 가져올 때, 원본 이미지에서 가져오는데, 모든 metadata를 가져오지 않는다. XMP의 경우 사진 파일이 클 수 록 가져오는 속도가 느리기 때문에, thumbnail에 XMP를 유지 시킨 뒤, thumbnail에서 XMP를 가져올 것이다.

sudo apt-get install php-imagick
sudo apt install imagemagick
sudo service apache2 restart

이후 ImageMagick을 활성화 시키는 플러그인을 설치해 주자. 이 플러그인은 activate만 하면 자동으로 활성화 된다. 다만 이 플러그인은 새로 업로드 한 사진에만 적용된다.

Photon 해제

Photon은 XMP metadata를 지워버리므로 해제 시켜주자.

플러그인 파일 수정

환경설정 -> edit plugin으로 들어가서
jetpack/modules/carousel/jetpack-carousel.php을 선택하자

그 다음 링크를 참조해서,

function getXmpData($filename, $chunkSize)
{
    if (!is_int($chunkSize)) {
        throw new RuntimeException('Expected integer value for argument #2 (chunkSize)');
    }

    if ($chunkSize < 12) {
        throw new RuntimeException('Chunk size cannot be less than 12 argument #2 (chunkSize)');
    }

    if (($file_pointer = fopen($filename, 'r')) === FALSE) {
        throw new RuntimeException('Could not open file for reading');
    }

    $startTag = '<x:xmpmeta';
    $endTag = '</x:xmpmeta>';
    $buffer = NULL;
    $hasXmp = FALSE;

    while (($chunk = fread($file_pointer, $chunkSize)) !== FALSE) {

        if ($chunk === "") {
            break;
        }

        $buffer .= $chunk;
        $startPosition = strpos($buffer, $startTag);
        $endPosition = strpos($buffer, $endTag);

        if ($startPosition !== FALSE && $endPosition !== FALSE) {
            $buffer = substr($buffer, $startPosition, $endPosition - $startPosition + 12);
            $hasXmp = TRUE;
            break;
        } elseif ($startPosition !== FALSE) {
            $buffer = substr($buffer, $startPosition);
            $hasXmp = TRUE;
        } elseif (strlen($buffer) > (strlen($startTag) * 2)) {
            $buffer = substr($buffer, strlen($startTag));
        }
    }

    fclose($file_pointer);
    return ($hasXmp) ? $buffer : NULL;
}

jetpack/modules/carousel/jetpack-carousel.php <?php 바로 아래에 추가해 주자.

그 다음 대에충 318번 째 줄쯤에

'FocalLengthIn35mmFilm'     => __( 'Focal Length In 35mm', 'jetpack'),
'auxLens'                   => __( 'Lens Model', 'jetpack' ),
'AnalogExifFilm'            => __( 'Film Type', 'jetpack' ),

위 줄을 넣어주고 대에충 아래쯤에 줄을 아래로 수정해 주자.

'meta_data'      => array( 'camera', 'aperture', 'shutter_speed', 'focal_length', 'copyright', 'iso', 'FocalLengthIn35mmFilm', 'auxLens', 'AnalogExifFilm'),

그리고 512번째 줄쯤에 아래 줄을 넣어주자.

        $thumb_file       = wp_get_attachment_image_src( $attachment_id );
        $thumb_file       = isset( $thumb_file[0] ) ? $thumb_file[0] : wp_get_attachment_url( $attachment_id );
        $xmlstring = getXmpData($thumb_file);
        
        // echo $xmlstring;
        if ($xmlstring){
            $xmlstring = str_replace(":","",$xmlstring);
            $xml = simplexml_load_string($xmlstring, "SimpleXMLElement", LIBXML_NOCDATA);
            $json = json_encode($xml);
            $xmpdata = json_decode($json,TRUE);
            foreach ($xmpdata['rdfRDF']['rdfDescription']['@attributes'] as $key=>$item){
                $img_meta[$key] = $item;
            }

        }

마지막으로 대충 576 쯤에,

$attr['data-image-title']       = esc_attr( htmlspecialchars( $attachment_desc ) );

결과 =