Cách Tự động xóa hình ảnh bài viết

Đa số khi viết bài trên WordPress, chúng ta cũng đính kèm hình ảnh. Tuy nhiên, đôi khi khi xóa bài viết, hình ảnh vẫn còn tồn tại. Hôm nay, chúng ta sẽ đi sâu vào chủ đề “Tự động xóa hình ảnh bài viết”.

Lý do hình ảnh không bị xóa khi bài viết bị xóa

Mặc dù đã xóa bài viết, nhưng hình ảnh vẫn còn tồn tại vì hình ảnh và bài viết được xử lý khác nhau trong cơ sở dữ liệu. Khi xóa bài viết, WordPress sẽ xóa thông tin meta và nội dung của bài viết đó, nhưng hình ảnh liên kết với nó lại được coi là tệp đính kèm được quản lý riêng biệt. Do đó, về cơ bản, hình ảnh sẽ vẫn tồn tại.

Vấn đề xảy ra khi hình ảnh liên quan đến bài viết vẫn còn tồn tại, gây lãng phí không gian lưu trữ và có thể làm giảm tốc độ của trang web.

Việc xóa hình ảnh không cần thiết từ Thư viện Hình ảnh (Media Library) mỗi lần là rất phiền phức, và khi số lượng bài viết tăng lên, việc quản lý trở nên khó khăn.

Giới thiệu hàm để tự động xóa hình ảnh bài viết

Dưới đây là mã hàm để xóa tất cả hình ảnh liên kết khi xóa bài viết.

function delete_images_with_post( $post_id ) {
    // Bỏ qua phiên bản
    if ( wp_is_post_revision( $post_id ) ) {
        return;
    }
    // Xóa hình ảnh đại diện
    $thumbnail_id = get_post_thumbnail_id( $post_id );
    if ( $thumbnail_id ) {
        wp_delete_attachment( $thumbnail_id, true );
    }
    // Xóa tất cả hình ảnh đính kèm trong nội dung
    $attachments = get_attached_media( 'image', $post_id );
    if ( $attachments ) {
        foreach ( $attachments as $attachment ) {
            wp_delete_attachment( $attachment->ID, true );
        }
    }
}
add_action( 'before_delete_post', 'delete_images_with_post' );

Cách hoạt động của hàm

Hàm trên được kết nối với hook hành động `add_action( ‘before_delete_post‘, ‘delete_images_with_post’ );`. Hook này sẽ được thực thi ngay trước khi bài viết bị xóa, và khi đó hàm ‘delete_image_with_post‘ sẽ được gọi để thực hiện việc tìm và xóa hình ảnh liên kết với bài viết.

1. **Bỏ qua phiên bản**: Hàm đầu tiên kiểm tra xem bài viết bị xóa có phải là phiên bản không. Phiên bản là phiên bản trước đó được tạo tự động mỗi khi bài viết được chỉnh sửa, do đó, thông qua logic kinh doanh này, nó sẽ bỏ qua các phiên bản không cần thiết.

2. **Xóa hình ảnh đại diện**: Để tìm hình ảnh đại diện liên kết với bài viết, hàm `get_post_thumbnail_id` được sử dụng. Nếu hình ảnh đại diện tồn tại, nó sẽ bị xóa thông qua hàm `wp_delete_attachment`.

3. **Xóa tất cả hình ảnh trong nội dung**: Để tìm tất cả hình ảnh đính kèm trong nội dung, hàm `get_attached_media` được sử dụng. Tại đây, loại ‘image’ được chỉ định để trích xuất tất cả các định dạng hình ảnh, sau đó thực hiện vòng lặp để xóa từng hình ảnh.

Giới thiệu về hook hành động và các hook liên quan

Hook hành động `before_delete_post` được thực thi ngay trước khi bài viết bị xóa. Khi hook này hoạt động, bạn có thể định nghĩa chức năng mà bạn muốn thực hiện dưới dạng hàm và gọi nó, từ đó thêm các chức năng cần thiết vào WordPress. Nhiều plugin nâng cao chức năng của WordPress cũng sử dụng các ‘hook (Hook)‘ này để triển khai chức năng.

Các hook hành động tương tự

1. **after_delete_post**: Hook này được thực thi sau khi bài viết bị xóa. Nó hữu ích khi cần theo dõi hoặc ghi lại thông tin xử lý sau đó.

2. **delete_attachment**: Hook này xảy ra khi một tệp đính kèm bị xóa. Nó có thể được sử dụng cho chức năng xóa hình ảnh.

3. **before_delete_attachment**: Hook này được thực thi trước khi một tệp đính kèm bị xóa, cho phép bạn ngăn chặn việc xóa hoặc thực hiện các thao tác bổ sung tùy theo điều kiện cụ thể.

Làm thế nào để sử dụng?

Chỉ cần thêm hàm trên vào tệp functions.php trong thư mục chủ đề của bạn. Về việc chỉnh sửa functions.php, vui lòng tham khảo bài viết dưới đây.

Sau khi thêm mã trên vào functions.php, khi bạn xóa bài viết, tất cả hình ảnh có trong bài viết cũng sẽ bị xóa. (Chúng sẽ bị xóa khỏi cơ sở dữ liệu và các tệp hình ảnh lưu trữ trên máy chủ cũng sẽ bị xóa.)

Lưu ý

  • Không hoạt động khi ‘xóa’ gửi vào ‘thùng rác’. Chỉ hoạt động khi ‘xóa vĩnh viễn’.
  • Nếu hình ảnh giống nhau được sử dụng trong các bài viết khác, hình ảnh sẽ không hiển thị trong các bài viết khác. Nếu bạn sử dụng cùng một hình ảnh trong nhiều bài viết, tốt nhất nên không sử dụng.

Kết luận

Phương pháp tự động xóa hình ảnh liên kết với bài viết là rất hữu ích và giúp ích lớn cho việc quản lý blog. Việc viết mã giúp tối ưu hóa hiệu quả của cơ sở dữ liệu và cải thiện hiệu suất tổng thể của trang web.

Vấn đề hình ảnh còn lại khi xóa bài viết có thể gây phiền phức, nhưng với phương pháp trên, bạn có thể dễ dàng giải quyết. Khi áp dụng thực tế, hãy thêm mã trên vào tệp functions.php để sử dụng một cách cực kỳ đơn giản!

 

[wp_is_post_revision] : Chức năng kiểm tra xem bài viết có phải là phiên bản không, nếu là phiên bản thì sẽ bỏ qua một số thao tác nhất định.
[get_post_thumbnail_id] : Hàm lấy ID hình ảnh đại diện của một bài viết cụ thể.
[wp_delete_attachment] : Hàm xóa một tệp đính kèm cụ thể, có thể thiết lập tham số thứ hai để xác định xem có xóa vĩnh viễn hay không.
[get_attached_media] : Hàm lấy danh sách các phương tiện đính kèm cho một bài viết cụ thể.

Updated : April 10, 2025
No reviews found
Write a review
This site is registered on wpml.org as a development site. Switch to a production site key to remove this banner.