无插件点赞功能由 #Fatesinger# 提供,不过 @大发 好像删除了该篇文章。

实现原理大体是通过自定义字段保存赞数量,通过Cookie记录并禁止重复赞。

具体的代码如下:

function.php

/**
 * AJAX点赞
 * by: #fatesinger.com
 * modify: #biji.io #bgbk.org
 */
function dotGood()
{
    global $wpdb, $post;
    $id = $_POST["um_id"];
    if ($_POST["um_action"] == 'topTop') {
        $specs_raters = get_post_meta($id, 'dotGood', true);
        $expire = time() + 99999999;
        $domain = ($_SERVER['HTTP_HOST'] != 'localhost') ? $_SERVER['HTTP_HOST'] : false; // make cookies work with localhost
        setcookie('dotGood_' . $id, $id, $expire, '/', $domain, false);
        if (!$specs_raters || !is_numeric($specs_raters)) update_post_meta($id, 'dotGood', 1);
        else update_post_meta($id, 'dotGood', ($specs_raters + 1));
        echo get_post_meta($id, 'dotGood', true);
    }
    die;
}
add_action('wp_ajax_nopriv_dotGood', 'dotGood');
add_action('wp_ajax_dotGood', 'dotGood');

JavaScript

$.fn.postLike = function () {
    if ($(this).hasClass('done')) {
        alert('点多了伤身体~');
        return false;
    } else {
        $(this).addClass('done');
        var id = $(this).data("id"),
            action = $(this).data('action'),
            rateHolder = $(this).children('.count');
        var ajax_data = {
            action: "dotGood",
            um_id: id,
            um_action: action
        };
        $.post("/wp-admin/admin-ajax.php", ajax_data,
            function (data) {
                $(rateHolder).html(data);
            });
        return false;
    }
};
$(".dotGood").click(function () {
    $(this).postLike();
});

CSS

.post-like{margin:10% 0 0;position:relative;}
.post-like a.dotGood{height:30px;line-height:30px;width:30px;font-size:24px;text-align:center;display:inline-block;cursor: pointer;position:relative;}
.post-like a.dotGood.done{color: #e2264d;}
.post-like a.dotGood span{position:absolute;display:inline-block;top:0;left:26px;width:auto;font-size:14px;}
.post-like a.dotGood span:before{content:'+';}

HTML

<a href="javascript:;" data-action="topTop" data-id="<?php the_ID(); ?>"
   class="dotGood <?php echo isset($_COOKIE['dotGood_' . $post->ID]) ? 'done' : ''; ?>">
    &hearts;
    <span class="count"><?php echo ($dot_good=get_post_meta($post->ID, 'dotGood', true)) ? $dot_good : '0'; ?></span>
</a>
至此,点赞功能就可以实现了。

标签: php, ajax, 点赞

已有 48 条评论

  1. 之前在百度上找到过这样的教程,就是点击赞没反应,等上电脑了试试你的教程。收藏下。 :neutral:

    1. 点赞没反应?Console有报错么?

      1. 报错倒是没发现,就是点赞不增加数字。准确说是点不了。。。你的教程我明天试试看。我那主题就差点点赞了。 :eek:

        1. 今天试了下你的这个方法,依然还是点击 赞 的时候,一直是0.点不了。。。点了木有反应。。。 :shock:

          1. ding ding

            估计是admin-ajax.php的问题 :razz:

            1. 我那个评论ajax也是用的admin-ajax.php的。用大发说的方法。成功了。这个点赞真是头大、有空了再研究下看看。 :???:

  2. 新模板很漂亮啊。 :wink:

    1. :???: 还没做完,但是已经不知道怎么做下去了

  3. MG MG

    又换新衣服啦 :wink: :wink: :wink:
    任性

  4. c c

    好功能 :mrgreen:

    1. 然并卵 :arrow:

  5. 又改了主题

    1. 难道不是很普通的一件事吗

  6. 广告那里,2年是950了~~~

    1. :arrow: 他博客写的也是950,但是前两天官网两年是900块钱,我元旦买的vps,还找他花了400优惠续了1年呢,没想到今天就950了

  7. 主题不错!很简洁 :grin:

  8. 几天不见,改版了呀 :wink:

  9. 学习了!正在纠结播放器的 A/Pjax 播放,不知道从何下手……

    1. 先做出来播放器。。。

      1. :razz: 可以用别人的播放器插件耶 :roll: 然后……

  10. :arrow: 新年快乐

  11. JV JV

    8错。 :razz:

  12. chasonma chasonma

    好久没来。。你又改版了 :grin:

    1. 然而估计还会大改动

  13. 不错,用的正是WordPress :mrgreen: :mrgreen: :mrgreen:

  14. JavaStcrpt写错了吧?看着怪怪的 :!: JavaScript :smile:

    1. 啊哈,不知道为啥就写错了

  15. :arrow: 请统一一下评论的字体,亲爱的!

    1. 。。当初觉得宋体蛮好看的,就脑抽的单独给评论区设置了宋体。。。回头改回去

  16. wordpress.org/plugins/wp-postlike/
    大发有个插件

    1. 啊哈,知道啊,但是这不是不用安装插件了么

  17. 不错,就是这代码为啥分了三个段落,是因为要用在不同的地方吗?

  18. 已经放不下啦!

  19. HGT HGT

    这站点的模板特别简洁。。。不知道图片表现是怎样 :smile:

    1. 可以参考这篇文章:https://biji.io/2016/4657.html

  20. 可以试试 WP-PostRatings 这个插件

    1. 用插件还是要改主题,何不直接主题里实现。。。

      1. 现在用到数据储存的(比如点赞)我都用插件实现,这样数据不会因为更换主题而丢失,具有通用性。

        1. 实际情况是,我并不会使用第三方主题,我只用我自己做的主题。。。

  21. 这四段代码都是放在function.php里面的吧??求解 :sad:

    1. 不是,只有第一段是放function里的。。。你好像不是很懂的样子,那就不要改文件了吧。。。或者备份好文件自己尝试几遍

      1. ddd ddd

        ddd第一段是放function里的。。。你好像不是很懂的样子,那就不要改文件了吧。。。或者备份好文件自己尝试几遍

  22. 网友 网友

    应该怎么调用呢

  23. 对最新版的wp起作用不?

  24. 浅

    他人发帖数

  25. 11 11

    你好像不是很懂的样子

  26. 小丽 小丽

    好像是不错的功能

  27. wzsa wzsa

    我看前两段代码都自带,然后第三段代码我手动加上的。但是我实在不知道最后一段html代码应该加在哪里@_@。还请大佬指点

添加新评论