Hapus Media Terkait Setelah Penghapusan Halaman

9

Catatan

Gunakan dengan risiko Anda sendiri, itu buggy dan saya telah menemukan beberapa contoh di mana ia akan menghapus SEMUA lampiran. Tidak yakin mengapa.

Apakah mungkin untuk menghapus media yang terkait dengan halaman ketika halaman itu dihapus? Saya tahu di halaman Sisipkan Media, Anda dapat memfilter menurut gambar "Diunggah ke halaman ini" jadi bisakah saya mendapatkan daftar itu dan menghapusnya begitu halaman itu dihapus?

Saat ini saya sedang bermain-main dengan menghubungkan ke Delete Post. Saat ini ... itu tidak melakukan apa-apa, tetapi saya pikir saya mendapatkan suatu tempat dengan itu.

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');
Howdy_McGee
sumber
1
Hati-hati menghapus referensi ke media yang digunakan di tempat lain misalnya posting lain atau jika posting Anda telah dibagikan di media sosial.
Gilbert
Nah jika saya memaksa pengguna untuk mengunggah gambar yang sama dua kali (jika mereka menginginkan gambar yang sama untuk 2 halaman berbeda) itu akan mengubah nama salah satu gambar, jadi itu harus baik-baik saja.
Howdy_McGee

Jawaban:

8

Bagaimana dengan ini? Ini mengadaptasi contoh pada halaman referensi fungsi 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' );
Charles Clarkson
sumber
1
Tidak bekerja untuk saya. Posting dibuat melampirkan 1 gambar, posting sampah, sampah kosong. Gambar masih ada di perpustakaan media. EDIT: Oh tidak ada bagian add_action
Michael Rogers
8

Saya kira Anda sedang mencari sesuatu seperti ini ...?

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');
para pria
sumber
Tidak melakukan apa pun untuk saya. Menghapus hasil posting pada media yang tidak terikat seperti biasa tidak menghapusnya.
Michael Rogers
Kecuali Anda mengadaptasi kode, itu hanya untuk halaman. Anda melihat itu, benar, @MichaelRogers?
tfrommen
Gotcha menyesal kalau begitu!
Michael Rogers