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_status
及 comment_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 系列:
好文! transition_post_status 感覺有點冷門,但用來清文章快取很剛好!
btw, 謝謝引用~
哈哈 ~ 看完您的文章小弟才了解 hook 真正的原理及用法,感謝您!