2012年04月05日 73条评论

WordPress变态需求: 获取文章的评论人数

为什么我说是“变态需求”呢?因为折腾WP主题这么久,我从来没接触过/听说过有人需要获取文章的评论人数,对,评论人数!不是评论数,同一个人发1条、10条、100条评论也只能算1人。

既然没人需要或者很少人需要,那么就难于找到相关方法了,我也查看过WordPress相关函数,木有这类直接的输出或者简单就能获取“评论人数”的方法/函数。

肿么办?先偷懒,于是我问 qiqiboy,万戈有木有折腾过这类需求,有没有方法,得到答案是:没听说过也没折腾过……qiqibly说可以用SQL解决,但我不怎么会SQL啊……

好吧,我在问以前就想到一个比较蛋疼的方法,只是想偷懒没去测试……这下没办法了,只能自己YY折腾了。

经过一番测试,搞定,代码如下:扔到主题的 functions.php 文件里面
(牢骚 - 代码懒得高亮了,以后也想把所有代码高亮去掉,主要是我用的是直接html方法……)

/* 获取文章的评论人数 by zwwooooo | zww.me */
function zfunc_comments_users($postid=0,$which=0) {
	$comments = get_comments('status=approve&type=comment&post_id='.$postid); //获取文章的所有评论
	if ($comments) {
		$i=0; $j=0; $commentusers=array();
		foreach ($comments as $comment) {
			++$i;
			if ($i==1) { $commentusers[] = $comment->comment_author_email; ++$j; }
			if ( !in_array($comment->comment_author_email, $commentusers) ) {
				$commentusers[] = $comment->comment_author_email;
				++$j;
			}
		}
		$output = array($j,$i);
		$which = ($which == 0) ? 0 : 1;
		return $output[$which]; //返回评论人数
	}
	return 0; //没有评论返回0
}

调用方法

<?php echo zfunc_comments_users($postid); ?>

参数说明:$postid 是需要获取评论人数的文章ID

一般用法:在一般主题的loop里面可以这样用:

<?php echo zfunc_comments_users($post->ID); ?>

PS:还可以输出评论总数,用法:

<?php echo zfunc_comments_users($postid, 1); ?>

折腾玩(完)。

zww
or
oooo

“WordPress变态需求: 获取文章的评论人数”有73条评论

  1. [...] Reader里看到@Zww 大大的新博文《WordPress变态需求: 获取文章的评论人数》,简单看了下,@zww 给出的代码如下: /* 获取文章的评论人数 by zwwooooo | [...]

  2. 幸福每一天 says:

    评论框悬浮在边栏,这个挺有趣的 :shock:

  3. 郑永 says:

    嗯,这个是个蛋疼的需求,以后只是屏蔽了 管理员的回复,总结其他评论数,现在是 不同的人只算一次,的确蛋疼。

  4. 是有够变态的,这么严格干么呢?

  5. 集趣 says:

    用sql,要实现这个效果,对我来说太难

  6. 我觉得一点都不变态啊。很多人都需要

    1. zwwooooo says:

      @阿里旺旺
      需要的人不多。

  7. coach bags says:

    晕,我差点找不到地方回复。

    1. zwwooooo says:

      @coach bags
      不会吧……

  8. coolcfan says:

    有个叫WP-Markdown的插件你可以看一下。。。那个纯模仿Stackoverflow的,评论区都可以贴代码。。。 :razz:

    1. zwwooooo says:

      @coolcfan
      我这也可以贴代码,不信你把代码用code括住看看。

  9. 你看我回复

  10. 看看这个评论框是怎么实现的。。。

    1. zwwooooo says:

      @yesureadmin
      随便写的……代码乱

  11. Bolo says:

    你忘了加上comment_type限制啊,这样pingbackh和trackback都会一起统计进来的

    1. zwwooooo says:

      @Bolo
      呃,又囧了,忘了这桩了。

  12. 这个功能暂时还不需要。

  13. :razz: 我也要好好学习一下了,这些知识很有用,他的邻居的确太寂寞了!

    1. zwwooooo says:

      @锁匠工具
      慢慢学习,但你是锁匠 - -

  14. 小邪 says:

    额,SQL:

    SELECT COUNT( DISTINCT `comment_author` )
    FROM `wp_comments`
    WHERE `comment_post_ID` =141

    1. 小邪 says:

      @小邪
      啊啊,141 是我刚才测试时候用的文章ID >w<

    2. zwwooooo says:

      @小邪
      哈,竟然忘了小邪,下次有sql的问题请教小邪,啦啦啦。另外,最近长草的博客真多,别忘了除草

  15. emric says:

    循环显示分类的函数我在想有还素木有, 这个应该有吧,
    想在category.php显示他的子分类 = 口 =

    1. zwwooooo says:

      @emric
      这个可以实现,查看相关函数

    2. emric says:

      @zwwooooo
      = = 就素找不到,看文档基本都是排列出全部分类,

    3. zwwooooo says:

      @emric
      给个思路给你:获取category.php当前分类ID(这个我写过) 》给列出分类的函数加“列出当前分类下的子分类”参数,具体查看官方文档。

  16. 这当然比评论数更有说服力啦

  17. 苍井空 says:

    这个函数不错,刚使用了下。谢谢分享

  18. 新号外 says:

    这种需求也叫变态?只能算一般吧。。。

  19. 新号外 says:

    没看文章前,我第一想到的就是group by 一下,完全可以搞定。。。

    1. zwwooooo says:

      @新号外
      对,任何 WP 数据都可以用 SQL 语句解决,因为是 MySQL 嘛

  20. NONO says:

    真的是很变态的需求

回复给 甜菜 ¬
取消回复

昵称 *

网址

B em del U Link Code Quote