**需求說明:**WordPress刪除文章時,文章內所上傳的圖片並不會自動刪除,久而久之佔用了存儲空間。雖然有其他批量刪除未被文章調用的方法,但日常刪除一篇文章也那樣操作就過於笨拙。
因此下面將通過幾行代碼的簡單方式實現在刪除文章時自動刪除縮略圖以及圖片附件,這樣就不用手動去媒體庫尋找並刪除,準確而且效率高。
實現代碼:
將下面代碼插入到主題根目錄 functions.php即可【推薦使用Code Snippets插件來對functions.php插入自定義代碼,這樣更換主題才不會失效】
/* 删除文章时删除图片附件 */
function delete_post_and_attachments($post_ID) { global $wpdb; //删除特色图片 $thumbnails = $wpdb->get_results( “SELECT * FROM $wpdb->postmeta WHERE meta_key = ‘_thumbnail_id’ AND post_id = $post_ID“ ); foreach ( $thumbnails as $thumbnail ) { wp_delete_attachment( $thumbnail->meta_value, true ); } //删除图片附件 $attachments = $wpdb->get_results( “SELECT * FROM $wpdb->posts WHERE post_parent = $post_ID AND post_type = ‘attachment'” ); foreach ( $attachments as $attachment ) { wp_delete_attachment( $attachment->ID, true ); } $wpdb->query( “DELETE FROM $wpdb->postmeta WHERE meta_key = ‘_thumbnail_id’ AND post_id = $post_ID“ ); } add_action(‘before_delete_post’, ‘delete_post_and_attachments’);
代碼說明:
**before_delete_post:**在後台永久刪除文章時會觸發這段功能代碼:在徹底刪除文章前先執行函數內容刪除特色圖片以及圖片附件、接著永久刪除文章;
因此如果是使用 action delete_post 而不是 before_delete_post 將導致先刪除了文章後因媒體附件與文章關聯已取消而無法正確刪除。
測試:
1、發布帶有2個圖片的文章後,媒體庫數量212個,uploads當日目錄文件28個,
2、將文章移至回收站,媒體庫和uploads數量沒有變化,
3、將文章永久刪除,媒體庫數量-2縮減到210個,uploads當日目錄-2縮減到26個,
4、證明本代碼有效。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END