Linux区


wordpress免插件实现评论点赞功能

WordPress有一个comments-like-dislike的插件可以实现评论点赞的功能,但对于我这样的洁癖症,总觉得使用插件会拖慢wordpress速度,于是花了N个小时(小衲为此写这条博客已经足以证明时间漫长)研究出了wordpress免插件实现评论点赞的功能,已经应用到了本站小衲说说页面,即将应用到你贱么私愤发泄平台

步骤如下:

1, 首先在主题目录下的functions.php里添加如下内容:

/*-----------------------------------------------------------------------------------*/
# 实现评论的点赞功能
/*-----------------------------------------------------------------------------------*/
//lulinux_note:这里的wp_ajax_nopriv_pinglun_zanwp_ajax_pinglun_zan的后缀都要跟pinglun_zan保持一致,不要写成wp_ajax_nopriv_specs_zanwp_ajax_nopriv_specs_zan或者其他的
add_action('wp_ajax_nopriv_pinglun_zan', 'pinglun_zan');
add_action('wp_ajax_pinglun_zan', 'pinglun_zan');
function pinglun_zan(){//从提交的表单里获取id$id = $_POST["um_id"];
//从提交的表单里获取action$action = $_POST["um_action"];
//如果actionding
if ($action == 'ding'){//从数据库中获取specs_raters数值
$specs_raters = get_comment_meta($id, 'pinglun_zan', true);
//设置cookie的过期时间,单位是秒,99999999秒相当于3$expire = time() + 99999999;
// make cookies work with localhost
$domain = ($_SERVER['HTTP_HOST'] != 'localhost') ? $_SERVER['HTTP_HOST'] : false;
//lulinux_note这里的pinglun_zan后面一定不要掉了下划线!
setcookie('pinglun_zan_' . $id, $id, $expire, '/', $domain, false);
//如果$specs_raters不存在或者不是数字,那么设置pinglun_zan1,否则加1
if (!$specs_raters || !is_numeric($specs_raters)){            update_comment_meta($id, 'pinglun_zan', 1);
}else {            update_comment_meta($id, 'pinglun_zan', ($specs_raters + 1));
}//返回pinglun_zan的值
echo get_comment_meta($id, 'pinglun_zan', true);
}die;
}

2, 在主题js脚本里添加如下内容:(酌情将$j改为$)

//设定commentLike函数
$j.fn.commentLike = function () {
    if ($j(this).hasClass('done')) {
        //如果此处有done类,就提醒您已赞过本博客,并return false当做什么也没发生。
alert('您已赞过本博客');
        return false;
    } else {
        //如果此处无done类,则马上添加一个done$j(this).addClass('done');
        //从当前的a链接的data-id属性中获取id值和actionvar id = $j(this).data("id"),
            action = $j(this).data('action'),
            rateHolder = $j(this).children('.count');
        //准备ajax的数据
var ajax_data = {
            action: "pinglun_zan",
            um_id: id,
            um_action: action
};
        var url = window.location.href;
        //如果当前url地址的("//localhost/") > 0,则去掉它。
url.indexOf("//localhost/") > 0 ? url = url.replace(/localhost\//, '') : false;
        //如果当前页面url路径包含3层目录则调用../../wp-admin/admin-ajax.php2层调用../wp-admin/admin-ajax.php1层调用wp-admin/admin-ajax.php
if (url.split("/").length = 6) {
            $j.post('../../wp-admin/admin-ajax.php', ajax_data,
                function (data) {
                    $j(rateHolder).html(data);
                });
            //return false,否则会多次提交,数据不准确
return false;
        }
        if (url.split("/").length = 5) {
            $j.post('../wp-admin/admin-ajax.php', ajax_data,
                function (data) {
                    $j(rateHolder).html(data);
                });
            //return false,否则会多次提交,数据不准确
return false;
        }
        if (url.split("/").length = 4) {
            $j.post('wp-admin/admin-ajax.php', ajax_data,
                function (data) {
                    $j(rateHolder).html(data);
                });
            //return false,否则会多次提交,数据不准确
return false;
        }
    }
};
//a.pinglunZan被点击时调用commentLike函数
$j(document).on("click", "a.pinglunZan", function () {
    $j(this).commentLike();
});

3, 在comments.php或其他相应的文件(我的是comments-saysay.php外加functions.php)的相应地方加入以下代码:

<a href="javascript:;" data-action="ding" data-id="<?php comment_ID(); ?>"
class="pinglunZan <?php
//lulinux_note:严重注意!这里的pinglun_zan后面一定要有下划线
if (isset($_COOKIE['pinglun_zan_' . $comment->comment_ID]))echo 'done';
?>"><span class="count">
        <?php
//lulinux_note:严重注意!这里的comment_ID千万别小写为comment_id
$comment_id = $comment->comment_ID;
if (get_comment_meta($comment_id, 'pinglun_zan', true)){echo get_comment_meta($comment_id, 'pinglun_zan', true);
}else {echo '';
}?></span></a>

最后需要注意的是这个页面不要启用wp cache缓存,否则会有数据不同步的问题。

如果有不懂的,请直接联系小衲。

参考:http://www.heminjie.com/wordpress/3064.html,这个是针对文章的点赞,跟文章评论还是有区别的。

相关博文



以下是网友的49条评论,您赞同吗?

  1. 2024-1-5 8:49

    14.19.0.***某Windows用户觉得这篇文章很有帮助。

  2. 2023-7-1 17:30

    125.80.138.***某Windows用户觉得这篇文章很有帮助。

  3. 2023-3-8 12:52

    113.204.227.***某macOS用户觉得这篇文章很有帮助。

  4. 2023-1-8 10:59

    58.62.32.***某Windows用户觉得这篇文章很有帮助。

  5. 2022-12-18 23:39

    112.49.96.***某iPhone用户觉得这篇文章很有帮助。

  6. 2021-4-25 18:20

    浙江省某iPhone用户觉得这篇文章很有帮助。

  7. 2019-8-1 18:08

    福建省厦门市某macOS用户觉得这篇文章很有帮助。

  8. 2019-7-29 22:12

    北京市某Windows用户觉得这篇文章很有帮助。

  9. 2019-7-29 6:49

    看了文章后,我也研究了一段时间,在安装上文章中所说的插件(comments-like-dislike)之后,我发现在我的博客中,并没有实现评论的点赞功能,于是乎我尝试向文章所说的方式把代码添加到相关文件中,但是我自己并不懂代码,于是我放弃了这个想法。但问题终究还是要解决,我在插件中找到了一个叫wpDiscuz的插件,安装上之后可以完美实现点赞功能。

滑动载入第2页评论

发表评论

电子邮件地址不会被公开。