Đoạn code sau đây sẽ tự động xóa vĩnh viễn tất cả các tệp media được đính kèm với một sản phẩm khi sản phẩm đó bị xóa khỏi website WordPress. Việc này sẽ giúp thư viện media gọn gàng: Tránh việc các tệp media không sử dụng còn tồn tại sau khi sản phẩm bị xóa và tiết kiệm dung lượng lưu trữ: Các tệp media không cần thiết sẽ không chiếm dụng không gian trên máy chủ của bạn.
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' );
Giải thích từng dòng code:
function delete_all_attached_media( $post_id ) { ... }:
Khai báo một hàm có tên delete_all_attached_media. Hàm này nhận ID của bài viết ($post_id) sắp bị xóa làm tham số.
if ( get_post_type($post_id) == "product" ) { ... }:
Kiểm tra xem bài viết sắp bị xóa có phải là một sản phẩm (post type “product”) không. Nếu không phải, hàm sẽ không làm gì cả và kết thúc tại đây.
$attachments = get_attached_media( '', $post_id );
Lấy ra một mảng ($attachments) chứa tất cả các tệp media được đính kèm với sản phẩm này.
foreach ($attachments as $attachment) { ... }:
Lặp qua từng tệp media trong mảng $attachments: $attachment đại diện cho một tệp media trong mỗi lần lặp.
wp_delete_attachment( $attachment->ID, 'true' );
Xóa tệp media hiện tại.
- $attachment->ID là ID của tệp media.
- ‘true’ là tham số thứ hai, đảm bảo rằng tệp media sẽ bị xóa khỏi thùng rác vĩnh viễn.
add_action( 'before_delete_post', 'delete_all_attached_media' );
Móc (hook) hàm delete_all_attached_media vào action before_delete_post. Điều này có nghĩa là mỗi khi một bài viết sắp bị xóa, hàm delete_all_attached_media sẽ được tự động gọi để xử lý việc xóa các tệp media đính kèm (nếu bài viết là một sản phẩm).
