前言
在許多網站中,追蹤文章的瀏覽次數是一個常見需求,可以用來分析內容受歡迎程度或作為推薦依據。這段 PHP 程式碼示範如何在 WordPress 單篇文章頁面中,利用文章自訂欄位(post meta)記錄瀏覽次數,適合有基本 WordPress 開發經驗的工程師或自學者。
透過 wp_head 鉤子更新瀏覽次數
WordPress 提供了多種鉤子(hook)讓開發者在不同時機點執行程式碼。這裡選擇使用 wp_head,代表每次載入頁面時會執行計數函式。
add_action( 'wp_head', 'ks_track_post_views' );
這樣可以確保在文章頁面載入時,瀏覽次數會即時更新。
計數函式邏輯解析
函式 ks_track_post_views 主要做以下幾件事:
- 使用
is_single()判斷目前是否為單篇文章頁,避免在首頁或列表頁誤計數。 - 取得當前文章 ID。
- 從文章自訂欄位
ks_post_views讀取目前瀏覽次數。 - 若已有數值,將其轉為整數後加一;若無則初始化為 1。
- 更新文章自訂欄位,寫入新的瀏覽次數。
function ks_track_post_views() {
if ( is_single() ) {
global $post;
$post_id = $post->ID;
$views = get_post_meta( $post_id, 'ks_post_views', true );
$views = $views ? intval( $views ) + 1 : 1;
update_post_meta( $post_id, 'ks_post_views', $views );
}
}
這段程式碼利用 WordPress 內建的 get_post_meta 和 update_post_meta 函式操作文章自訂欄位,避免直接操作資料庫,維持良好的相容性。
實務應用與優化建議
- 緩存問題:如果網站使用快取機制,可能會導致瀏覽次數無法即時更新,建議搭配 Ajax 或其他非快取方式更新計數。
- 防止重複計數:目前邏輯無法區分同一用戶多次刷新,若需更精確的統計,可結合 Cookie 或 Session 控制。
- 效能考量:大量文章同時更新 meta 可能影響效能,必要時可考慮批次更新或使用專門的統計外掛。
常見問題與注意事項
- 使用
wp_head會在每次頁面載入時執行,若頁面包含大量資源,可能會稍微增加伺服器負擔。 - 確保文章自訂欄位名稱不與其他外掛或主題衝突,這裡使用
ks_post_views作為前綴。
完整程式碼
<?php
function ks_track_post_views() {
if ( is_single() ) {
global $post;
$post_id = $post->ID;
$views = get_post_meta( $post_id, 'ks_post_views', true );
$views = $views ? intval( $views ) + 1 : 1;
update_post_meta( $post_id, 'ks_post_views', $views );
}
}
add_action( 'wp_head', 'ks_track_post_views' );