티스토리에서 워드프레스로 이전 시 이미지 절대 경로 변경 스트립트

워드프레스 정보를 제공하는 블로그 Avada 2023. 10. 17. 10:54 • 댓글:

티스토리에서 백업본을 받아서 워드프레스로 이전할 수 있습니다. 

 

티스토리에서 워드프레스로 이사하기 (티스토리 백업 이용)

티스토리는 카카오 데이터센터 화재 이후 데이터 백업 기능이 추가되었습니다. 최근 티스토리에서 6월부터 티스토리 자체 광고 신설에 대한 공고를 올렸습니다. [안내] 6월부터 티스토리 자체

avada.tistory.com

몇 개월 전까지 잘 작동했는데요. 지금도 잘 될지는 모르겠습니다. 클라우드웨이즈에서 PHP 버전을 7.4로 설정하고 HTML Import 2 플러그인을 설치하여 이전을 시도해 볼 수 있습니다. 호스팅에 따라 에러가 발생하면서 잘 진행되지 않을 수도 있습니다.

이전 후에 이미지 엑박 현상이 발생할 수 있습니다. 워드프레스에서 임포트를 시도하기 전에 이미지 경로를 사이트 주소를 포함한 전체 경로로 변경하면 이전 후에 에러가 발생하지 않습니다.

티스토리에서 워드프레스로 이전 시 이미지 절대 경로 변경 스트립트

아래는 제가 사용했던 PHP 스크립트입니다. 경로와 도메인 이름을 적절히 변경하여 사용해 보시기 바랍니다. 저는 tistory 폴더에 티스토리 백업 파일을 올려놓은 다음 이전을 시도했습니다. $dir 경로는 호스팅에 따라 적절히 변경하세요. SSH에 접속하여 경로를 확인할 수 있을 것입니다.

<?php
$dir = new DirectoryIterator('/public_html/tistory'); // Set initial directory to '/public_html/tistory'

// Loop through all sub-directories
foreach ($dir as $fileInfo) {
    if($fileInfo->isDot() || !$fileInfo->isDir()) continue; // skip if not a directory or is '.' or '..'

    $post_id = $fileInfo->getFilename(); // Get the directory name, i.e., post_id

    // Now iterate over each file in the directory
    foreach(new DirectoryIterator($fileInfo->getPathname()) as $file) {
        if($file->isDot() || $file->isDir()) continue; // skip if not a file or is '.' or '..'

        // Check if file is HTML
        if(pathinfo($file->getFilename(), PATHINFO_EXTENSION) === 'html') {
            // Read HTML file
            $htmlContent = file_get_contents($file->getPathname());

            // Use regex to replace the image src
            $htmlContent = preg_replace_callback(
                '#<img\s(.*?)src="(./img/([^"]*?))"(.*?)>#',
                function($matches) use ($post_id) {
                    $imgName = $matches[3]; // the part of regex that captures the image name
                    return '<img ' . $matches[1] . 'src="https://exmaple.com/tistory/' . $post_id . '/img/' . $imgName . '"' . $matches[4] . '>';
                },
                $htmlContent
            );

            // Write the new HTML content back to the file
            file_put_contents($file->getPathname(), $htmlContent);

            // Print out a message for each file modified
            echo "/{$post_id}/{$file->getFilename()} completed<br/>";
        }
    }
}

// Print out a message when all files are processed
echo "All completed";

?>

경우에 따라 위의 코드가 작동하지 않을 수 있습니다.

그런 경우 임포트 후에 DB에서 일괄 변경할 수도 있습니다.

UPDATE wp_posts
SET post_content = REPLACE(
    post_content,
    'src="./img/',
    CONCAT('src="https://example.co.kr/tistory/', post_name, '/img/')
)
WHERE post_type = 'post';

이전 후에는 워드프레스에서 테마와 플러그인을 설치하여 적절히 세팅할 수 있습니다.

 

GeneratePress 테마로 워드프레스 블로그 세팅 예시 (How to Customize GP)

워드프레스 테마 중에서 GeneratePress 테마가 속도가 빠르고 커스텀하기에 좋아서 저는 거의 대부분 사이트에 이 테마를 사용하고 있습니다. 이 테마를 사용하는 사이트/블로그가 점차 늘어나는

avada.tistory.com

Yoast SEO나 Rank Math SEO와 같은 SEO 플러그인을 설치하여 세팅하면 SEO에 도움이 될 것입니다.

참고

https://avada.tistory.com/3046

 

해외웹호스팅: 클라우드웨이즈 vs. 블루호스트 비교 (Cloudways vs. Bluehost)

저는 오랫동안 블루호스트(Bluehost)를 이용해 왔으며 2021년부터는 클라우드웨이즈(Cloudways) 웹호스팅 서비스도 함께 이용하고 있습니다. 현재 메인 워드프레스 블로그는 Bluehost에서 호스팅되고 있

avada.tistory.com

https://avada.tistory.com/2897

 

엘리멘터 무료 버전 vs. 프로 버전 비교

엘리멘터(Elmentor)는 500만 개가 넘는 사이트에 설치되어 사용되고 있는 인기 워드프레스 페이지 빌더 플러그인입니다. 엘리멘터는 무료 버전과 프로 버전으로 제공됩니다. Elementor 프로 버전에서

avada.tistory.com