Vấn đề gặp phải với bộ đếm truy cập theme Soledad
Khi sử dụng theme Soledad cho WordPress, bạn sẽ thấy theme có sẵn chức năng đếm lượt xem bài viết. Tuy nhiên, theo mặc định, hệ thống này:
- Đếm cả người dùng đã đăng nhập (admin, editor…)
- Đếm cả bot tìm kiếm như Googlebot, Bingbot
- Tăng view mỗi lần reload trang, kể cả khi không phải lượt truy cập thực
Điều này khiến số liệu bị thổi phồng, không phản ánh đúng mức độ quan tâm thực sự của người đọc. Nếu bạn đang xây dựng hệ thống bài viết phổ biến, hoặc dùng lượt xem để đánh giá nội dung, thì việc kiểm soát hệ thống đếm view là rất cần thiết. Bởi vậy, hãy cùng CodecungAI xử lý vấn đề này nhé.
Từng kiểm soát bộ đếm view của theme Soledad
1. Cơ chế hoạt động của hệ thống đếm view
Theme Soledad tích hợp sẵn chức năng đếm lượt xem bài viết thông qua hàm penci_set_post_views($postID)
. Cơ chế hoạt động gồm:
- Khi người dùng truy cập bài viết, theme gọi hàm
penci_set_post_views()
để tăng số lượt xem. - Số lượt xem được lưu vào meta field của bài viết trong cơ sở dữ liệu (
post_meta
). - Theme có thể hiển thị số lượt xem bằng
penci_get_post_views($postID)
hoặc dùng để sắp xếp bài viết phổ biến.
Vị trí gọi hàm
Hàm penci_set_post_views()
thường được gọi trực tiếp trong file single.php
của theme, hoặc thông qua AJAX nếu tùy chọn đó được bật.
2. Cách kiểm soát lượt xem hiệu quả
Bước 1: Ghi đè hàm penci_set_post_views()
trong child theme
Tạo hoặc mở file functions.php
trong child theme và thêm đoạn sau:
if (!function_exists('penci_set_post_views')) {
function penci_set_post_views($postID) {
if (is_user_logged_in() || wp_is_bot()) {
return; // Không đếm view nếu là người dùng đã đăng nhập hoặc bot
}
$count_key = penci_get_postviews_key();
$count = get_post_meta($postID, $count_key, true);
if ($count == '') {
$count = 0;
delete_post_meta($postID, $count_key);
add_post_meta($postID, $count_key, $count);
} else {
++$count;
update_post_meta($postID, $count_key, $count);
}
}
}
function wp_is_bot() {
$bots = array('Googlebot', 'Bingbot', 'Slurp', 'DuckDuckBot', 'YandexBot', 'Baiduspider');
$agent = $_SERVER['HTTP_USER_AGENT'] ?? '';
foreach ($bots as $bot) {
if (stripos($agent, $bot) !== false) {
return true;
}
}
return false;
}
Bước 2: Kiểm tra theme có cho phép ghi đè không
Mở file functions.php
của theme gốc và kiểm tra xem hàm penci_set_post_views()
có được bọc trong if (!function_exists(...))
. Nếu có, bạn có thể ghi đè như trên.
Gợi ý tính năng mở rộng
Sau khi kiểm soát được hệ thống đếm view, bạn có thể phát triển thêm các tính năng sau:
Tính năng | Mô tả |
🔥 Bài viết phổ biến | Hiển thị top bài viết theo lượt xem (ngày, tuần, tháng) |
📊 Biểu đồ thống kê | Vẽ biểu đồ lượt xem bằng Chart.js hoặc Google Charts |
🎯 Badge tự động | Gắn nhãn “Hot”, “Top tuần” lên bài viết có lượt xem cao |
📥 Thông báo cho tác giả | Gửi email khi bài viết vượt mốc lượt xem |
🧹 Ẩn bài viết ít view | Tự động ẩn bài viết có lượt xem thấp sau X ngày |
🔎 Bộ lọc bài viết | Cho phép người dùng lọc theo lượt xem cao/thấp |
Công cụ hỗ trợ
- Query Monitor: Kiểm tra hàm nào đang được gọi, giúp debug dễ dàng.
- Advanced Custom Fields (ACF): Tạo giao diện hiển thị view trong admin.
- WP Cron hoặc Action Scheduler: Tự động xử lý thống kê theo lịch.
Kết luận
Việc kiểm soát lượt xem không chỉ giúp bạn có dữ liệu chính xác mà còn mở ra nhiều cơ hội để tăng tương tác, tối ưu nội dung và cải thiện trải nghiệm người dùng. Theme Soledad đã cung cấp nền tảng tốt, và bạn hoàn toàn có thể mở rộng theo cách riêng của mình.
Nếu bạn muốn mình giúp viết widget hiển thị top view, tạo shortcode, hoặc tích hợp biểu đồ thống kê, mình sẵn sàng đồng hành cùng bạn!
Xem thêm: Thêm chức năng xóa bài viết là xóa ảnh cho website WordPress