Đế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^^
- Bình luận