
Có rất nhiều plugin hỗ trợ đếm và hiển thị số lượt xem của bài viết trên wordpress nhưng vì một vài lý do nào đó mà nhiều bạn không muốn sử dụng plugin, nên bài viết này mình giới thiệu tới các bạn đếm và hiển thì số lượt xem bài viết không sử dụng plugin. Lưu ý đoạn code dưới đây có hỗ trợ cache nên các bạn thoải mái sử dụng không lo vấn đề không đếm được lượt xem khi dùng cache.
Thêm code đếm và hiển thị lượt xem cho bài viết
Đầu tiên ta thêm đoạn code này vào file functions.php của theme mình đang sử dụng.
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 }
Tiếp tục mở file single.php và thêm đoạn sau vào vị trí mà bạn muốn hiển thị. Lưu ý đoạn code này không nhất thiết là thêm vào file single.php cái này còn tùy thuộc vào theme của bạn đang sử dụng nữa.
<span class="count-views"><?php echo getPostViews(get_the_ID()); ?> </span>
Thêm CSS cho cái hiển thị lượt xem, cái này tùy mỗi bạn có thể tùy chỉnh theo ý của mình hoặc không cần thêm cũng được.
.count-views:before { content: "\f06e"; color: #f96e5b; display: inline-block; font-size: 14px; font-family: 'FontAwesome'; margin: auto; padding: 5px; } span.count-views { color: #f96e5b; }
Như vậy là xong, lưu lại và tận hưởng kết quả thôi.
Code này dành cho bạn nào cần hiển thị lượt xem bài viết trong admin. Ta mở file functions.php rồi thêm vào.
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); } }
Đây là kết quả:
Chúc các bạn thành công !
Bạn có thể làm một video hưỡng dẫn không k ạ
Bạn cứ làm theo hướng dẫn bài viết là đc, nếu thắc mắc chỗ nào bạn cứ gửi tin nhắn nếu hỗ trợ được mình sẵn sàng hỗ trợ bạn.
Em làm mà toàn bị lỗi bác ạ 🙁
Nó bị lỗi như thế nào bạn nhỉ