WordPress Ajax 评论提交

Wordpress Ajax 评论提交

5.1+ 新版本

新版本重构addComment 对象使原来的代码失效了,于是移除了脚本里集成的addComment 对象,并载入官方文档。

只要是4.4+ 版本即可使用。

下载地址

4.4+ 新版本

查看源码发现4.4新增了一个函数wp_handle_comment_submission

这个函数可以看作是wp_new_comment的升级版,用这个函数将大大减少了AJAX回调函数的代码量,简单的说就是由原来的几十行代码变成一行,而且过滤条件更加全面,非常之方便:idea:

本教程必须为4.4或以上版本,低版本直接使用会报错。

使用方法

下载压缩包里的文件,解压后将文件夹上传到主题根目录下,注意是加压后的文件夹,不是文件件中的文件

下载地址

然后在functions.php中使用如下代码调用

require('ajax-comment/main.php');

配置适应主题

app.js第四行调整评论列表class

__list = 'comment-list';

main.phpformpostion参数为评论表单位置

回调函数中的评论样式可根据你的主题自行调整,但不要使用回复按钮,会报错。

代码已经过默认主题twentysixteen测试,没有任何问题。

旧版本

2015/11/17 更新

解决了当评论倒序排列时新评论无法出现在顶部的bug

增加了一个评论表单位置参数

编辑do.php,找到formpostion参数(约第9行),默认为bottom,如果你的表单在顶部则设置为top


2015/09/15 更新

处理了没有评论时刷新后才能显示新评论的bug,注意在js中修改自己的容器名。

增加了一个是否接受邮件通知的选项。


ajax提交评论不但可以提升交互体验而且可以防止垃圾评论,一般垃圾评论都是通过表单机器人提交的,如果使用了ajax评论提交我们就可以禁用wordpress的表单提交,也就是删除或者清空wp根目录下的wp-comment-post.php这个文件。

默认代码兼容wordpress 默认主题2015。

实现方法

下载压缩包,解压后把文件夹放到自己的主题目录中,在functions.php中加入如下代码即可。

require get_template_directory() . '/ajax-comment/do.php';

注意是把解压得到的文件夹放到主题目录下,不是文件夹中的文件

兼容处理

由于主题结构的不同,可能出现的结果是虽然你成功提交了评论,但是刷新之前显示不正常,那么我们需要对相关函数进行处理

1.评论样式不一致

需要修改文件夹中的do.php,修改其中的评论结构使之和你的一致即可

2.不显示新评论

这是因为包裹评论的容器和JS中的不一致,打开comments.php,看看你的容器名,然后修改ajax-comment.js中标注的位置即可,具体代码如下

__list = 'comment-list';//your comment wrapprer

3.注意你的评论结构使用的是ul还是ol,js中也要保持一直

4.修改文字提示样式需要修改压缩包内的css文件

5.如无文字提示则检查你的评论框textarea是否有id="#comment"

文件下载

文件下载

Bigfa

computer loser

Comments : 187

  1. mrwu的头像

    你好,
    请问下如何才能让访客评论后评论框自动变成登陆状态?
    明明有记录下评论者的cookie,但是评论框每次都不记录登陆状态,导致每次评论都需要重新填写信息。
    除非是注册账号登陆才有登陆状态显示,我看很多博客都是不需要注册就变成登陆状态了。请教。

    1. bigfa的头像

      @mrwu 可能你用了什么静态缓存?

    2. mrwu的头像

      @bigfa 你好,我已经找出原因,我使用了fields重写,name,email,site的前端。导致用户在前台提交评论后无法自动填充曾填写的信息。
      我尝试去掉fields,但是因为我的主题评论样式是使用的WP自带,如果去掉会出现部分显错。
      因此我在考虑另一种方案,我看到有的博客比如知更鸟,他们使用ajax评论后,在没有注册登录的情况下,评论框上方直接显示成登录状态。。。
      不太熟悉wp的一些钩子函数,请教?我该如何让用户评论后网站自动改变为登录状态。

    3. bigfa的头像

      @mrwu 看了眼,并不是登录状态,和默认一样,调用的cookie :???:

    4. mrwu的头像

      @bigfa 对,就是默认调用的cookie,
      如果我不用fields重写,name,email,site的前端,就可以自动记住用户填写的信息,但是重写后,现在已经无法把记住的信息给填充到评论表了,扎心。。

    5. 西瓜瓜的头像

      @mrwu :neutral: 感觉好像很不错的样子

    6. mrwu的头像

      @西瓜瓜 是AJAX。这不就是AJAX遇到问题在请教吗。
      你也感觉不错吗?我也觉得我的主题很不错, :oops: :oops:

    7. 西瓜瓜的头像

      @mrwu 你现在这个是Ajax的回复吗? :arrow:

  2. 野酷的头像

    现在刚发布完评论还可以编辑吗? :neutral:

    1. bigfa的头像

      @野酷 不可以 :roll:

  3. Era的头像

    最新版的wp,按着你的方法,评论提交之后,要很长时间才会显示评论成功。

  4. Era的头像

    登陆状态,评论提交很快,如果退出登陆,提交成功得半天。不知道是什么原因。
    大佬,指点下。

    1. bigfa的头像

      @Era 评论慢一般都是服务器发邮件太慢。

  5. Www.Last.City的头像

    这个倒是好了 可是 提交评论后如何让评论列表把新增加的评论直接刷新出来呢?

  6. 测试人员的头像

    阿果然色感觉你森会认识你你说你说啃吧开始 :smile:

发表留言

人生在世,错别字在所难免,无需纠正。

:mrgreen::neutral::twisted::arrow::shock::smile::???::cool::evil::grin::idea::oops::razz::roll::wink::cry::eek::lol::mad::sad::!::?: Smilies powered by wp-alu

Post Comment