ลบสื่อที่เกี่ยวข้องเมื่อลบหน้า


9

บันทึก

ใช้ความเสี่ยงของคุณเองมันเป็นรถและฉันได้ทำงานในสองสามกรณีที่มันจะลบสิ่งที่แนบมาทั้งหมด ไม่แน่ใจว่าทำไม

เป็นไปได้ไหมที่จะลบสื่อที่เกี่ยวข้องกับหน้าเมื่อหน้านั้นถูกลบ? ฉันรู้ว่าในหน้าแทรกสื่อคุณสามารถกรองตามภาพ "อัปโหลดไปยังหน้านี้" ดังนั้นฉันจะได้รับรายชื่อของเหล่านั้นและเพียงแค่ลบพวกเขาเมื่อหน้าจะถูกลบ?

ตอนนี้ฉันกำลังเล่นกับ hooking เป็น Delete Post ตอนนี้ ... มันไม่ทำอะไรเลย แต่ฉันคิดว่าฉันจะไปไหนมาไหนด้วย

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
Michael Rogers

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

Gotcha ขอโทษด้วย!
Michael Rogers
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.