wordpress中实现嵌套评论回复添加@功能

构成原理

开 wp-includes/comment-template.php, 查找 Walker_Comment 类. 以下展开介绍这 4 个方法.

start_lvl
子菜单列表的开始标签, 默认是 <ul>, 在第一个子条目之前生成.
end_lvl
对应 start_lvl 的子菜单列表的结束标签, 默认是 </ul>, 在最后一个子条目之后生成.
start_el
条目的前半部分, 包括开始符号和评论内容. 开始符号是 <div> 或者 <li> (外层是 ol 或 ul 的情况下是 <li>); 评论内容就是评论的相关信息显示, WordPress 向我们提供了可即用的布局, 但也可以通过 callback 方法改变评论内容的结构. 调用回调函数的部分代码示意如下:

 代码如下 复制代码

function start_el(&$output, $comment, $depth, $args) {
 $depth++;
 $GLOBALS['comment_depth'] = $depth;
 
 // 如果定义了回调函数, 则调用其回调函数, 并终止后面的处理.
 if ( !empty($args['callback']) ) {
  call_user_func($args['callback'], $comment, $args, $depth);
  return;
 }
 
 // 如果没有定义回调函数, 则执行本方法中后面的处理, 生成默认的评论布局.
 ...
}

我们所谓的自定义嵌套回复, 就是创建一个 callback 方法, 并在 wp_list_comments 方法中调用这个它生成自定义的评论结构. 也可以认为是定义一个新的方法, 取代 start_el 方法内部的默认布局.

end_el
条目的后半部分, 其实就一个结束符号. 这里也提供一个名为 end-callback 的回调方法, 原理和 start_el 一样, 是一个自定义的处理方式. 但是 end-callback 并不常用, 因为 end_el 只生成一个简单的结束符号, 实在没必要为此再定义一个方法.我觉得只有在需要复杂的评论结构时, 才有必要用到 end-callback. 如: 要在评论的上方和下方都添加背景图效果, 评论框内可能需要多一个 DIV 层, 则可能用上 end-callback. 在 callback 方法中以 <div><div> 作为开始, 而 end-callback 中以 </div></div> 结束掉.
举例说明:

下面将以一个嵌套回复的例子来证明上述内容.

现有评论嵌套结构如下:

 代码如下 复制代码
comment (1)
        comment (1.1)
        comment (1.2)
            comment (1.2.1)
    comment (2)

依照上述方法, 执行顺序如下:

 代码如下 复制代码
start_el (1)
start_lvl (1)
start_el (1.1)
end_el (1.1)
start_el (1.2)
start_lvl (1.2)
start_el (1.2.1)
end_el (1.2.1)
end_lvl (1.2)
end_el (1.2)
end_lvl (1)
end_el (1)
start_el (2)
end_el (2)

假设方法配置都是默认的, 则:

 代码如下 复制代码

start_lvl 为 <ul>
end_lvl 为 </ul>
start_el 为 <li> 和内容部分
end_el 为 </li>

又设 “…” 为评论内容, 则代码生成如下:

 代码如下 复制代码

<li>
 ... (1)
 
 <ul>
  <li>
   ... (1.1)
 
  </li>
  <li>
   ... (1.2)
 
   <ul>
    <li>
     ... (1.2.1)
 
    </li>
   </ul>
  </li>
 </ul>
</li>
<li>
 ... (2)
 
</li>

好了原理讲了下面我们来实现了。

一、添加评论@回复js代码

一下代码来源于网络,原作者链接暂无,如果你是原作,麻烦留言留下代码来源链接。
天空团gsky提示:代码来源自——伟大的zww.me大神!
js代码如下:可自行新建js文件调用,也可添加到已有的js文件,代码所在js文件必须在文章页面有调用,好啦,废话不多说,贴代码:

 代码如下 复制代码
/* 
@replyer js by vfhky 
developed by ZWS
嵌套评论@回复,添加@链接,
*/ 
    jQuery(document).ready(function($){         //Begin jQuery   
        $(‘.reply’).click(function() {   
            var atid = ’“#’ + $(this).parent().attr(“id“) + ’”‘;            //获取当前评论的链接地址    
            var atname = $(this).prevAll().find(“.fayan”).text();           //获取当前评论的姓名  
            $(“#comment”).attr(“value”,’<a href=’ + atid + ’>@’ + atname + ’</a>’ + “:”).focus(); 
            });  
        $(‘.cancel-comment-reply a’).click(function() {                     //点击取消回复评论清空评论框的内容   
            $(“#comment”).attr(“value”,”); 
            } 
            ); 
    }) 

注意对照我所调用的相应div 的ID,对应你所要修改的主题,对照性修改!
二、修改CSS代码

接下来,把子评论的右移去掉(这玩意儿太占手机屏幕了!)
.commentlist li.comment ul.children {margin-left:20px;border-top: 0px;} 
把其中的margin-left:20px;删去,或修改为margin-left:0;
三、清除function函数模板中的冲突函数

如果你的主题添加了评论跳转代码,则要修改其中的代码,避免造成@链接跳转错误。
可对照如下代码:

 代码如下 复制代码
/*评论链接跳转*/    
add_filter(‘get_comment_author_link’, ’add_redirect_comment_link’, 5);    
//add_filter(‘comment_text’, ’add_redirect_comment_link’, 99);    
function add_redirect_comment_link($text = ”){    
    $text=str_replace(‘href=“‘, ’href=”‘.get_option(‘home’).’/?go=’, $text);    
    $text=str_replace(“href=’”, “href=’”.get_option(‘home’).“/?go=”, $text);    
    return $text;    
}    
add_action(‘init’, ’redirect_comment_link’);    
function redirect_comment_link(){    
    $redirect = $_GET['go'];    
    if($redirect){    
        if(strpos($_SERVER['HTTP_REFERER'],get_option(‘home’)) !== false){    
            header(“Location: $redirect”);    
            exit;    
        }    
        else {     
header(“Location: /”);    
exit;    
}    
}    
}   

可以看到其中的第3行已经被我注释掉了,主要原因就是该行代码会在评论内容(text)存在的链接自动加上go跳转,我们原来的评论链接为:
<a href=“#comment-976″>@XXX</a>  
其相当于完整链接:
<a href=“/error-sto.html#comment-976″>@XXX</a> 
当被加上go跳转后则变成:
<a href=“/?go=#comment-976″>@XXX</a> 
打开这个链接试试,是不是跳转到首页去了?
这样的话,@链接就失去意义了,为了防止这样的“悲剧”,我们一定要清除冲突的代码,给你的@巩固地位。
好啦,@评论已经完成了,用嵌套评论的孩子可以轻松撸起了!

时间: 2024-10-30 05:22:35

wordpress中实现嵌套评论回复添加@功能的相关文章

php实现评论回复删除功能

简单的评论回复删除功能,具体内容如下 一.数据库 建立两张表,一是pinglun表:二是huifu表 效果如下: 代码如下: 1.主页面 main.php <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>无标题文档</title> <h1>朋友圈</h1> <div>内容:</div>

Android编程实现通讯录中联系人的读取,查询,添加功能示例

本文实例讲述了Android编程实现通讯录中联系人的读取,查询,添加功能.分享给大家供大家参考,具体如下: 先加二个读和写权限: <uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="android.permission.WRITE_CONTACTS" /> 具体代码: package com.ebo

优化WordPress中文章与评论的时间显示_php技巧

很多博客都喜欢用 评论发表于 "XXX 分钟 之前".文章发表于 "XXX 分钟 之前"来显示文章评论的时间,改善的时间显示方式不仅能很直观的告诉读者这篇文章或评论发表距今已有多长时间,更能增强评论回复的时间感,哥很喜欢,因为前一阵子压在手里的东西太多了,工作日白天又苦于不能上网,所以主题的样式及功能部分一点一点的写拖了好长时间,最近这阵子刚好轮到折腾评论了,所以就逐步参照网上流行的样式一点一点的修改起来自己的评论样式和功能. So-.. Go-.. 交道麻袋-..

WordPress中利用admin-ajax.php实现Ajax功能

用这个文件进行 Ajax 的好处主要有几点: 安全,WordPress 本身进行了很复杂的安全性优化,如果我们都自己写是很浪费时间和资源的. 兼容,由于文件是公用的,提供了通用的钩子,其它插件都可以参与进去. 高效,这个不解释了,既符合原则(执行到了 init 钩子),又兼顾了效率问题. 方便,一个钩子即可输出代码,都不用判断条件. 基本就这几点了,网上查了一下,发现关于此文件的资料并不多,于是看了下源码,发现使用其实很简单. 首先请求这个文件:  代码如下 复制代码 echo admin_ur

WordPress中实现微信机器人回复图解

WordPress 博客联系起来,搜索到和用户发送信息匹配的日志,并自动回复用户,让你使用微信进行营销事半功倍. 微信机器人这个插件使用非常简单,首先将其上传到插件目录下并激活,然后登录微信公众平台(https://mp.weixin.qq.com) > 点击高级功能菜单 > 开启开发模式 > 编辑公众平台消息接口: 然后返回插件设置界面,设置你上面填写的Token以及其他信息: 主题"> 设置完成之后,随意发送一个关键词给你的公众账号既可以实现自动回复了: 后台插件安装

使用jQuery实现WordPress中的Ctrl+Enter和@评论回复_jquery

添加 Ctrl+Enter 快捷回复这里送上两种方法,首先是 jQuery 方法,前段时间一直在研究 jQuery ,因此对 jQuery 方法比较熟悉,如果你的主题本来已经加载 jQuery 库,建议你使用下面的方法. 把这段代码加入 js 文件中,如果你已经加载 jQuery ,现在就可以使用 Ctrl+Enter 进行快捷回复. jQuery(document).ready(function($){ //Ctrl+Enter回复 jQuery(document).keypress(func

利用AJAX实现WordPress中的文章列表及评论的分页功能_javascript技巧

文章列表页分页 一.加载 jQuery 库既然是 jQuery 驱动的 Ajax ,加载 jQuery 库是必须的. 二.文章列表格式在你的文章列表页面(首页 index.php.归档 archive.php )需要确保有以下类似的结构 <!-- 包含所有文章的容器 --> <div id="content"> <!-- 各文章的容器 --> <div class="post"></div> <div

uitableview-实现类似微信的一条状态中添加回复的功能

问题描述 实现类似微信的一条状态中添加回复的功能 各位大神,我想开发类似微信朋友圈里,一条状态中显示回复的功能,是通过在UITableViewCell中添加UITableView的方式实现的吗? 具体有没有类似的代码可以参考?谢啦 再就是,一条回复中会显示,:"张三回复李四:" 张三和李四这两个名字可以点击,这是怎么实现的? 求各位大神指导啊!

WordPress中Ajax评论分页实现方法

一.准备 加载 jQuery 库,这个不解释了.  二.开启 WordPress 评论分页 打开 WordPress 后台 – 设置 – 讨论,在"其他评论设置"中勾选分页显示评论,设置一下评论数目,这里的评论数目仅计算主评论,回复评论不作计算.这里 Kayo 填了比较大的数字(15),因为评论分页分得太细会使用户不便于阅读之前的评论.  在后台开启评论分页后,在 comments.php 中需要添加分页导航的地方加入以下代码(如主题中有类似代码则无须再添加,另外代码中的 nav 标签