Sắp xếp bài viết theo lượng người xem WordPress

25 Tháng 6, 2024

Làm thế nào để biết được số lượng người đã xem bài viết của bạn? Hay nâng cao hơn chút nữa đó chính là sắp xếp bài viết theo lượng người xem. Ở bài viết này, mình sẽ giúp bạn giải quyết vấn đề đó.

Cách đếm số lượt xem bài viết trong WordPress

WordPress không có sẵn chức năng theo dõi lượt xem bài viết, nhưng chúng ta có thể thực hiện dễ dàng bằng cách sử dụng post meta. Dưới đây là hai hàm giúp lưu trữ và hiển thị số lượt xem bài viết.

Hiển thị số người xem bài viết

Để hiển thị được số người xem bài viết, bạn copy đoạn sau vào file function.php:

// Function hiển thị số lượng người xem.
function getPostViews($postID){
    $count_key = 'post_views_count';
    $count = get_post_meta($postID, $count_key, true);
    if($count==''){
        delete_post_meta($postID, $count_key);
        add_post_meta($postID, $count_key, '0');
        return "0";
    }
    return $count;
}
// Function đếm số người xem.
function setPostViews($postID) {
    $count_key = 'post_views_count';
    $count = get_post_meta($postID, $count_key, true);
    if($count==''){
        $count = 0;
        delete_post_meta($postID, $count_key);
        add_post_meta($postID, $count_key, '0');
    }else{
        $count++;
        update_post_meta($postID, $count_key, $count);
    }
}

Đoạn này bạn copy vào file single.php, hãy chắc chắn rằng bạn copy ở bên ngoài vòng lặp loop. Đoạn này có tác dụng, khi bạn vào bài viết, nó sẽ bắt đầu đếm bài viết ở file single đó. Tương tự ở page hay các post-type khác. Bạn muốn đếm xem ở trang nào, bạn copy đoạn này vất ở đầu trang đó:

<?php setPostViews(get_the_ID()); ?>

Giờ bạn muốn hiển thị số lượng người xem bài viết, bạn chỉ cần copy đoạn sau:

<?php echo getPostViews(get_the_ID()); ?>
Bài viết này đã có 45 người xem
Bài viết này đã có 45 người xem

Sắp xếp các bài viết dựa trên số lượng người xem

Khi đã có số lượt xem, chúng ta có thể dễ dàng sắp xếp bài viết theo lượt xem cao nhất để hiển thị những nội dung hấp dẫn lên đầu. WordPress hỗ trợ truy vấn dựa trên meta_key, giúp lấy danh sách bài viết theo thứ tự từ nhiều lượt xem nhất đến ít nhất.

Chèn đoạn code sau vào template nơi bạn muốn hiển thị danh sách bài viết phổ biến:

<?php $loop = new WP_Query( $args = array(
    'post_type'      => 'post', // Lấy bài viết 
    'posts_per_page' => 5, // Lấy 5 bài viết
    'meta_key' => 'post_views_count',
    'orderby' => 'meta_value_num', 
    'order' => 'DESC', // Lấy bài viết theo thứ tự giảm dần của lượt xem
)); 
if ( $loop->have_posts() ) { ?>
    <?php while ( $loop->have_posts() ) : $loop->the_post(); ?>
        <span>
            <?php the_title() ?> có <?php echo getPostViews(get_the_ID()); ?> lượt xem
        </span>
    <?php endwhile ?>
<?php }; ?>
Kết quả
Kết quả

Một số m ẹo tối ưu hiệu suất khi sắp xếp theo lượt xem

  • Tránh load dữ liệu quá lớn: Chỉ lấy một số lượng bài viết nhất định (posts_per_page).
  • Sử dụng transient caching: Lưu kết quả truy vấn vào bộ nhớ cache để giảm tải database.
  • Tạo index cho post meta: Nếu website có nhiều bài viết, bạn có thể tạo index trên bảng wp_postmeta để truy vấn nhanh hơn.

Code ngăn spam lượt xem bằng IP

Một vấn đề phổ biến là mỗi lần tải lại trang, lượt xem sẽ tăng lên không kiểm soát. Để hạn chế điều này, chúng ta có thể chỉ tính lượt xem khi người dùng mới truy cập bài viết sau một khoảng thời gian nhất định.

Chỉnh sửa hàm setPostViews như sau để tránh spam:

function setPostViews($postID) {
    $count_key = 'post_views_count';
    $user_ip = $_SERVER['REMOTE_ADDR']; // Lấy IP của người truy cập
    $key = 'viewed_' . $postID . '_' . $user_ip;
    if (!isset($_COOKIE[$key])) {
        setcookie($key, '1', time() + 3600, '/'); // Giới hạn trong 1 giờ
        $count = get_post_meta($postID, $count_key, true);
        if ($count == '') {
            $count = 0;
            delete_post_meta($postID, $count_key);
            add_post_meta($postID, $count_key, '1');
        } else {
            $count++;
            update_post_meta($postID, $count_key, $count);
        }
    }
}

Việc hiển thị và sắp xếp bài viết theo lượt xem trong WordPress giúp tối ưu trải nghiệm người dùng và nâng cao hiệu suất SEO. Bạn có thể áp dụng những phương pháp này ngay trên website của mình để giúp nội dung nổi bật hơn và thu hút nhiều lượt truy cập hơn. Nếu bạn gặp khó khăn trong quá trình thực hiện, hãy để lại bình luận để Gini Webseo hỗ trợ nhé!

guest
0 Góp ý
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất
Phản hồi nội tuyến
Xem tất cả bình luận
Tin tức liên quan
Hiển thị mô tả ngắn trong WordPress
Khi hiển thị bài viết ở trang lưu trữ hay trang chủ, ngoài tiêu đề và ảnh đại diện, thứ mà không thể thiếu chính là mô tả ngắn...
Hướng dẫn hiển thị sản phẩm đã xem trong Woocommerce
Woocommerce có sẵn hook hay Widget hỗ trợ hiển thị sản phẩm đã xem nhưng giao diện thì có thể không theo ý bản thân hay không phù hợp...
Hướng dẫn tạo sản phẩm Woocommerce có biến thể đẹp mắt
Mình đọc bình luận thấy khá nhiều bạn kêu gặp khó khăn trong vấn đề tạo sản phẩm có biến thể, hay sản phẩm có biến thể không được...