在 WordPress 外掛 WP Fastest Cache 中,「刪除快取」的條件與機制主要依據以下幾個情況觸發,這些條件可分為「手動刪除」與「自動刪除」兩大類:
一、手動刪除快取的條件
這是由網站管理者在後台主動操作的:
- 清除全部快取(Delete Cache)
- 清除
wp-content/cache/all/
中的所有快取檔案。 - 包括 HTML 快取、CSS/JS 合併檔案等。
- 清除
- 清除快取和已合併的 CSS/JS(Delete Cache and Minified CSS/JS)
- 除了快取 HTML 檔,連同
wp-content/cache/wpfc-minified/
的檔案也一併清除。
- 除了快取 HTML 檔,連同
二、自動刪除快取的條件
這些是由 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 就可以在編寫文章更新或存檔時也額外刪除另一個頁面的快取