Xóa phương tiện liên kết khi xóa trang


9

Ghi chú

Sử dụng có nguy cơ của riêng bạn, đó là lỗi và tôi đã chạy qua một vài trường hợp trong đó nó sẽ xóa TẤT CẢ các tệp đính kèm. Không chắc chắn tại sao.

Có thể xóa phương tiện liên kết với một trang khi trang đó bị xóa? Tôi biết trong trang Chèn Phương tiện, bạn có thể lọc theo hình ảnh "Đã tải lên trang này" để tôi có thể lấy danh sách những thứ đó và chỉ cần xóa chúng khi trang đang bị xóa?

Ngay bây giờ tôi đang chơi xung quanh với việc móc vào Xóa bài. Ngay bây giờ ... nó không làm gì ngoài việc tôi nghĩ rằng tôi đang đi đâu đó với nó.

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
Hãy cẩn thận về việc xóa các tham chiếu đến phương tiện được sử dụng ở nơi khác, ví dụ như các bài đăng khác hoặc nếu bài đăng của bạn đã được chia sẻ trên phương tiện truyền thông xã hội.
Gilbert

Chà, nếu tôi buộc người dùng tải lên cùng một hình ảnh hai lần (nếu họ muốn cùng một hình ảnh cho 2 trang khác nhau) thì nó sẽ đổi tên một trong những hình ảnh, vì vậy nó sẽ ổn.
Howdy_McGee

Câu trả lời:


8

Còn cái này thì sao? Nó điều chỉnh một ví dụ trên trang tham chiếu hàm 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
Không làm việc cho tôi. Tạo bài đăng kèm theo 1 hình ảnh, bài rác, thùng rác. Hình ảnh vẫn còn đó trên thư viện phương tiện truyền thông. EDIT: Ồ, nó thiếu phần add_action
Michael Rogers

8

Tôi cho rằng bạn đang tìm kiếm một cái gì đó như thế này ...?

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

Không có gì cho tôi. Xóa kết quả bài đăng trên phương tiện không được lưu trữ như bình thường, nó sẽ không xóa nó.
Michael Rogers

Trừ khi bạn điều chỉnh mã, nó chỉ dành cho các trang. Bạn đã thấy điều đó, phải không, @MichaelRogers?
tfrommen

Gotcha xin lỗi rồi!
Michael Rogers
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.