Cách hiển thị bài biết được đọc nhiều nhất trên WordPress

Trước đây, chúng tôi đã hướng dẫn cho các bạn cách tạo một trang các bài viết phổ biến trên WordPress bằng plugin. Plugin đó hoạt động rất tốt đối với mọi trang. Tuy nhiên, chúng tôi muốn tùy biến nhiều hơn nữa trong bố cục của mình, vì thế, chúng tôi quyết định thực hiện thao tác này mà không cần đến plugin. Trong bài viết này, chúng tôi sẽ chỉ cho bạn cách theo dõi và hiển thị bài viết được đọc nhiều trên WordPress mà không sử dụng bất kì một plugin nào.

popularpostsdemo

Đầu tiên, chúng tôi phải tạo ra một chức năng có thể đếm được số lượt xem bài viết và lưu trữ nó trong một khu vực riêng cho mỗi bài đăng. Để làm được điều này, dán mã dưới đây vào tệp tin giao diện functions.php hoặc sử dụng một plugin đặc biệt.

<pre>function wpb_set_post_views($postID) {
    $count_key = 'wpb_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);
    }
}
//To keep the count accurate, lets get rid of prefetching
remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0);

Giờ thì bạn đã có chức năng này, chúng ta cần để chức năng này trên các trang bài viết đơn lẻ. Bằng cách này thì tính năng sẽ biết chính xác số lượng lượt xem của bài viết. Để thực hiện thao tác này, bạn sẽ phải dán mã dưới đây vào trong vòng lặp bài viết đơn của mình :

wpb_set_post_views(get_the_ID());

Nếu bạn đang sử dụng giao diện con hoặc bạn muốn thực hiện việc này dễ dàng hơn, bạn chỉ cần thêm trình theo dõi vào phía trên đầu bằng hook wp_head. Hãy dán mã dưới đây vào tệp tin giao diện functions.php hoặc sử dụng plugin.

<pre>function wpb_track_post_views ($post_id) {
    if ( !is_single() ) return;
    if ( empty ( $post_id) ) {
        global $post;
        $post_id = $post->ID;    
    }
    wpb_set_post_views($post_id);
}
add_action( 'wp_head', 'wpb_track_post_views');

Once you have placed this, every time a user visits the post, the custom field will be updated.

Note: If you are using a caching plugin, this technique will NOT work by default. We are using W3 Total Cache, and it has the feature called Fragmented Caching. You can use that to make this work just fine. Here is what needs to be changed:

Sau khi bạn đã đặt nó vào, mỗi khi có một người dùng vào đọc bài viết, khu vực riêng kia sẽ được cập nhật.

Chú ý: Nếu bạn đang sử dụng một plugin cho bộ nhớ đệm, thì kĩ thuật này sẽ không hoạt động theo như mặc định. Chúng tôi đang sử dụng và nó có một đặc điểm gọi là (bộ nhớ đệm từng mảnh). Bạn có thể sử dụng nó để thực hiện thao tác này cũng được. Còn dưới đây là những gì cần phải được thay đổi:

<!-- mfunc wpb_set_post_views($post_id); --><!-- /mfunc -->

Bây giờ, bạn có thể sử dụng tất cả các công cụ hay ho như hiển thị số lượt xem, hoặc sắp xếp theo lượt xem. Hãy cùng xem những điều này được thực hiện như thế nào nhé.

Nếu bạn muốn hiển thị số lượt xem trên mỗi trang bài viết đơn (thường thì ở bên cạnh số lượt bình luận), thì việc đầu tiên bạn cần làm đó là dán mã dưới đây vào tệp tin giao diện functions.php hoặc sử dụng plugin.


<pre>function wpb_get_post_views($postID){
    $count_key = 'wpb_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 View";
    }
    return $count.' Views';
}

Sau đó dán vào vòng lặp bài viết mã sau:

wpb_get_post_views(get_the_ID());

Nếu bạn muốn sắp xếp bài đăng theo số lượt xem, bạn có thể sử dụng thông số wp_query post_meta để thực hiện việc này một cách dễ dàng. Ví dụ về truy vấn vòng lặp cơ bản nhất có thể trông như sau:

<pre><?php 
$popularpost = new WP_Query( array( 'posts_per_page' => 4, 'meta_key' => 'wpb_post_views_count', 'orderby' => 'meta_value_num', 'order' => 'DESC'  ) );
while ( $popularpost->have_posts() ) : $popularpost->the_post();

the_title();

endwhile;
?>

Để thêm thông số WP_Query khác như phạm vi thời gian, hãy tham khảo trang Wp_Query trên Codex.

Chúng tôi hi vọng bạn thích bài viết này!

Về tác giả

Duy Anh

Chào các bạn,

Mình là coder, đang sống và làm việc ở Mỹ. Mình thích viết lách nên muốn dành khoảng thời gian trống để chia sẻ các thủ thuật giúp các bạn xây dựng được trang web riêng của mình. Bạn nào cần xây dựng blog, web thì cứ ới, rảnh là mình giúp, tất cả FREE nhé!

Ý kiến cá nhân của bạn

bộ công cụ Wordpress hữu ích dành cho mọi website

Bộ công cụ hữu ích dành cho mọi website Wordpress

Bao gồm theme & plugin tốt nhất và được sử dụng nhiều nhất!

Xin vui lòng kiểm tra email để xác thực tài khoản!