• 注册
  • 个人说明:TA有点懒了,什么都没有写。
    关注 1 粉丝 0 喜欢 0 内容 256
    河南省·郑州市
    聊天 送礼

    新版界面开发进度

    14%
    其实就是啥也没写,只有想法,哈哈
    • 回帖总排行
    • 采纳总排行

    分享精彩给好友

    全部文章 关注:0 内容:1074

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

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

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

      快月底了加班时间少,抽空写下博客的评论模板,比来比去还是觉得大前端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文件中。或许那些抄袭大前端代码的主题也有可能出现这种错误,比如那什么唯爱资源网之类的。

      你需要登录,才能进行发帖操作