워드프레스에서 이미지 업로드 시 파일 이름이 같으면 강제로 덮어쓰기

Last Updated: 2023년 11월 30일 4개 댓글

워드프레스에서 기존에 업로드된 미디어 파일과 동일한 이름의 미디어 파일을 업로드하는 경우, 새로 업로드하는 이미지 파일의 파일명 뒤에 -1, -2와 같이 숫자가 추가되어 기존의 같은 이름의 미디어 파일과 구분됩니다.

워드프레스에서 동일한 미디어 파일 업로드 시
업로드하는 이미지의 파일명과 동일한 이름의 이미지 파일이 이미 미디어 라이브러리에 업로드된 경우 새롭게 업로드되는 파일의 이름 뒤에 숫자가 붙는다.

미디어 라이브러리에 업로드된 기존 미디어 파일을 동일한 이름의 미디어 파일로 교체하고 싶은 경우가 있을 수 있습니다. 기존에 업로드한 이미지를 새로운 버전의 이미지로 업데이트하려면 해당 글을 수정하여 이미지를 교체해야 하지만, 간단히 미디어 라이브러리에서 해당 이미지 파일을 동일한 이름의 새로운 파일로 교체하면 글을 수정할 필요가 없게 됩니다.

워드프레스에서 이미지 업로드 시 파일 이름이 같으면 강제로 덮어쓰기

이 경우 다음과 같은 코드를 사용 중인 테마의 함수 파일에 추가하면 동일한 이름의 미디어 파일을 강제로 덮어쓰기하여 교체됩니다.

반드시 차일드 함수를 만들어 작업하세요. 그렇지 않으면 테마가 업데이트될 경우 코드가 사라집니다. 차일드 테마(자식 테마 혹은 하위 테마)에 대한 자세한 내용은 "워드프레스 차일드 테마 활용하기"를 참고해보세요.

// 파일명이 동일한 미디어 파일 덮어쓰기
// Force to replace existing media files when uploading media files with the same filenames
add_filter( 'sanitize_file_name', 'filename_filter_wpse_28439', 10, 1 );

function filename_filter_wpse_28439( $name ) 
{
    $args = array(
        'numberposts'   => -1,
        'post_type'     => 'attachment',
        'meta_query' => array(
                array( 
                    'key' => '_wp_attached_file',
                    'value' => $name,
                    'compare' => 'LIKE'
                )
            )
    );
    $attachments_to_remove = get_posts( $args );

    foreach( $attachments_to_remove as $attach )
        wp_delete_attachment( $attach->ID, true );

    return $name;
}

// 출처: https://wordpress.stackexchange.com/questions/28439/how-to-force-media-manager-to-overwrite-files-of-same-name

위의 코드는 오래되었지만, 최신 버전의 워드프레스와 아바다 테마가 설치된 워드프레스에서 테스트해보니 잘 작동하네요.

동일한 이름의 이미지 파일을 업로드하고 캐시를 삭제한 후에 조금 시간이 지나면 해당 이미지가 사용된 글에서도 이미지가 교체될 것입니다. 캐시 때문에 곧바로 교체되지는 않을 수 있으므로 캐시를 삭제하고 조금 기다리면 새로운 이미지로 바뀔 것입니다.

파일명이 동일한 미디어 파일을 아무런 경고 없이 교체하게 됩니다. 그러므로 상기 코드를 사용할 경우 신중을 기하시기 바랍니다. 잘못하면 의도하지 않게 다른 이미지가 교체될 수도 있습니다.

다시 테스트해보니 이번 달에 업로드된 이미지에 대해서만 제대로 작동하는 것 같습니다. 기존 이미지가 삭제될 수 있으므로 이 코드를 실행하기 전에 반드시 백업을 하는 것이 안전합니다.

다른 방법으로 Enable Media Replace 같은 워드프레스 플러그인을 사용할 수 있습니다. 이 플러그인을 설치하면 미디어 라이브러리에서 이미지 파일을 교체할 수 있는 옵션이 제공됩니다.

참고:


4 개 댓글

Leave a Comment

  1. 안녕하세요
    워드프레스로 홈페이지 제작을 하며 정보꾸러미님의 글을 접하게 되었는데요. 덕분에 많은 것을 배웠습니다.

    해당 글을 읽으며'파일명이 동일한 미디어 파일 덮어쓰기' 코드를 hello elementor 테마 functions.php 파일에 적용해 보았는데요. 해당 테마에서는 코드가 반영 되지 않는지 파일명이 같은 새로운 이미지 파일을 업로드해도 기존 이미지 파일 그대로인 상태여서 댓글을 남기게 됐습니다.

    이럴땐, 위에 알려주신 Enable Media Replace플러그인을 사용하는게 좋을까요? 덮어씌우기할 이미지 수가 꽤 되는 상태입니다.

    응답
  2. 논란이 될것같지만 여려가지 느끼는게 있어 메세지를 남깁니다.
    정말이지, 개발자에게 물어봐도 무조건 커스텀을 해야하는것 같던 기능이 여기에 있네요
    사용자가 FTP 에서 굳이 업로드 하지 않아도 되고, 빌더에서 이미지를 찾아가 직접 삭제하고 교체하지 않아도 되는 기능을 찾고 있었습니다.

    워드프레스를 사용하는 사람들에게는, 어쩌면 ' 당연히 이정도 기능은 누군가 만들었을 수 도 있는 기능 ' 이었을지도 모르겠습니다.
    그렇지만 저는 저자를 높게 평가하는 부분이, 이런 부분은 정말 실무자만 느낄 수 있는 디테일한 부분이라는거였어요

    카페 만들고, 회원수만 늘려서 검색 결과량은 많지만 알짜배기는 없는 워드프레스 생태계를 많이 경험했는데, thewordcracker 에서는 정말이지 너무 유용하고 도움이 되는 정보를 많이 얻어갑니다.

    저자님은, 한국의 워드프레스를 발전시키는 분중,
    제가 아는 최고의 저자 입니다.

    감사합니다.

    응답
    • 안녕하세요, fast님.

      부족한 점이 많지만 좋게 봐주셔서 감사합니다.

      앞으로도 더 유익한 워드프레스 관련 정보를 올리도록 노력하겠습니다.

      코로나 때문에 전 세계가 패닉 상태네요. 건강 조심하시고 즐거운 하루 보내시기 바랍니다.

      응답