WordPress 利用鉤子(Hooks)清除頁面快取

記下來由於有使用快取的緣故,常常發文或有網友留言後頁面都不會更新,對於小蛙常常要測試修改一些東西的時候被快取誤導 Orz … 這篇記錄一下怎麼用 WordPress 內建的鉤子來解決這件事情。

有興趣了解更多的網友可以到 WordPress的Hook機制與原理 看看,小蛙直接進主題。

什麼是鉤子(hooks)

WordPress 有一種叫做鉤子的機制,在某些情況或條件發生的時候,去「鉤」起一連串相關要處理的功能,List of all WordPress hooks 可以看到所有的鉤子列表。以上面的文章舉例,WordPress 載入網頁的時候會呼叫一個 wp_head() 來載入相對應 html head 的部份,如果我們希望在執行 wp_head 的時候額外多做一些事情,就可以在佈景主題下的 functions.php 加入

add_action('wp_head', 'extra_act');
function  extra_act () {
   ... 要做的事情放在這裡 ...
} 

透過 add_action 來告訴 WordPress 說,當你執行到 wp_head 的時候,我要多掛上一件叫做 extra_act 的事情麻煩你一起處理,在 Drupal 也同樣存在 Hooks 的概念。知道鉤子是幹嘛的之後,就可以開始進行我們要做的事情了。

查找能用的鉤子

List of all WordPress hooks 可以查到可以用的鉤子,小蛙要的功能是當使用者留言之後,及小蛙的文章有變動的時候,把 pagespeed module 及 php 的快取清除,開始來找跟留言及文章變動有關的鉤子。

小蛙找到 transition_post_statuscomment_post 這兩個鉤子,看起來符合需求,開始加工需要的功能

// 加入文章狀態改變的鉤子
add_action('transition_post_status', 'post_changed');
function post_changed($new_status, $old_status=null, $post=null) {
    if('publish' == $new_status || 'publish' == $old_status){
        // 清除快取,小蛙是用 shell_exec 執行系統指令
    }
}

文章新狀態是 “發布” 的情況下,以及舊狀態是 “發布” 的情況下才做清除快取,帶入到實際狀況就是文章從所有狀態轉成 “發布”,表示新發文章(無論從垃圾桶叫回來、草稿發布 …)都會符合新狀態為 “發布” 的情況。而舊狀態為 “發布” 的情況則是原本已發布的網頁,刪除或是轉換回草稿,都會符合舊狀態為 “發布” 的條件。

訪客留言部份程式碼如下,只要有新的留言進來,就會執行清除快取,讓留言的使用者可以馬上看到剛剛的留言~

add_action('comment_post', 'comment_posted');
function comment_posted() {
     // 清除快取,小蛙是用 shell_exec 執行系統指令 
}

到這邊就完成小蛙的需求囉!留個記錄給有需要的人~

WordPress 5.0 系列:

    2 個回應

    1. Audi Lu表示:

      好文! transition_post_status 感覺有點冷門,但用來清文章快取很剛好!
      btw, 謝謝引用~

      • 黃小蛙表示:

        哈哈 ~ 看完您的文章小弟才了解 hook 真正的原理及用法,感謝您!

    發佈留言

    發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

    這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料