[워드프레스] 글과 함께 연결된 미디어 파일을 삭제하는 방법

워드프레스 글(포스트)을 삭제하면 글만 삭제되고 글에 포함된 미디어 파일은 삭제되지 않습니다. 글을 삭제한 경우 미디어 파일을 찾아서 삭제해야 합니다. 글에 연결된 미디어 파일을 쉽게 삭제하려면 글을 삭제하기 전에 글 편집 모드에 들어가서 "미디어 추가" 버튼을 누르고 "이 글에 업로드된 것"을 선택하여 해당 글에 업로드된 이미지 파일을 표시할 수 있습니다. 이렇게 하면 쉽게 삭제가 가능합니다.

워드프레스 - 현재 글에 업로드된 미디어 파일 표시하기

이 방법은 번거롭습니다. (하지만 번거로워도 이 방법을 권장합니다.) 만약 글 삭제 시 연결된 이미지를 자동으로 삭제하기를 원하는 경우 다음 코드를 사용할 수 있습니다.

function delete_post_media( $post_id ) {

$attachments = get_posts( array(
'post_type'      => 'attachment',
'posts_per_page' => -1,
'post_status'    => 'any',
'post_parent'    => $post_id
) );

foreach ( $attachments as $attachment ) {
if ( false === wp_delete_attachment( $attachment->ID ) ) {
// Log failure to delete attachment. (첨부파일 삭제 실패 시 로그를 기록함)
}
}
}
add_action('before_delete_post', 'delete_post_media');
// Source: stackexchange

위의 코드를 테마의 함수 파일(functions.php)에 추가하면 원하는 대로 작동할 것입니다. 글에 연결된 미디어를 삭제할 때에는 주의가 필요합니다. 만약 이미지 파일이 여러 글에 사용되고 있다면 문제가 발생할 것입니다. 그러므로 위의 코드를 사용할 때에는 이 점을 염두에 두는 것이 좋을 듯 합니다.

위의 코드를 조금 변경하여 다음과 같이 사용할 수 있습니다.

function delete_post_media( $post_id ) {

if(!isset($post_id)) return; // 이 라인을 삭제하면 상위 항목이 있는 모든 첨부파일이 영구적으로 삭제됩니다!
elseif($post_id == 0) return; // Will die in case you have 0 set. there's no page id called 0 :) -- post id가 0인 경우 종료.
elseif(is_array($post_id)) return; // Will die in case you place there an array of pages - 페이지 배열인 경우 종료?

else {

$attachments = get_posts( array(
'post_type'      => 'attachment',
'posts_per_page' => -1,
'post_status'    => 'any',
'post_parent'    => $post_id
) );

foreach ( $attachments as $attachment ) {
if ( false === wp_delete_attachment( $attachment->ID ) ) {
// Log failure to delete attachment - 첨부 파일 삭제 실패 시 로그 기록
}
}
}
}
// Source: WordPress Support Forum

이 코드는 특정 post_id의 글을 지정하여 삭제하고자 할 때 사용할 수 있는 함수입니다. 예를 들어,

delete_post_media( 111 );

위의 함수를 실행하면 이 상위 ID '111'에 첨부된 모든 미디어가 삭제됩니다.


2개 댓글

  1. 안녕하세요. 질문드립니다. 미디어라이브러리에 있는 파일들은 삭제하면 안되나요? 사진,영상 등... 게시글에 있던 사진, 영상이 안나타나게 되나요?
    지금 이 질문하기 전에 미디어 라이브러리에 있는 사진 하나를 삭제했는데 게시물의 사진은 그대로 있고 아무런 변화가 없던데.. 문제 없는건가요?

댓글 남기기

* 이메일 주소는 공개되지 않습니다.