共有 0 条评论

【转载】2016多说评论设置回复可见教程 – 小冉的博客

【转载】2016多说评论设置回复可见教程

本教程实现的多说回复可见是后台判断隐藏显示,并非流传已久的Jquery前台hide。这个好处就是右键查看源代码也不会查看到隐藏的内容啦!
下面开始具体操作:
一、请先将多说核心脚本embed.js本地化:多说社会化评论框核心脚本embed.js本地化方法
准备工作:为了方便您的观察与修改,建议您将embed.js脚本格式化,JavaScript/HTML格式化工具
二、搜索:function ct(),找到:

function ct(){
 return rt.data.user_id==0
}

2015年1月23日更新后(以下简称【更新后】)请搜索:function r(),找到:

function r() {
 return 0 == ot.data.user_id
}

2015年11月10日更新微信登陆后 请搜索:function r(),找到:

function r() {
 return 0 == nt.data.user_id
}

改为:

function ct(){
    document.cookie="ssk_ds_user_id=" + rt.data.user_id;
    return rt.data.user_id == 0
}

【更新后】改为:

function r() {
    document.cookie="ssk_ds_user_id=" + ot.data.user_id;
    return 0 == ot.data.user_id
}

【最新板】改为:
[hide]

function r() {
    document.cookie="ssk_ds_user_id=" + ot.data.user_id;
    return 0 == nt.data.user_id
}

本处为登录判断函数,第三行的意思是:返回当前用户id是否为0,如果为0就是未登录的状态,如果不为0就是已经登陆多说;
所加的第二行的意思是:将当前用户id设置cookie,如果未登录,cookie值就是0,已登录cookie值就是当前用户的多说id。
这个cookie就是实现回复可见的关键所在!
三、接下来就是最关键的修改部分,找到主题的functions.php,在<!--?php下面加入如下代码:

//回复可见开始
error_reporting(0);
function reply($content){
/***** ↓↓↓ 20150513 ↓↓↓ *****/
if(is_single() && preg_match('/\[hide\]([\s\S]*?)\[\/hide\]/i', $content)){
	$stats = 'hide';
/***** 将以下代码
	if(preg_match_all('/\[hide\]([\s\S]*?)\[\/hide\]/i', $content, $hide_words)){
		$stats = 'hide';  
	}
改为下面代码*****/
	preg_match_all('/\[hide\]([\s\S]*?)\[\/hide\]/i', $content, $hide_words);
/***** ↑↑↑ 20150513 ↑↑↑ *****/

//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=="8623800"){//请将8623800换为您自己的多说id,获取方法可在本文留言查看自己的多说id。
		$stats = 'show';//如果是站长直接显示
	}elseif($zhuangtai=="approved"&$user_id!="0"){//approved表示多说评论审核已通过,并且多说ID不为0,也就是必须为登录用户,而非游客状态
		$stats = 'show';//评论审核通过则显示
	}elseif($pendingzhuangtai=="pending"){//pending表示多说评论待审核
		$stats = 'pending';//此处用来切换提示信息,如果为pending待审核则提示信息为 已评论待审核 提示内容见下方,如果不需要审核,回复直接可见,将 pending 改为 show 即可!
	}elseif($user_id=="0"){//加强游客判断,如果用户ID为0,也就是未登录
		$stats = 'hide';//则隐藏
	}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{//否则提示此消息
/***** ↓↓↓ 20150513 ↓↓↓ *****/
//更新了提示信息
		$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>才能查看,所以请勿使用垃圾评论!<br>如果您曾经回复过本文,请直接点击<a href="javascript:window.location.reload();" title="刷新">刷新本页</a>!<br><span style="font-weight: bold; color: #FF0004;">游客回复后依然不可见!</span></p>';
/***** ↑↑↑ 20150513 ↑↑↑ *****/
	}

	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' );
//回复可见结束

[/hide]
【说明】
(1)$short_name获取方法:登录多说官网http://duoshuo.com,点击右上角后台管理,点击需要修改的对应的网站,看到地址栏网址形如:http://ssk.duoshuo.com/admin/,则您的$short_name为.duoshuo前面的字符,我的就是ssk,所以:$short_name="ssk";
(2)使用方法:
【hide】这里放需要隐藏的内容,记得要把【】换为[]【/hide】
(3)如果您使用了supercache等缓存插件,请记得将有回复可见的文章设置为:禁止缓存!
(4)如果您使用本教程后,未回复依然可以看到应隐藏的内容,请将//print_r($hide_words);前面的//去掉,然后刷新文章,本功能可以看到是否已经匹配到应该隐藏的内容,如果未匹配到,现初步判断为您当前使用的主题所造成的,请联系您的主题作者帮忙查看!如果您知道具体原因,也请留言告知!
想要实现多说回复可见的童鞋们快来回复吧~~

注:本文转自【全网首发】多说回复可见教程 | 我的那些事

  • 用支付宝打我
  • 用微信打我

你可以像猪一样的生活,但你永远不会像猪一样快乐!!!

17条回应:“【转载】2016多说评论设置回复可见教程”

  1. 秋明逝远说道:

    好滴

  2. acgmmd说道:

    测试浏览器ua

  3. ZZ's说道:

    如何实现动态加载多说评论框!

  4. 奇虎分享网说道:

    感谢分享 祝您开心快乐每一天!

  5. VIP灵儿网说道:

    过来看看你的博客,希望每天都更新一些文章。 ***viplinger***

  6. 刺眼说道:

    试试看有没有bug

  7. 搜索客说道:

    我来也~~没做回复可见啊?

  8. 搜索客说道:

    我写的【说明】(3)就是,都转过来了也不仔细瞅瞅

  9. 有事留言(www.cnheike.cn)说道:

    3也没有什么需要隐藏的东西

  10. 小灰灰说道:

    支持一下,静态的如织梦、帝国有什么办法

发表评论

电子邮件地址不会被公开。 必填项已用*标注