Đế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
Để duy trì blog nên mình có làm aff cho 1 số bên hosting. Nhưng dù aff mình cũng chọn 1 số nhà cung cấp uy tín về chất lượng và support nên các bạn cứ yên tâm nhé.
Nếu có mua hosting mà có trong list dưới đây các bạn click vào link trước khi mua để ủng hộ mình nhé. Mình cảm ơn nhiều
- Azdigi: Giá rẻ thì dùng gói Pro Gold Hosting còn chất lượng hơn thì em khuyên dùng Business Hosting. Có điều kiện thì lên VPS nhé
- Tino hosting
- iNet
- Nước ngoài thì Vultr
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