下面开始具体操作:
一、请先将多说核心脚本embed.js本地化:多说社会化评论框核心脚本embed.js本地化方法
准备工作:为了方便您的观察与修改,建议您将embed.js脚本格式化,JavaScript/HTML格式化工具
二、搜索:function ct(),找到:
function ct(){
return rt.data.user_id==0
}
改为:
本文隐藏的内容
function ct(){
document.cookie="ssk_ds_user_id=" + rt.data.user_id;
return rt.data.user_id == 0
}
本处为登录判断函数,第三行的意思是:返回当前用户id是否为0,如果为0就是未登录的状态,如果不为0就是已经登陆多说;
所加的第二行的意思是:将当前用户id设置cookie,如果未登录,cookie值就是0,已登录cookie值就是当前用户的多说id。
这个cookie就是实现回复可见的关键所在!
三、接下来就是最关键的修改部分,找到主题的functions.php,在<?php下面加入如下代码:
//回复可见开始
error_reporting(0);
function reply($content){
if(preg_match_all('/\[hide\]([\s\S]*?)\[\/hide\]/i', $content, $hide_words)){
$stats = 'hide';
}
//print_r($hide_words);//请看下方说明(6)
//多说部分开始
$thread_key= get_the_ID();//多说thread_key即为当前文章id
$short_name="";//请在引号内填入您自己的short_name,获取方法见代码下方说明(1)
$user_id=$_COOKIE['ssk_ds_user_id'];
$url="http://api.duoshuo.com/threads/listPosts.json?thread_key=$thread_key&short_name=$short_name";//获取当前文章第一页已通过审核的评论的接口(多说公开接口),翻页再加参数&page=1/2/3
$str = file_get_contents($url);//获取当前文章第一页已通过审核的评论的内容
$data = json_decode($str,true);//将第一页评论信息json格式数据转换为数组格式
$pages=$data['cursor']['pages'];//获取当前文章的评论总页数
//用户评论审核状态判断开始
$i=1;//评论初始页数 第1页
while($i<=$pages){//页数最大值为上面获取到的总页数
$all[$i]=$url."&page=".$i;//当前文章所有多说评论的每一页网址
$strall = file_get_contents($all[$i]);
$dataall = json_decode($strall,true);//取当前文章多说所有评论的内容
foreach($dataall as $k => $v){
if(is_array($v)){
foreach($v as $k1 => $v1){
if($v1['author_id'] == $user_id){
$zhuangtai=$v1['status'];//获取当前多说登录用户在本文的评论内容的审核状态
break;
}
}
}
}
if($zhuangtai=="approved"){
break;//如果在第1页评论中,用户有通过审核的评论则停止判断
}else{
$i++;//如果第1页没有,则页数加1,再判断第2页,依次循环到评论最后一页
}
}
//用户评论审核状态判断结束
//获取多说 待审核 评论内容 开始
$pendingurl="http://$short_name.duoshuo.com/api/posts/list.json?status=pending";//获取当前站点的所有待审核评论的接口(这是我自己抓的,多说官方未公开待审核接口)
$pendingstr = file_get_contents($pendingurl);//获取待审核状态涉及到的所有内容,id、评论内容等等
$pendingdata = json_decode($pendingstr,true);
foreach($pendingdata as $pendingk => $pendingv){
if(is_array($pendingv)){
foreach($pendingv as $pendingk1 => $pendingv1){
if(isset($pendingv1['author_id']) && $pendingv1['author_id'] == $user_id){
$pendingzhuangtai=$pendingv1['status'];
break;
}
}
}
}
//获取多说 待审核 评论内容 结束
if($user_id=="5034959"){//请将5034959换为您自己的多说id,获取方法见代码下方说明(2)
$stats = 'show';//如果是站长直接显示
}elseif($zhuangtai=="approved"){//approved表示多说评论审核已通过
$stats = 'show';//评论审核通过则显示
}elseif($pendingzhuangtai=="pending"){//pending表示多说评论待审核
$stats = 'pending';//此处用来切换提示信息,如果为pending待审核则提示信息为 已评论待审核 提示内容见下方,如果不需要审核,回复直接可见,将 pending 改为 show 即可!
}else{
$stats = 'hide';//其他状态则不显示隐藏内容
}
//多说部分结束
if($stats == 'pending'){//如果已经评论则提示此消息
$hide_notice = '<p style="text-align:center;border:1px dashed #FF9A9A;padding:8px;margin:10px auto;color:#FF6666;">温馨提示:您已<a class="scroll_b" title="评论本文" style="cursor: pointer;">评论本文</a>,请耐心等待管理员审核,审核通过后<a href="javascript:window.location.reload();" title="刷新">刷新本页</a>才能查看。</p>';
}else{//否则提示此消息
$hide_notice = '<p style="text-align:center;border:1px dashed #FF9A9A;padding:8px;margin:10px auto;color:#FF6666;">温馨提示:此处内容需要<a class="scroll_b" title="评论本文" style="cursor: pointer;">评论本文</a>后,<a href="javascript:window.location.reload();" title="刷新">刷新本页</a>才能查看。</p>';
}
if($stats == 'show'){//如果$stats='show'则显示隐藏内容
$content = str_replace($hide_words[0], $hide_words[0], $content);
}else{//否则将隐藏的内容替换为相应的提示信息
$content = str_replace($hide_words[0], $hide_notice, $content);
}
return $content;
}
add_filter('the_content', 'reply');
function hide($atts, $content=null, $code="") {
$return = '<div class="showhide"><h4>本文隐藏的内容</h4>';
$return .= $content;
$return .= '</div>';
return $return;
}
add_shortcode('hide' , 'hide' );
//回复可见结束
四、CSS代码
/*回复可见开始*/
.showhide{overflow:hidden;border:1px dashed #FF9A9A;margin:8px 0;padding:10px;zoom:1;}.showhide h4{margin-bottom:10px;color:#F66;font-size:12px;text-align:center;}
.tip{text-align:center!important;border:1px dashed #FF9A9A;padding:8px;margin:10px auto;color:#FF6666;}
/*回复可见结束*/
到此多说回复可见就修改完成了!
【说明】
(1)$short_name获取方法:登录多说官网http://duoshuo.com,点击右上角后台管理,点击需要修改的对应的网站,看到地址栏网址形如:http://ssk.duoshuo.com/admin/,则您的$short_name为.duoshuo前面的字符,我的就是ssk,所以:$short_name="ssk";
(2)获取多说id请点击下方您对本文回复内容前的头像即可看到本站的跳转提示页面,然后复制网址形如:
http://ssk.91txh.com/redirect.php?type=unknow&url=http://ssk.duoshuo.com/user-url/?user_id=5034959
user_id=后面的数字就是您的多说id!
(3)代码中//后面的部分为说明可删除
(4)使用方法:
【hide】这里放需要隐藏的内容,记得要把【】换为[]【/hide】
(5)如果您使用了supercache等缓存插件,请记得将有回复可见的文章设置为:禁止缓存!
(6)如果您使用本教程后,未回复依然可以看到应隐藏的内容,请将//print_r($hide_words);前面的//去掉,然后刷新文章,本功能可以看到是否已经匹配到应该隐藏的内容,如果未匹配到,现初步判断为您当前使用的主题所造成的,请联系您的主题作者帮忙查看!如果您知道具体原因,也请留言告知!
想要实现多说回复可见的童鞋们快来回复吧~~
原文来自:http://ssk.91txh.com/250