Physical Address

304 North Cardinal St.
Dorchester Center, MA 02124

在 WordPress 中加入自訂 Cookies

在〈WordPress 的內建快取機制 transient〉中,我原本嘗試解決的問題如下:

網站使用者只會在該工作階段 (session) 中第一次載入時,才會顯示預載動畫 (preload animation)。

原本嘗試透過 transient 的快取機制來處理,但因為 transient 快取的狀態會適用於整個資料庫查詢,因此會導致使用者 A 播放完影片後,其他人看不到影片的窘境。因此最後還是決定透過 Cookie 的機制,來記錄使用者是否已經看過影片。

由於 WordPress 內建的 Cookie 方法是針對使用者登入狀態的 login cookies,以及留言資訊的 comment cookies 設計的,因此並不適合直接用內建的 cookies 來判斷,必須透過 setcookie() 的方式自行定義。

關於 setcookie

根據 PHP 的官方文件,setcookie 的基本語法如下:

setcookie( 'Cookie名稱', 'Cookie 值', 有效期限, 'Cookie 路徑' );
/* 有效期限與路徑也改寫成陣列的方式 */
setcookie( 'Cookie名稱', 'Cookie 值', array(
  'expires'    => time() + 秒數,
  'path'       => 'Cookie 路徑',
) );

如果 expires 設為 0,那麼這個 Cookie 會在此次工作階段結束後刪除。聽起來就像是我們一開始想要解決的問題。

在 WordPress 中插入 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 }
}
Eric Chuang
Eric Chuang

正職是廣告行銷人員,因為 Google Tag Manager 的關係開始踏入網站製作的領域,進一步把 WordPress 當成 PHP + HTML + CSS + JavaScript 的學習教材。此外,因為工作的關係,曾經用 Automattic 的 Underscores (_s) 替客戶與公司官網進行全客製化佈景主題開發。

發佈留言

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

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