WordPress 支持缓存的文章浏览统计代码

现在很多的主题都使用了文章浏览计数功能,这个功能的确是非常好的,实现起来也不难。网上关于这个浏览统计的教程也不少,但是几乎都不支持缓存,也就是当你安装了一些例如 WP Super Cache 之类的缓存插件的时候就无法进行正常的缓存。

WP-Postviews 这个非常热门的统计插件是支持在缓存下统计的,所以很多人都在主题明明支持缓存的时候还要使用这个插件。WP-Postviews 的缓存统计原理是利用 AJAX,其实实现起来也比较简单。

本文就给你一个完美的缓存统计代码,支持在缓存的时候使用 Ajax 统计。

/**
 *访问计数
 */
 function netnote_statistics_visitors(){
 if( !is_single() ) return;
 if( defined( 'WP_CACHE' ) && WP_CACHE ){
 echo '
 <script type="text/javascript" id="statistics-visitors">
 (function(){
 var ajax_obj = window.XMLHttpRequest ? new XMLHttpRequest() : ActiveXObject( "Microsoft.XMLHTTP" );
 ajax_obj.open( "POST", "' . esc_url( admin_url( 'admin-ajax.php' ) ) . '", true );
 ajax_obj.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded" );
 ajax_obj.send( "action=visitors&post_ID=' . get_the_ID() . '" );
 })();
 </script>';
 return;
 }
 $post_views = (int) get_post_meta( get_the_ID(), 'views', true );
 update_post_meta( get_the_ID(), 'views', $post_views + 1 );
 }
 add_action( 'wp_head', 'netnote_statistics_visitors', 2 );

/**
 *解决缓存问题
 */
 function netnote_statistics_cache(){
 if( empty( $_POST['post'] ) ) return;
 if( get_post_type( $_POST['post'] ) != 'post' || get_post_status( $_POST['post'] ) != 'publish' ) return;
 $post_views = (int) get_post_meta( $_POST['post'], 'views', true );
 update_post_meta( $_POST['post'], 'views', $post_views + 1 );
 }
 add_action( 'wp_ajax_nopriv_visitors', 'netnote_sattistics_cache' );
 add_action( 'wp_ajax_visitors', 'netnote_statistics_cache' );

/**
 *获取计数
 */
 function netnote_post_views( $post = null ){
 $post = get_post( $post );
 $views = (int) get_post_meta( $post->ID, 'views', true );
 return number_format_i18n( $views );
 }

将上边的代码放到当前主题的 functions.php 里,在文章循环里使用下边的代码调用:

<?php echo netnote_post_views() . '次阅读'; ?>

更多:

WordPress非插件添加文章浏览次数统计功能

原文来自http://www.endskin.com/cache-visitors/