Đếm lượt xem bài viết không cần plugin – hỗ trợ cache – trong wordpress

Cập nhật lần cuối 16/08/2017 by trong WordPress vào 18/11/2013 có 1958 Views

Đếm lượt xem bài viết trong wordpress

Đoạn code dưới đây sẽ giúp bạn đếm lượt xem bài viết không cần sử dụng plugin. Chỉ cần vài đoạn code đơn giản 🙂 Chú ý code dưới đây hỗ trợ cho các bạn sử dụng cache thoải mái nha. Không phải lo lắng vấn đề không đếm lượt xem bài viết khi sử dụng cache nữa

Thêm vào file functions.php

Hàm dưới đây giúp bạn lấy lượt xem và đếm lượt xem của 1 post nào đó. Trong đó có sử dụng ajax để có thể đếm lượt view khi sử dụng cache. Chèn code vào file functions.php

function getPostViews($postID, $is_single = true){
   global $post;
   if(!$postID) $postID = $post->ID;
    $count_key = 'post_views_count';
    $count = get_post_meta($postID, $count_key, true);
    if(!$is_single){
        return '<span class="svl_show_count_only">'.$count.' Views</span>';
    }
    $nonce = wp_create_nonce('devvn_count_post');
    if($count == "0"){
        delete_post_meta($postID, $count_key);
        add_post_meta($postID, $count_key, '0');
        return '<span class="svl_post_view_count" data-id="'.$postID.'" data-nonce="'.$nonce.'">0 View</span>';
    }
    return '<span class="svl_post_view_count" data-id="'.$postID.'" data-nonce="'.$nonce.'">'.$count.' Views</span>';
}

function setPostViews($postID) {
    $count_key = 'post_views_count';
    $count = get_post_meta($postID, $count_key, true);
    if($count == "0" || empty($count) || !isset($count)){
        add_post_meta($postID, $count_key, 1);
        update_post_meta($postID, $count_key, 1);
    }else{
        $count++;
        update_post_meta($postID, $count_key, $count);
    }
}

add_action( 'wp_ajax_svl-ajax-counter', 'svl_ajax_callback' );
add_action( 'wp_ajax_nopriv_svl-ajax-counter', 'svl_ajax_callback' );
function svl_ajax_callback() {
    if ( !wp_verify_nonce( $_REQUEST['nonce'], "devvn_count_post")) {
        exit();
    }
    $count = 0;
   if ( isset( $_GET['p'] ) ) {
      global $post;
      $postID = intval($_GET['p']);
      $post = get_post( $postID );
      if($post && !empty($post) && !is_wp_error($post)){
         setPostViews($post->ID);
         $count_key = 'post_views_count';
          $count = get_post_meta($postID, $count_key, true);
      }
   }
   die($count.' Views');
}

add_action( 'wp_footer', 'svl_ajax_script', PHP_INT_MAX );
function svl_ajax_script() {
   if(!is_single()) return;
   ?>
   <script>
   (function($){
      $(document).ready( function() {
         $('.svl_post_view_count').each( function( i ) {
            var $id = $(this).data('id');
            var $nonce = $(this).data('nonce');
            var t = this;
            $.get('<?php echo admin_url( 'admin-ajax.php' ); ?>?action=svl-ajax-counter&nonce='+$nonce+'&p='+$id, function( html ) {
               $(t).html( html );
            });
         });
      });
   })(jQuery);
   </script>
   <?php
}

Cách sử dụng

Chèn code sau vào trong vòng lặp while() chỗ bạn muốn hiển thị lượt view hoặc bất kỳ chỗ nào kèm theo ID bài viết cụ thể

//Trong vòng lặp while của file single. Cái này vừa hiển thị vừa có chức năng đếm lượt xem
echo getPostViews(get_the_ID());
//Chèn ở bất kỳ chỗ nào nhưng yêu cầu có ID bài viết cụ thể vd
echo getPostViews(12); // Hiển thị số lượt views của bài viết với ID của bài viết là 12
//Cách hiển thị số lượt xem mà không đếm lượt xem, thường dùng ở widget hoặc trang chủ hoặc trang archive
echo getPostViews(get_the_ID(), false);

Thêm hiển thị số lượt xem bài viết trong admin


Bạn chèn code này vào file functions.php nhé

add_filter('manage_posts_columns', 'posts_column_views');
add_action('manage_posts_custom_column', 'posts_custom_column_views',5,2);
function posts_column_views($defaults){
    $defaults['post_views'] = __( 'Views' , '' );
    return $defaults;
}
function posts_custom_column_views($column_name, $id){
    if( $column_name === 'post_views' ) {
        echo getPostViews( get_the_ID(), false);
    }
}

Truy vấn để hiển thị các bài viết có lượt views nhiều nhất.

$q = new WP_Query(array(
    'post_type'         =>  'post',
    'posts_per_page'    =>  5,
    'meta_key'          =>  'post_views_count',
    'orderby'           =>  'meta_value_num',
    'order'             =>  'DESC'
));
if($q->have_posts()):
    echo '<ul>';
    while ($q->have_posts()):$q->the_post();
        echo '<li>' . get_the_title() . ' - ' . getPostViews( get_the_ID(), false) . '</li>';
 endwhile;
 echo '</ul>';
endif; wp_reset_query();

Chúc các bạn thành công^^

Đếm lượt xem bài viết không cần plugin – hỗ trợ cache – trong wordpress
4.4 (88%) 5 votes
  • Bình luận
Có thể bạn quan tâm
x