9 mins read2022/08/03

自訂 WP Rocket 清除快取的時機與邏輯


什麼是 WP Rocket

wp rocket

WP Rocket 不僅僅是一個 WordPress 快取插件。WP Rocket 提高加載時間、 PageSpeed 分數和優化核心 Web 生命力的最強大的解決方案。

詳細介紹可以參考 WP Rocket 外掛教學:WordPress 加速外掛簡介

 

WP Rocket 的快取刷新機制

發佈文章的當下,馬上刷新該文章的快取

更新文章後,只會刷新該篇文章的快取

但其他有用到這篇文章的頁面,例如你的文章總覽頁 / 彙整頁,是不會自動刷新快取

你也可以設定成,針對 總覽頁 / 彙整頁 不做快取,但這樣就沒有用到快取的優勢
所以經常你還要手動去按一下”清除快取”

如果你是馬上發文,馬上按下“清除快取”,這樣你的文章彙整頁才會出現你的最新文章

 

那如果是預約發文呢?

假設你是集中在周末,把一整個禮拜的文章量都寫完 ( 絕對不是在說我 )

然後,設定每天排程發文

排程發文發布後,你如果不刷新全站的快取,在其他有用到這篇文章的頁面,例如你的文章總覽頁 / 彙整頁就還是看不到這篇文章的存在

導致你還要特地上來清除快取

 

WP Rocket 提供的快取刷函式

完整文件可以參考 WP Rocket 官方文件

直接看代碼,可以打在你的 functions.php



    // 下面有用到的 if 判斷式,是用來判斷 WP Rockey 是否有啟用
    // 如果沒有 if 判斷式,當你關閉 WP Rocket 時網站會整個掛掉

    // 清除快取
    if (function_exists('rocket_clean_domain')) {
          rocket_clean_domain();
    }

    // 清除最小化 CSS 跟 Javascript 文件
    if (function_exists('rocket_clean_minify')) {
         rocket_clean_minify();
    }

    // 清除預載入快取
    if (function_exists('run_rocket_sitemap_preload')) {
         run_rocket_sitemap_preload();
    }

 

清除快取的時機

有了上述的函式,你可以運用 Hooks 來控制刷快取的時機,或者用 Cron 的方式來定期刷快取

這邊,我的目的是: 排程發文後,要能自動刷新網站的快取

因此會用到 transition_post_status 這隻 Hooks



add_action('transition_post_status', 'clear_wprocket_cache', 10, 3);


function clear_wprocket_cache($new_status, $old_status, $post)
{


    // 這個 if 寫得是,只有在 文章 與 頁面 狀態變更時,才會刷新快取
    if ($post->post_type === 'post' || $post->post_type === 'page' ) {
 

        // 下面有用到的 if 判斷式,是用來判斷 WP Rockey 是否有啟用
        // 如果沒有 if 判斷式,當你關閉 WP Rocket 時網站會整個掛掉

        // 清除快取
        if (function_exists('rocket_clean_domain')) {
              rocket_clean_domain();
        }

        // 清除最小化 CSS 跟 Javascript 文件
        if (function_exists('rocket_clean_minify')) {
             rocket_clean_minify();
        }

        // 清除預載入快取
        if (function_exists('run_rocket_sitemap_preload')) {
             run_rocket_sitemap_preload();
        }
        
    }
}

 

覺得不錯的話,請給我點個推薦

您的支持與鼓勵是我們前進的最大動力!