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() . '次阅读'; ?>
更多: