WordPress 當文章存檔或更新時也想刪除其它頁面的快取要如何處理?

在 WordPress 外掛 WP Fastest Cache 中,「刪除快取」的條件與機制主要依據以下幾個情況觸發,這些條件可分為「手動刪除」與「自動刪除」兩大類:

一、手動刪除快取的條件

這是由網站管理者在後台主動操作的:

  1. 清除全部快取(Delete Cache)
    • 清除 wp-content/cache/all/ 中的所有快取檔案。
    • 包括 HTML 快取、CSS/JS 合併檔案等。
  2. 清除快取和已合併的 CSS/JS(Delete Cache and Minified CSS/JS)
    • 除了快取 HTML 檔,連同 wp-content/cache/wpfc-minified/ 的檔案也一併清除。

二、自動刪除快取的條件

這些是由 WP Fastest Cache 自動根據某些觸發事件來刪除快取的情況:

1. 發表或更新文章/頁面時

  • 預設會清除與該文章有關的快取(如:該文章本身、首頁、分類頁、標籤頁等)。

2. 留言新增或審核通過時

  • 新增留言時,會刪除該文章的快取。

3. 選用「定期清除快取」功能

  • 外掛提供定時清除快取的功能(例如每小時、每天)。
  • 可以在外掛設定中設定清除頻率。

4. 使用者自定義排程(若開發者透過程式碼設定)

  • 可使用 wpfc_delete_cache() 這類函式透過 PHP 呼叫來手動清除特定快取。
  • 也可用 do_action('wpfc_clear_cache') 來觸發清除事件。

問題:無法自由刪除任意快取

在網站的實務上有時需要在特定條件下刪除特定頁面的快取。但上述的方法皆不適合。因為一但清除全部的快取時網站會有一段時間除了 cpu 會變較高之外頁面讀取的反應也會變慢。這時就要針對特定條件下增加一下自定的 function 來處理。如程式所列

//由於快取關系,更新文章不會自動更新此頁。故用此function 在文章存檔後刪此頁快取
function delete_specific_cache_file_on_post_save($post_id) {
    // 避免自動儲存觸發
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
        return;
    }

    // 設定快取檔案路徑
    $cache_file = WP_CONTENT_DIR . '/cache/all/2025-fifa-cwc/index.html';

    // 如果檔案存在且是檔案,就刪除它
    if (file_exists($cache_file) && is_file($cache_file)) {
            @unlink($cache_file); // 刪除 index.html
            error_log("deleted 2025-fifa-cwc",0);//記錄。可拿掉
    }
}
add_action('save_post', 'delete_specific_cache_file_on_post_save', 10, 3);

把這程式寫進子主題的 function.php 就可以在編寫文章更新或存檔時也額外刪除另一個頁面的快取

延伸閱讀

blog.ocam.live
blog.ocam.live

關注科技新聞、SEO、人工智慧、電玩模擬器、程式設言、與 IT 日常等議題,深入簡出文章的說明並持續追蹤相關新聞的發展與報導。