1. 程式人生 > >實現WordPress提交評論的時刪除該頁面的WP

實現WordPress提交評論的時刪除該頁面的WP

這篇文章依然是圍繞快取問題展開的,lnmp 環境下的 WordPress 使用 WP-Super-Cache 外掛,若要開啟 mod_rewrite 快取模式,需要在 nginx 裡面加入一些特定的規則,具體請見舊文:《nginx 下 wp super cache 的 mod_rewrite 規則》。

用過 WP-Super-Cache 外掛的應該都知道,在高階設定裡面有一項【當某頁面有新評論時,只重新整理該頁面的快取】的功能,從字面上來說,就是當有人在某篇文章發起評論時,將刪除該頁面的快取。

但是,經過我仔細測試發現,這個功能在我的部落格並沒有生效,個人猜測失敗的原因可能是使用了 ajax 無重新整理評論導致的。也就是採用 ajax 評論的方式,可能無法觸發 WP-Super-Cache 的刪除機制,從而導致這個功能的失效!總之,不管怎麼樣,反正在我的部落格失效了,現在就要想辦法解決這個問題。

既然你不行,那就我來!

簡單的加上幾句並不高階的 PHP 程式碼後,就實現了這個功能:

編輯主題下的 comments-ajax.php 檔案(啟用 ajax 評論的部落格才有),找到如下程式碼:

PHP
1 do_action('pre_comment_on_post',$comment_post_ID);

然後,在這行程式碼之後新增刪除快取程式碼,儲存即可:

PHP
123456789101112131415 //有人評論將自動刪除已存在快取$post_data=get_post($post->ID,ARRAY_A);$slug=$post_data['post_name'];$cache_s=WP_CONTENT_DIR."/cache/supercache/".$_SERVER['SERVER_NAME']."/".$post->ID.".html/index.html";$cache_sd=WP_CONTENT_DIR."/cache/supercache/".$_SERVER['SERVER_NAME']."/".$post->ID.".html";$cache_p=WP_CONTENT_DIR."/cache/supercache/".$_SERVER['SERVER_NAME']."/".$slug."/index.html";$cache_pd=WP_CONTENT_DIR."/cache/supercache/".$_SERVER['SERVER_NAME']."/".$slug;if(file_exists($cache_s)){unlink($cache_s);rmdir($cache_sd);}if(file_exists($cache_p)){unlink($cache_p);rmdir($cache_pd);}

現在有人提交評論時,將會判斷是否存在該頁快取,如果存在就刪除,從而實現了我要的功能。

本來想用 is_page() 和 is_single()來判斷頁面內容,從而簡化程式碼的,可惜不生效,至少用上面的笨方法了!反正能實現就可以了。