WooCommerce, WordPress, 實用技巧

潔癖發作!刪除文章、商品、自訂文章時同時刪除關聯媒體的方式

潔癖發作!刪除文章、商品、自訂文章時同時刪除關聯媒體的方式

媒體庫爆炸一張一張刪又怕刪錯?

在 WordPress 中管理文章與媒體檔案是一項日常工作,但當您刪除某篇文章時,與之關聯的媒體檔案通常仍會留在您的伺服器上。這不僅佔用了寶貴的儲存空間,還可能導致網站管理上的混亂。幸運的是,有一種簡單的方法可以在刪除文章的同時,自動刪除所有關聯的媒體檔案。

首先,讓我們來了解 WordPress 中媒體檔案與文章的關聯。在 WordPress 中,每當您上傳一個媒體檔案至文章時,這個檔案就會與該文章產生關聯。這些檔案被存儲在您的媒體庫中,並與特定的文章 ID 相連接。要實現自動刪除關聯媒體的功能,我們需要編寫一小段 PHP 程式碼。這段程式碼將會掛勾(hook)到 WordPress 的 delete_post 動作上。當一篇文章被刪除時,此程式碼將會執行,尋找所有與該文章 ID 關聯的媒體檔案,並將它們從伺服器上刪除。

程式碼範例

function delete_associated_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) {
        wp_delete_attachment($attachment->ID, true);
    }
}
add_action('before_delete_post', 'delete_associated_media');

運作原理

這段程式碼會在每次刪除文章前運行。它首先獲取所有與該文章關聯的附件 ID,然後逐一刪除這些附件。這樣,當文章被刪除時,所有關聯的媒體檔案也會被從您的伺服器上移除。

請注意,在實際應用此程式碼到您的網站之前,建議您先在開發環境中測試以確保其正常運作。此外,如果您的網站中有特定文章類型不需要刪除關聯的媒體檔案,您可以在程式碼中加入額外的條件判斷來處理這些情況。

通過這種方式,您可以更有效率地管理您的 WordPress 網站,確保伺服器空間不被不必要的檔案占用,同時也保持您的媒體庫的整潔和有序。