wordpress 文章访问数柱状图算法
08
04 月

wordpress 文章访问数柱状图算法

某日无聊有了这个想法,用柱状图直观表示访问次数。最后做出来的效果如下:http://xinyo.org/导航/

首先得解决的是统计。关于访客统计,有比较成熟的插件,如WP-PostViews ,也有不少人自己代码解决,下面我COPEY一段别人的劳动成果,转来转去我都不知道原作者是谁了。

1.wordpress访客统计代码

/* 访问计数 */
function record_visitors()
{	if (is_singular())
	{
	  global $post;
	  $post_ID = $post->ID;
	  if($post_ID)
	  {	  $post_views = (int)get_post_meta($post_ID, 'views', true);
		  if(!update_post_meta($post_ID, 'views', ($post_views+1)))
		  {add_post_meta($post_ID, 'views', 1, true);}
	  }
	}
}
add_action('wp_head', 'record_visitors');  

/// 函数名称:post_views
/// 函数作用:取得文章的阅读次数
function post_views($before, $after, $echo)
{
  global $post;
  $post_ID = $post->ID;
  $views = (int)get_post_meta($post_ID, 'views', true);
  if ($echo) echo $before, number_format($views), $after;
  else return $views;
}

function get_totalviews($echo = 1) {
  global $wpdb;
  $total_views = $wpdb->get_var("SELECT SUM(meta_value+0) FROM $wpdb->postmeta WHERE meta_key = 'views'");
  if ($echo) echo $total_views;
  else return $total_views;
 }

把上面的代码放到function.php 的第一个<?php 之后即可。而且这个代码和那个插件数据库名一致。

调用 <?php post_views($before, $after, $echo); ?>

  • $before 表示统计数前内容
  • $after 表示统计数后内容
  • $echo 要非零,可填1
  • 例如本博调用:<?php post_views(‘路过 ‘,’ 次’,1); ?> ,显示为: 路过 xx 次

2.统计柱状图

由于文章访问数相差悬殊,可能从几百到几万,如果柱状图直接按访问数比例来效果会很差。我自己按指数写了个算法跟大家分享:

function heat($num){
$num_b = 0;
for($num_a = 1;$num>10; $num_a ++){$num = $num / 10;$num_b = $num_b + $num_a;}
if($num_a < 3) $num_col = '#999';
else if($num_a == 3) $num_col = '#41B7D8';
else if($num_a == 4) $num_col = '#53A008';
else $num_col = '#e53b2c';
$num_c = $num_b + $num_a * $num / 10;echo $num_c."em;background:".$num_col;
}

同理可把上面的代码放到function.php 的第一个<?php 之后

调用:<span style=”display:block;width:<?php $heat = post_views(”,”,”); heat($heat); ?>; height:1em”><small><?php post_views(‘ ‘,’ ‘,’ ‘); ?></small></span>

当然可以个这个span添加其他自定义CSS样式,达到最佳效果,如:http://xinyo.org/导航/