我要提问
填调查问卷赚钱

WordPress投票插件Ludou Simple Vote

评分 7.6, 满分 10 分 (148 票)
Loading...

     相信使用WordPress都知道WordPress有很多插件可以实现投票功能,具体我就不介绍了。之前我也用过一些投票插件,但是这些插件都过于庞大,功能实在是太多了,遂放弃,只好自己写代码实现这么一个简单功能。经常来露兜博客的朋友可能注意到我的文章底部有一个投票模块,可以发表你的意见,不过你只能支持或反对,可以方便那些懒于写评论的读者。

     今天我把这个功能写成了一个插件,起名Ludou Simple Vote,感兴趣的朋友可以下载使用,具体演示见本页面的投票模块。使用很简单,在后台启动该插件即可,打开博客的文章页,内容底部就可以看到跟我博客相同的投票按钮了。经常逛论坛的朋友可能对这个按钮比较眼熟,那是因为这个按钮的样式是仿照Discuz!论坛的投票按钮做的,可以说是一模一样的,如果不喜欢可以自己修改插件的css代码来定制按钮的样式。

     有很多使用WordPress朋友不喜欢插件,因为他们认为插件会拖慢他们的博客。这个插件也确实在博客的头部加载了css和js,只有这样才能实现插件的功能,如果你不喜欢这些,可以用文本编辑器打开插件目录下的ludou_simplevote.php,删除第40行代码,然后将插件目录下的ludou_simplevote.css和ludou_simplevote.js集成到你的主题即可。

     Ludou Simple Vote使用WordPress的自定义栏目来记录投票得分,支持+1分,反对-1分,卸载该插件后将会自动删除插件创建的自定义栏目,不会给你的博客留下无用数据。这个插件使用cookie来实现简单的防作弊的功能,如果访客的浏览器关闭了cookie功能将无法投票,启动cookie后只能对同一篇文章投一次票。

     如果你想在侧边栏或博客的其他地方显示投票排行榜,显示一个按投票得分排序的文章标题列表,可以使用以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
    global $wpdb;
    $hight_voting = $wpdb->get_results("SELECT `post_title`, `ID`
        FROM $wpdb->posts, $wpdb->postmeta
        WHERE `meta_key` = 'ludou_ratings_score'
        AND `ID` = `post_id`
        ORDER BY CAST(`meta_value` AS DECIMAL) DESC
        LIMIT 10"
);
?>
<ul>
    <?php foreach($hight_voting as $vote_post) : ?>
    <li><a href="<?php echo get_permalink( $vote_post->ID ); ?>" title="<?php echo $vote_post->post_title; ?>"><?php echo $vote_post->post_title; ?></a></li>
    <?php endforeach; ?>
</ul>

版本更新:
  1.0 版:第一版
  1.1 版:增强了反作弊功能
  1.2 版:优化AJAX运行方式,提高兼容性

下面是WordPress官方下载地址:

下载此文件

露兜
zhouzb889@163.com

露兜博客博主,男生,业余程序爱好者。文采不佳,不喜欢聚光灯,不喜欢吹牛,不喜欢无序的做事方式。闲时喜欢写些代码自娱自乐,并在博客中分享一些个人技术经验。

标签: WordPress, 插件

109 条评论

点此留言
1 2 268
  1. bier

    突然看到一个网站 http://danhuaer.com/ 好像是用这个插件改的!可惜这个只能在文章显示,要是能像他一样自己在任何地方调用就好了!

    • Ludou

      @bier 该站插件由本站付费定制

  2. Carrie

    不曉得這是否能只在後台提供評分機制?

    • Ludou

      @Carrie 抱歉,不能。另外,绝大数站点都不提供后台注册功能,所以这个功能适用范围很小。

  3. gg

    楼主,我用 了你这个插件,没有卸载只是停用了插件,投票数据就都没有了。难道停用也算卸载吗?卸载不是把插件删除才算卸载吗?能不能停用再启用那些投票数据还在呢?

    • Ludou

      @gg 没办法啊,WordPress只提供停用插件的接口,没有卸载插件的接口。

  4. 小哥

    博主,你这个插件是不是还有bug呢?我用了你这个插件,在header顶部插入你文中说的显示最多投票排行榜文章,我的一些文章被投票了,有一篇文章被投了9票,也是投的最多的那篇文章,然后其他的文章有5票,3票等,这时这个排行榜能按照投票最多的排在前面,但是今天我的那篇最多人投票的文章已经有了10票,但是这篇投票最多的文章在排行榜那里却消失了,第一位那里显示的却是投了6票的文章。这是怎么一回事呢?最多投票的文章不在排行榜里了,大哥帮帮忙是什么原因呢?你的插件我去掉了“-”负的投票,只有“+”正的投票,在排行榜我按照你评论里说的修改了代码来显示投票数。是不是我改的这些出现问题了呢,不过我也试过了按你原来的显示排行代码也是不能把最多投票的那篇文章显示出来,这到底是什么原因呢?是不是插件还有些bug呢?在线等回复…

    • 小哥

      @小哥 博主,我测试过了,只要是文章被投过10票之后就不会在排行榜那里出现了,这是怎么回事呢?超过了10票就不见了。但是超过10票的是最多投票的,为什么不在排行榜那里出现在第一位置呢?求助啊啊啊…

    • Ludou

      @小哥 那你进10票的文章编辑页面,查看 自定义栏目 那里,ludou_ratings_score的值是不是10
      投了6票的文章编辑页面,查看 自定义栏目 那里,ludou_ratings_score的值是不是6

      最后请检查你的站点是不是安装了缓存插件之类的东西,如有请清空缓存。

      • 小哥

        @Ludou 自定义栏目那里是显示投票值没错,但是是我用你文章说的显示最多投票的10篇排行榜的代码时,我有文章超过了10票,其它9篇文章都不超过10票,但是那篇超过10票的就不出现在那个排行榜那里了。我只安装有四个插件分别是你的投票插件和Clean Options插件,My Mood Comment插件,WP Cleaner插件,这几个插件应该不是缓存插件吧

        • Ludou

          @小哥 按照你说的测试了一下,没发现你说的问题。

          你可以从你的服务器删掉本插件文件夹中的所有文件,再重新下载复制进去。其他不做改动,看看问题是否还存在。

          先备份一下你修改的文件。

        • 小哥

          @小哥 我用本地的wordpress测试插件时发现这样的情况,我把一篇文章投了11票,然后我把另一篇文章头了2票,这时在排行榜那里出现的情况是投了2票的排在首位,投了11票的却在第二位,我又再给另外一篇文章投了9票,这9票的文章排在了第一位,2票的排在第二位,11票的排在第三位。就是说超过了10票的文章会被新投票的文章挤出去。

          • Ludou

            @小哥 投了11票,并不代表它的得分是最高的。以自定义栏目ludou_ratings_score的值为准来排序。

          • Ludou

            @小哥 按照我上面的说的,做过更改,且用原版插件还是出现你所说的问题,那我也没法再给你提供其他的建议。

        • Ludou

          @小哥 文中的排行榜代码已经更改,你可以先试试。

          • 小哥

            @Ludou 博主,谢谢你,成功了,用你文中修改过的代码能把投票超过10的文章显示出来了。博主真是大好人,不枉费我在线等,谢谢还是谢谢!

  5. 逍棽客

    博主你好想要问一下,如果在文章页其他地方调用该怎么办不想放在文章内容的底部呢。

    • Ludou

      @逍棽客 ludou_simplevote.php删除下面代码:
      add_filter("the_content", "ludou_simplevote_content");

      然后修改以下函数函数体:
      function ludou_simplevote_content($content) {

      }

      改成:
      function ludou_simplevote_content() {
      global $post;

      $rate = get_post_meta($post->ID, "ludou_ratings_score", true);
      $rate = ($rate == '') ? 0 : $rate;

      echo '<div id="useraction">
      <div id="ajax_recommendlink">
      <div title="主题评价指数" id="recommendv">'.$rate.'</div>
      <ul class="recommend_act">
      <li><a onclick="ludou_simple_vote(this, \''.get_bloginfo("wpurl").'\',' . $post->ID . ', 1);" href="javascript:void(0);" id="recommend_add" title="点击支持本文">支持</a></li>
      <li><a onclick="ludou_simple_vote(this, \''.get_bloginfo("wpurl").'\',' . $post->ID.', -1);" href="javascript:void(0);" id="recommend_subtract" title="点击反对本文">反对</a></li>
      </ul>
      </div>
      </div>';
      }

      最后,在single.php你希望的位置,添加以下代码,用于显示投票图标:
      <?php ludou_simplevote_content(); ?>

      • 逍棽客

        @Ludou 你好 ,非常感谢你的指导。已经可以了,多谢了。还有一个问题请教,就是目前显示的顶踩好像是默认居中的不管是放在表格还是其他地方总是距左边有一定距离,我想让他居左不知道要改css里面的哪项,我是新手刚起步,改了几个类的参数都不凑效。

        • Ludou

          @逍棽客 ludou_simplevote.css
          删掉第6行的
          margin: 20px auto;

          • 逍棽客

            @Ludou OK 非常感谢。

  6. 看看海

    博主此插件看来必火,想问一下:装上插件之后能不能随机显示已投过票的文章呢,有些文章虽然投了票但是没上排行榜,所以想在其它地方显示几篇已被投过票的文章,不知博主这个插件能达到这个效果吗?关注中…

  7. Kay

    博主,不知道能不能把他分开显示,而不是显示总数,是顶的有多小,踩的有多小~ 在线等答案

    • Ludou

      @Kay 抱歉,暂时不实现这样的功能。你可以找相关的顶踩插件。

  8. 未满十八岁禁止关注

    请教一下,如何在首页(或其他任意位置)调用总投票分数?

  9. autofly

    我的文章页是自定义的,Ludou Simple Vote显示不了,是不是可以在single.php加代码来显示,如果可以加什么代码?

  10. autofly

    看了你上面的评论,解决了,哈哈!

  11. 小马

    露蔸兄,这个插件能不能使每篇文章都显示投票数量呢?即使有些文章没被投票也会显示成“0”这样子。谢谢!

  12. doghap

    我改写了你的函数:
    function ludou_simplevote_content($ID) {
    $rate = get_post_meta($ID, "ludou_ratings_score", true);
    $rate = ($rate == '') ? 0 : $rate;
    $content .= '<div id="useraction">
    <div id="ajax_recommendlink">
    <div title="文章评价指数" id="recommendv">'.$rate.'</div>
    <ul class="recommend_act">
    <li><a onclick="ludou_simple_vote(this, \''.get_bloginfo("wpurl").'\',' . $ID . ', 1);" href="javascript:void(0);" id="recommend_add" title="点击支持本文">支持</a></li>
    <li><a onclick="ludou_simple_vote(this, \''.get_bloginfo("wpurl").'\',' . $ID.', -1);" href="javascript:void(0);" id="recommend_subtract" title="点击反对本文">反对</a></li>
    </ul>
    </div>
    </div>';

    return $content;
    }

    然后在首页和文章页用<?php echo ludou_simplevote_content(get_the_ID());?> 调用,
    在文章页显示正常,在首页能投票时第一次投票能AJAX增加,从第二次开始就不能了,我想这应该是js 代码决定在本页只能调用一次ajax,自己搞了好几个小时,因为自己木有学过js,就无法完成… 你在前面的回复里说道那个网站的投票系统是你做的,所以我相信你能解决我这个问题…

    • Ludou

      @doghap 首页需要给投票框指定一个唯一的id,否则js无法知道是哪篇文章的投票数发生了变化。
      光改这个函数是无法解决你的问题的,还要修改js代码。

      如果需要我写代码,请到以下网址购买付费服务,购买数量填20:
      http://app.ludou.org/item/work/

      然后给我的邮箱打包发送你改过的插件,改完后给你回复。

  13. wp

    请问博主,那段php代码需要放置在那个文件下,还有就是那段ul代码放置小工具能显示吗?

    • Ludou

      @wp 那段php代码和那段ul代码 是一起的!那段ul代码放置到后台文本小工具 不能 显示
      可以放到sidebar.php,single.php中,放置的位置根据自己的需要。

  14. SigmaTera

    你好,请教一下,我把上述显示投票结果的代码复制进新建的文件result.php里,是否可以这样,放在哪里可以访问到?谢谢

  15. 3s

    说错了 是 “对我有帮助” ,这是用的哪个插件?

  16. drupal80

    安装完插件以后,页面点击顶踩无效(已经调用了wp_head()),后来直接把查件的js直接在主题single.php里的head里直接调用,点击顶一下加+1 刷新一下页面 又变成了0 是不是没有把值存到数据库里啊。。。我在自定义字段里也没有看到存储的投票值.还请指点迷津。。。。

    • Ludou

      @drupal80 请确保路径准确。js直接在主题single.php里的head里,可能会导致路径失效。

  17. VEEELLL

    请问投票的票数是写进数据库的吗?那么如何在数据库中找到票数然后修改呢?

    • Ludou

      @VEEELLL 是写进数据库。具体请到文章编辑页面,查看自定义栏目

  18. jigang

    add_action('wp_ajax_ludousvote', 'process_ludousvote');
    add_action('wp_ajax_nopriv_ludousvote', 'process_ludousvote');
    hi,ludou,这两个action 的do_action()在哪儿写着的?

    • Ludou

      @jigang wp-admin/admin-ajax.php

      http://codex.wordpress.org/Plugin_API/Action_Reference/wp_ajax_(action)
      http://codex.wordpress.org/AJAX_in_Plugins

      • jigang

        @Ludou 嗯,知道了,谢谢哈。

  19. Leo

    能否帮我改一下代码,使得在首页和内页都能使用?现在的问题是只能在内页使用。
    购买付费服务20个?

    • Ludou

      @Leo 说实话,放在首页真不好看

      • Leo

        @Ludou 好不好看无所谓,我要的是功能啊~ 实现功能就好了,后续我自己添加样式表

    • Ludou

      @Leo 已经发到你的邮箱。支付宝直接付款即可,帐号详见邮件内容。

  20. 邪风

    非常感谢大神的这个插件,看着真心很帅气,用了不少国外的,非常繁冗,再次感谢分享

  21. 邪风

    对了,如何像楼主那样在首页列表中显示这些星星呢?还有你文章页面标题下也有这个投票功能,是免费就可以实现还是需要付费实现?

    • Ludou

      @邪风 WP-PostRatings

      • 邪风

        @Ludou 万分感谢露兜抽空回复我,这个插件我已经安装了,但是不会使用,可以写个博文教程吗?

  22. 番茄

    跟你文章底部的不一样哎。

    • Ludou

      @番茄 多少年过去了,本站自然也要做些改变。

      • 番茄

        @Ludou 那你现在使用的这个,插件名字能说一下不?

  23. dmg

    你好!我看了你的插件的内容,其中ludou_simplevote_content($content)函数输出html代码,我照着写了一个,但是出现奇怪的错误。
    你的程序里是这样:$content .= '<div id="useraction">
    <div id="ajax_recommendlink">
    ……
    我照着写了: $content .= '<div id="vote_content"> <table>
    <tr>….
    但是很奇怪的是,这个table却出现在了footer之下,而不是紧跟着content。
    请问可能是什么原因呢? 谢谢!

  24. dmg

    …找到原因了。
    table忘了闭合标签了
    好奇怪…

1 2

发表评论

评分 7.6, 满分 10 分 (148 票)
Loading...