在论坛博客发图,从来没有这么简单!
wordpress实现站点文章增加外链跳转页功能

WordPress多说回复可见测试 不要回复 目前成功

123

回复可见功能常见于论坛,其目地主要是为了吸引用户注册,而对于wordpress博主而言,这个目的并不是很强烈,所以对这个功能的需求也相对小很多,遗憾的是多说本身还不支持回复可见功能,但是不乏有很多站长需要这样的功能

比如说本屌丝  不是说这个功能有多重要,本屌丝也只是想增强网站人气,抵挡一部分伸手党的作用

下面开始具体操作:

一、请先将多说核心脚本embed.js本地化

首先打开多说核心脚本的远程文件:http://static.duoshuo.com/embed.js ,然后点击右键-另存为,将其保存下来,上传到你自己的空间里。

然后用FileZilla等FTP客户端软件找到wordpress的【wp-content/plugins/duoshuo】目录,找到【WordPress.php】,用各种文本编辑器打开,如:记事本,我比较喜欢用Notepad++。

打开【WordPress.php】,搜索“embed.js”,会找到两处网址:http://static.duoshuo.com/embed.js ,将这两处替换为你上传后的embed.js地址,推荐将embed.js上传至多说插件目录:【wp-content/plugins/duoshuo】,如上传至多说插件目录,【WordPress.php】中的两处替换网址就改为【wp-content/plugins/duoshuo/embed.js】,然后保存上传即可。

刷新下页面,然后点击鼠标右键 查看源代码-搜索 embed.js,如果显示wp-content/plugins/duoshuo/embed.js,而且多说评论框区域一切正常,那么恭喜您,多说社会化评论框核心脚本embed.js本地化就完全成功了!

您也可以用这种方法,将embed.js上传至七牛云存储等CDN当中就能使速度再次提升!

二、搜索多说核心脚本embed.js :function ct(),找到:

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

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

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
}

本处为登录判断函数,第三行的意思是:返回当前用户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=="5034959"){//请将5034959换为您自己的多说id,获取方法见代码下方说明(2)
$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' );
//回复可见结束

四、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://www.dsqnw.com/redirect.php?type=unknow&url=http://dsqn.duoshuo.com/user-url/?user_id=5034959

user_id=后面的数字就是您的多说id!

(3)代码中//后面的部分为说明可删除

(4)使用方法:

【hide】这里放需要隐藏的内容,记得要把【】换为[]【/hide】

(5)如果您使用了supercache等缓存插件,请记得将有回复可见的文章设置为:禁止缓存

我要爆料声明:屌丝青年不提供任何违规资源存储及下载,请遵循相关法律法规!
解压密码均为(www.diaosiqingnian.com或dsqn)大神们别在问我了!
文章总数
2042+
标签总数
1608+
评论总数
10883+
运营天数
946+