是的,这几周都在重写WordPress这块的所有代码,之前也有提到过,想做一款属于自己的主题,起因也是因为自己写了一个说说页面,就是这篇文章《做了一个WordPress的说说/心情/一句话/碎言碎语的页面》,但是发现里头的有些代码有些乱,导致写的时候蛮有强迫症的,就是想重写,但是重写的话,耗时好脑。
应该是写完说说页面后,反复纠结了下要不要重写一个呢?然后就在边纠结下(大概率是因为发现bug太多了),我还是开始动手写了,基本上重构了所有与评论相关(评论跟随回复,异步请求评论,评论自定义表情,后台文章编辑器/评论模块加入快捷回复表情,有新的评论/评论审核通过/回复评论邮件提醒...)的代码(除了一些前台的展示页面外),因为我个人觉得评论算是目前WordPress交互逻辑最多的,所以在写完这些后,还是有点小骄傲的,虽说用WordPress也有个56年了吧,但是这次的折腾算是真正意义上入坑WordPress了,以前的更多是拿到别人的代码,解决问题为主,有些bug也不会修,然后就只好厚着脸皮咨询写这代码的博主(都非常热心的解答,比如张戈博客,benen005,小C,龙笑天下,懿古今等等,还有好多呢,应该都不太认识我,不过在这里一声道谢,还是要有的,嘻嘻)。
我去,说了那么多啊,那该进入本文的正题了。
先说为什么是坑呢?因为WordPress中的wp_update_comment更新评论方法,其中的评论的内容需要传入的字段是comment_content
而不是comment
,这就是坑点所在了,因为新增评论的字段是comment
,这就导致我一度以为是我逻辑没有处理好,结果到后面才知道是字段传错了,而且更新评论所需要的字段,基本上就是WordPress数据库中评论表的字段,这下明白了。
其实我最开始也不相信是这样的,但是通过查看了源代码,然后就
文件路径:wp-includes\comment.php
方法名:wp_update_comment
具体行数,不好说,直接搜索关键部分的代码吧,如下:
$keys = array( 'comment_post_ID', 'comment_content', 'comment_author', 'comment_author_email', 'comment_approved', 'comment_karma', 'comment_author_url', 'comment_date', 'comment_date_gmt', 'comment_type', 'comment_parent', 'user_id', 'comment_agent', 'comment_author_IP' ); $data = wp_array_slice_assoc( $data, $keys ); $rval = $wpdb->update( $wpdb->comments, $data, compact( 'comment_ID' ) );
问题是解决了,不得不说,还是要有接口文档啊,可是WordPress是混合开发啊,而异步评论是基于自己的需求开发的啊,那怪我了喽,没事瞎折腾干嘛,呜呜呜呜呜。
虽然说,我解释了为什么会更新失败的原因和坑点,但是还是说下怎么解决的吧,其实也很简单,有以下的方法。
方法1、前台如果有做发送的异步编辑更新评论的话,将原先的传的comment
字段参数替换成comment_content
,即可
方法2、将收到的comment
,赋值给comment_content
也是可以的。