WordPress有一个comments-like-dislike的插件可以实现评论点赞的功能,但对于我这样的洁癖症,总觉得使用插件会拖慢wordpress速度,于是花了N个小时(小衲为此写这条博客已经足以证明时间漫长)研究出了wordpress免插件实现评论点赞的功能,已经应用到了本站小衲说说页面,即将应用到你贱么私愤发泄平台。
步骤如下:
1, 首先在主题目录下的functions.php里添加如下内容:
/*-----------------------------------------------------------------------------------*/ # 实现评论的点赞功能 /*-----------------------------------------------------------------------------------*/ //lulinux_note:这里的wp_ajax_nopriv_pinglun_zan和wp_ajax_pinglun_zan的后缀都要跟pinglun_zan保持一致,不要写成wp_ajax_nopriv_specs_zan和wp_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"]; //如果action为ding 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_zan为1,否则加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值和action值 var 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.php,2层调用../wp-admin/admin-ajax.php,1层调用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,这个是针对文章的点赞,跟文章评论还是有区别的。
14.19.0.***某Windows用户觉得这篇文章很有帮助。
125.80.138.***某Windows用户觉得这篇文章很有帮助。
113.204.227.***某macOS用户觉得这篇文章很有帮助。
58.62.32.***某Windows用户觉得这篇文章很有帮助。
112.49.96.***某iPhone用户觉得这篇文章很有帮助。
浙江省某iPhone用户觉得这篇文章很有帮助。
福建省厦门市某macOS用户觉得这篇文章很有帮助。
北京市某Windows用户觉得这篇文章很有帮助。
看了文章后,我也研究了一段时间,在安装上文章中所说的插件(comments-like-dislike)之后,我发现在我的博客中,并没有实现评论的点赞功能,于是乎我尝试向文章所说的方式把代码添加到相关文件中,但是我自己并不懂代码,于是我放弃了这个想法。但问题终究还是要解决,我在插件中找到了一个叫wpDiscuz的插件,安装上之后可以完美实现点赞功能。