페이지 삭제시 관련 미디어 삭제


9

노트

자신의 위험 부담으로 사용하면 버그가 있으며 모든 첨부 파일을 삭제하는 몇 가지 인스턴스를 실행했습니다. 이유가 확실하지 않습니다.

해당 페이지가 삭제 될 때 페이지와 관련된 미디어를 삭제할 수 있습니까? 미디어 삽입 페이지에서 "이 페이지에 업로드 됨"이미지로 필터링 할 수 있으므로 해당 목록을 가져 와서 페이지가 삭제 될 때 삭제할 수 있습니까?

지금은 게시물 삭제에 연결하여 놀고 있습니다. 지금은 ... 아무것도하지 않지만 나는 어딘가에 있다고 생각합니다.

function del_post_media($pid) {
    $query = "DELETE FROM wp_postmeta
            WHERE ".$pid." IN
            (
            SELECT id
            FROM wp_posts
            WHERE post_type = 'attachment'
            )";
    global $wpdb;
    if ($wpdb->get_var($wpdb->prepare($query))) {
        return $wpdb->query($wpdb->prepare($query));
    }
    return true;
}
add_action('delete_post', 'del_post_media');

1
다른 게시물 (예 : 다른 게시물 또는 소셜 미디어에서 게시물이 공유 된 경우)에 사용되는 미디어에 대한 참조는 삭제하지 않도록주의하십시오.
Gilbert

사용자가 동일한 이미지를 두 번 업로드하도록 강요하면 (2 개의 다른 페이지에 대해 동일한 이미지를 원할 경우) 이미지 중 하나의 이름이 바뀌므로 괜찮습니다.
Howdy_McGee

답변:


8

이건 어때요? get_posts () 함수 참조 페이지 의 예를 조정합니다 .

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' );

1
나를 위해 작동하지 않았다. 첨부 된 게시물 1 개 이미지, 휴지통 게시물, 휴지통 비우기 미디어 라이브러리에 이미지가 여전히 있습니다. 편집 : 아, 그것은 add_action 부분을 누락
마이클 로저스

8

나는 당신이 이와 같은 것을 찾고 있다고 가정합니다 ...?

function delete_associated_media($id) {
    // check if page
    if ('page' !== get_post_type($id)) return;

    $media = get_children(array(
        'post_parent' => $id,
        'post_type' => 'attachment'
    ));
    if (empty($media)) return;

    foreach ($media as $file) {
        // pick what you want to do
        wp_delete_attachment($file->ID);
        unlink(get_attached_file($file->ID));
    }
}
add_action('before_delete_post', 'delete_associated_media');

나를 위해 아무것도하지 않습니다. 평소와 같이 첨부되지 않은 미디어에서 게시물 결과를 삭제해도 삭제되지 않습니다.
Michael Rogers

코드를 수정하지 않으면 페이지 전용입니다. @MichaelRogers?
tfrommen

그때 미안해!
Michael Rogers
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.