wordpress取得最投契访客

因为“搬砖阶段”装得实在太辛苦,索性给自己的blog写个无聊的功能。

本人一直致力于减少无意义的留言,所以想到了一个“把跟我聊得最开心的人当作友链”的主意。这个主意的亮点在于不是你留言的字数多就能上榜,而是我愿意跟你多聊,你才能上榜。不仅能促进有意义的回复,而且省去了维护友链的麻烦。
下面看代码。
其实代码的核心是一段SQL语句。我把它封进第一个函数里。其意义是取得半年之内我回复的字数累计最高的13个人的姓名、邮箱和链接。

function apip_get_links()
{
    global $wpdb;
    $limit = 13; //取多少条,可以自己改
    $scope = "6 MONTH"; //可以使用的时间关键字:SECOND,MINUTE,HOUR,DAY,WEEK,MONTH,QUARTER,YEAR...
    $sql = "SELECT comment_author_email, comment_author_url, comment_author, SUM(comment_length) as words_sum
            FROM $wpdb->comments aa
            INNER JOIN
            (
            SELECT comment_parent, char_length(comment_content) as comment_length
            FROM $wpdb->comments
            WHERE  user_id <> 0
            AND DATE_SUB( CURDATE( ) , INTERVAL $scope ) <= comment_date_gmt
            )
            AS bb
            WHERE aa.comment_ID = bb.comment_parent 
            GROUP BY comment_author_email
            ORDER BY words_sum DESC
            LIMIT $limit";
    $result = $wpdb->get_results($sql);
    return $result;
}

第二个函数,用来输出链接。这么写只是为了把显示逻辑跟数据源分开。如果想手动添加到某个php里,调用这个函数就够了。css请自理。

function apip_link_page(){
    $links = apip_get_links();
    $ret = '<ul class = "apip-links">' ;
    foreach ( $links as $link ){
        $parm = sprintf( '<li><div class="commenter-link vcard">%1$s</div><a href="%2$s" target="_blank" class="url">%3$s</a></li>',
                            get_avatar( $link->comment_author_email, 32),
                            $link->comment_author_url,
                            $link->comment_author) ;
        $ret.= $parm;
    }
    $ret.='</ul>';
    echo $ret;
}

第三步,添加short_code,以便在页面里直接调用。

add_shortcode('mylink', 'apip_link_page');

新建一个页面,在里面加上短代码(换成半角方括号)
【mylink】
即可。

P.S 我的排行榜还真是毫无意外发生啊!

已有30条评论

  1. 说句实话,在网铃里响起你博客更新一篇这样的技术文是让我很震惊的。

    1. 震啊震啊就习惯了。
      不常写一是因为WP大多数功能都能从现成的插件和主题里抄过来,我总不能写我是怎么抄的吧?只有这种自己开脑洞的才有写的价值。
      二是我自己本职的C本身没什么写头,大能比比皆是,要是敢涉及硬件,客户会分分钟把我告得姨妈巾都用不起。
      三是因为懒。

      1. 额···好强大的理由~

  2. 我怎么感觉是写独立博客的博主也都会写代码。

    1. 久病成医。php也确实非常简单。

  3. “而是我愿意跟你多聊,你才能上榜。”
    哈哈哈,就喜欢这股嘚瑟劲。

    以及你们懂技术就是好啊,咱就苦手了,光用想法,行动力为负数……

    1. 你那个想法究竟是啥,说不定哪天我闲着了呢

      1. 突然就很虔诚地索要微信ing,方便的话,邮件到我留言的头像邮箱
        不方便的话……记得把这条评论删掉,以免被人看到我勾搭大龄人夫居然以失败收场……

        1. 你成功了.然而我并不怎么喜欢用微信.22:00~24:00吧.
          微信号记不住,过会儿发给你.

          1. 不喜欢微信也可以,我就直接先把我想法直接写邮件给你好了,也一样的。

            你顺便帮我看看有无实际操作的可能性即可。

          2. 我的想法邮件已发送至你评论所用头像的那个邮箱了,注意查收

  4. 哈哈,我竟/果然也位列其中。程序猿终于也有憋不住的时候了!

    1. 演技欠佳只能真的做点事了。

  5. 那个列表还可以美化一下,功能不错
    倒是标签云的格式很美,抄了

    1. 所以我说CSS自理嘛!我自己都没工夫理.

    1. 免维护版的友链.格式还没收拾.

    1. 本站的友情链接啊。CSS还没加。

  6. 去你的友情链接页面瞅了眼,发现还是旧ID旧网址啊,我的留言都是填的最新信息好吧!
    你这代码不会自动抓取最新的ID,网址?
    得改!!!

    1. 改个排序就可以了.或者忍到你换域名半年以后…

  7. 不看文章,这题目我读了3遍了还是不知道啥意思,我的语文能力越来越差了。
    好牛逼的char_length用法,另外,虽然说CSS自理,但你自己起码也要理一下吧,这么懒真的好么。。。

    1. 其实是我作茧自缚了,这是我自定义的大插件里的一部分,不同的css是分开加载的.然后我发现调用的逻辑有问题,所以就没加上…

      1. 反正没多少东西 就是对 ul li 处理一下直接写页面里就好了。
        我的css js都放七牛有的时候懒的去更新缓存,又是独立页面的东西 有修改的时候我都是直接写在页面里,只是偶尔洁癖发作想起来有些不舒服。

        1. 我现在的这个要是不加载头像的话其实一点儿毛病都没有,但加了图片不处理就难看了。因为我换主题算比较频的,所以不愿意把功能放到主题里。话说用JS应该有通过链接获取网站标题的方法吧?

          1. 链接读取页面,然后通过页面内的title取值,我JS很差估计是这样吧,可为啥要这么做呢?
            可以通过wp_localize_script设置个变量存储title,这样不同页面就不同title值了,然后js引用就好了啊。

          2. 因为不用维护啊.存的话哪儿存不了,可谓无就是懒得手动维护啊.

  8. 会写点代码真好啊。我倒是想给博客加点各种小功能,碍于能力有限,只能作罢啊。

    1. 大多数都有现成儿的,php真不是什么难掌握的东西,我就是完全自学的。当然我本身是个C程序员。

  9. 想法不错,做的也不错,C程序猿触类旁通PHP,实现一点小功能自然不在话下。话说我也要重新拾一下php了,荒废许久了。

  10. 我一般喜欢坐享其成别个的成果。
    所以,你能想到做到,真令我佩服。

    1. 还有很多做不到的,没写出来就是了。

  11. 不出意外,我还需要多努力,多努力啊多努力。:)

    1. 就留这种东西想冲榜有难度啊。

  12. 看着挺NB的,但看完我基本可以猜出第一位是谁了

    1. 这说明你也挺投契的.

  13. 这个算法比较公平,友情链接实至名归

  14. 这种想法真的很有新意,这样就可以避免加上一些友链后,半年都不来访一次,这样的友链才是真正的友链

    1. 主要是懒得维护。而且对换链接的行为非常反感。

  15. 大神就是大神我也听过了好多人说php确实十分简单 待我学有所成…

    1. 可以学学思想,初学还是不建议从php入手。

    1. 随便拿。我一向是只管自己写着痛快,有没有人看无所谓的。

  16. 突然有一种想和你聊天的冲动抑制不住啊!

    1. 吾道不孤,幸甚至哉。

你好,新朋友。留言前请先填写昵称邮箱