撸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,这个是针对文章的点赞,跟文章评论还是有区别的。

相关博文



发表评论

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