NIUBI
wordpress教程

WordPress 使用 ajax 提交评论 WP_ERROR 导致布局错乱

9个月前/ 53/ / WP爱好者/ 已收录/
导语: WordPress 使用 ajax 提交评论 WP_ERROR 导致布局错乱问题出现在大前端 dux 主题中,其它主题没有测试,只要提交相同评论,就会触发 WordPress 检查重复评论机制,如果评论重复了,就会给你返回一个 WP_ERROR 信息,提示你可能已经提交了相同评论,接着就会让布局变乱,下面是某站使用的大前端 dux 主题的评论测试截图。

WordPress 使用 ajax 提交评论 WP_ERROR 导致布局错乱问题出现在大前端 dux 主题中,其它主题没有测试,只要提交相同评论,就会触发 WordPress 检查重复评论机制,如果评论重复了,就会给你返回一个 WP_ERROR 信息,提示你可能已经提交了相同评论,接着就会让布局变乱,下面是某站使用的大前端 dux 主题的评论测试截图。

WordPress 使用 ajax 提交评论 WP_ERROR 导致布局错乱

WordPress 使用 ajax 提交评论 WP_ERROR 导致布局错乱

快月底了加班时间少,抽空写下 WP 爱好者博客的评论模板,比来比去还是觉得大前端 DUX 的评论比较好看,在扒的过程中发现使用 ajax 提交评论返回的 WP_ERROR 错误会导致布局错乱。

出现这个问题后我的想法是,通过 WordPress 校验评论是否被允许的函数 wp_allow_comment 来更改 WordPress 返回的数据。

wp_allow_comment 简单使用

wp_allow_comment( array $commentdata, bool $avoid_die = false )

参数说明

$commentdata

欲评论的数组数据

$avoid_die

是否返回 wp_error 错误数据,默认为 false 不返回。

返回值

如果$avoid_die 参数设置为 true,评论将不被允许,返回 wp_error 错误信息(其实就是一个错误网页)。false 返回 0、1、spam。我测试过,重复评论会返回 1,其它的没试过,有兴趣自己试试。

在 ajax 提交评论的接口文件中加入判断,测试评论后发现这样做虽然可以修改重复评论时产生的 WP_ERROR 信息,但是,它会导致正常评论时出现 has_cap()函数传递参数的错误。

WordPress 的 WP_ERROR 类在检测到评论重复时,会返回一个 409 状态码给浏览器,表示提交数据与服务器已有数据冲突,百度了好久都没解决问题,直到以为 WordPress 大佬指点了下,才发现这个问题是那么的简单。

ajax 评论布局错乱解决办法

方法一、使用 wp_insert_comment 方法插入评论

wp_insert_comment 方法也是向评论数据表插入一条评论,这个方法与 wp_new_comment 插入评论的区别在于后者会检查评论是否重复,而 wp_insert_comment 方法不会检查,所以也就不会返回 wp_error 错误了。

方法二、is_wp_error 判断返回结果

不管使用 wp_insert_comment 方法还是 wp_new_comment 方法插入评论,成功后都会返回一个关于评论的 id。wp_new_comment 方法在插入失败后会返回一个 wp_error 错误对象。is_wp_error 函数就是用来判断是否是 wp_error 错误的,那么我们只需要安装如下代码判断即可。

$comment_id = wp_new_comment( $commentdata,true); if(is_wp_error($comment_id)){  err( '重复评论' ); }

err 是自定义错误函数,定义了响应头,如下代码:

function err($ErrMsg) {     header('HTTP/1.1 405 Method Not Allowed');     echo $ErrMsg;     exit; }

这样再提交重复评论就不会出现返回 wp_error 错误对象,导致布局错乱问题了。这个解决方案适用于大前端 dux5.1 主题及以前版本,问题文件在主题目录下 action 文件夹下的 comment.php 文件中。或许那些抄袭大前端代码的主题也有可能出现这种错误,比如那什么唯爱资源网之类的。

点点赞赏,手留余香

还没有人赞赏,快来当第一个赞赏的人吧!
admin给Admin打赏
×
予人玫瑰,手有余香
  • 2
  • 5
  • 10
  • 20
  • 50
2
支付
收藏 0 海报

版权归属:本文为原创文章,版权归 所有

本文链接:( 欢迎分享本文,转载请保留出处 )

免责声明:如发现本站有涉嫌抄袭侵权/违法违规的内容,请邮件/留言反馈,一经查实本站将立刻删除!

<< 上一篇

2020-06-08

下一篇 >>

2020-06-17

全部评论( 0 条 )
扫一扫二维码分享