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

참고: 인기 테마인 BE 테마(33%)The 7(35%) 할인 행사를 진행하고 있습니다.
참고

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

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

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

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’에 첨부된 모든 미디어가 삭제됩니다.



기부를 통해 이 블로그를 후원하실 수 있습니다.
워드프레스 설치/제작/문제해결이 필요한 경우 서비스(유료)를 요청해주세요.