Làm thế nào để tự động xóa hình ảnh khi xóa sản phẩm trong WooCommerce đi?
Khi bạn đang quản trị website thương mại điện tử với WooCommerce sau đó bạn tải lên hàng tấn sản phẩm với hàng ngàn hình ảnh.
Sau khi xóa mọi sản phẩm khi bạn kiểm tra thư viện phương tiện của mình, bạn đang nhìn thấy tất cả những hình ảnh đã được sử dụng cho các sản phẩm đã xóa của bạn.
WordPress không xóa phương tiện sau khi xóa một bài đăng vì thư viện phương tiện được xây dựng để tái sử dụng hình ảnh/tập tin vào một hoặc nhiều bài viết.
Đó là thực sự là điều tuyệt vời cho chúng ta vì sử dụng hình ảnh tính năng tương tự trên nhiều bài viết và sản phẩm khác nhau.
Quản trị viên có thể tải lên 100 sản phẩm mỗi ngày và xóa một số lượng sản phẩm. Hình ảnh sản phẩm của họ đang làm giảm không gian lưu trữ máy chủ.
Trong trường hợp đó, hầu hết trong số chúng ta sẽ thích xóa tất cả các hình ảnh trong thư viện nếu người dùng xóa bất kỳ sản phẩm nào đi.
Tôi biết bạn sẽ hỏi “Nếu bạn đang sử dụng cùng một hình ảnh trên nhiều bài đăng thì sao?”
Có, tôi chắc chắn sẽ cung cấp một giải pháp tốt cho việc xóa hình ảnh khi xóa sản phẩm.
Xóa ảnh đính kèm khi xóa bài viết/sản phẩm
WordPress là tuyệt vời vì nó cho phép bạn thay đổi mong muốn của riêng bạn. Tôi sẽ sử dụng cơ sở đó để áp dụng giải pháp của tôi.
Tôi sẽ sử dụng một cái hook mà là ‘before_delete_post‘ và bạn có thể đọc chi tiết về Hook này ở đây.
Bây giờ, mở tập tin functions.php của Theme mà bạn đang sử dụng và dán mã dưới đây
Đoạn code dưới đây sẽ giúp anh em có thể xóa toàn bộ các file đính kèm, các hình ảnh ngay sau khi thực hiện việc xóa sản phẩm, xóa bài viết trong wordpress.
Việc này sẽ giúp anh em có thể giảm được dung lượng web, dọn được các file không cần thiết.
function delete_all_attached_media( $post_id ) {
if ( get_post_type($post_id) == "product" ) {
$attachments = get_attached_media( '', $post_id );
foreach ($attachments as $attachment) {
wp_delete_attachment( $attachment->ID, 'true' );
}
}
}
add_action( 'before_delete_post', 'delete_all_attached_media' );
Mình nói sơ qua về đoạn function này để anh em hiểu nhé, đoạn function này nó sẽ lấy toàn bộ các file đính kèm với $post_id được chỉ định, sau đó nó sẽ lấy id các file đính kém đó và xóa bằng hàm wp_delete_attachment.
Sau đó sẽ hook vào vị trí trước khi thực hiện xóa post.
Sau khi lưu functions.php bây giờ khi xóa vĩnh viễn một sản phẩm. Bạn sẽ thấy sự kỳ diệu.
Hãy thử và phản hồi lại ý kiến của bạn cho tôi nhé. Nếu bạn quan tâm có thể tìm hiểu thêm tại đây.