Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
在〈WordPress 的內建快取機制 transient〉中,我原本嘗試解決的問題如下:
網站使用者只會在該工作階段 (session) 中第一次載入時,才會顯示預載動畫 (preload animation)。
原本嘗試透過 transient 的快取機制來處理,但因為 transient 快取的狀態會適用於整個資料庫查詢,因此會導致使用者 A 播放完影片後,其他人看不到影片的窘境。因此最後還是決定透過 Cookie 的機制,來記錄使用者是否已經看過影片。
由於 WordPress 內建的 Cookie 方法是針對使用者登入狀態的 login cookies,以及留言資訊的 comment cookies 設計的,因此並不適合直接用內建的 cookies 來判斷,必須透過 setcookie() 的方式自行定義。
根據 PHP 的官方文件,setcookie 的基本語法如下:
setcookie( 'Cookie名稱', 'Cookie 值', 有效期限, 'Cookie 路徑' ); /* 有效期限與路徑也改寫成陣列的方式 */ setcookie( 'Cookie名稱', 'Cookie 值', array( 'expires' => time() + 秒數, 'path' => 'Cookie 路徑', ) );
如果 expires 設為 0,那麼這個 Cookie 會在此次工作階段結束後刪除。聽起來就像是我們一開始想要解決的問題。
如果要在 WordPress 中使用 setcookie() 的話,必須透過 init 這個勾點,如下:
add_action( 'init', 'hyc_setcookie' ); function hyc_setcookie() { if ( ! isset( $_COOKIE['preload_played'] ) ) { setcookie( 'preload_played', 'played', 0, '/' ); unset( $_COOKIE['preload_played'] ); // 如果已經有 preload_played 的話,就把這個變數取消掉 } }
接下來,就可以透過 if ( isset( $_COOKIE[‘preload_played’ ) ) 這個判斷式,來決定是否要載入動畫的相關與語法了。譬如:
add_action( 'wp_head', 'hyc_load_preload' ); function hyc_load_preload() { if ( isset( $_COOKIE['preload_played'] ) ) { return; } else { ?> <script> // 預載動畫語法 </script> <?php } }