WordPress本地调用多说用户头像

这段时间做自己的小博客,评论这块儿我选用了多说插件,既美观又方便不少,但是后来我却发现一个问题,我想在不使用多说提供的插件,本地调用最近评论的用户的时候却出现了一个问题,用户头像没办法加载,对于少数在多说里面更改过用户头像的用户可能有办法可以拿到图像,但是大部分人就是直接QQ等第三方登录,这部分用户的头像获取就成了问题。那么我该怎么解决呢?

带着疑问我在百度上各种搜索,发现也有人提过同样的问题,但是没有任何有价值的回答。官方似乎也没有提供类似的方法可以让我们轻松的从wordpress本地获取到多说的用户头像。看着通篇一样的default头像,我实在没办法忍受。到底该怎么办呢?我开始研究多说官方提供的插件,发现在调用最近访客的时候请求了这样一个地址:http://***.duoshuo.com/api/sites/listVisitors.json?show_time=0&avatar_size=50&num_items=8&require=site%2Cvisitor%2Cnonce%2Clang&site_ims=1463377476&referer=***%2F&style_patch=wordpress%2F&v=16.3.18&jwt=***

进一步研究发现,这个地址没有做验证,而且我只需要传入num_items就可以请求制定个数的访客(http://***.duoshuo.com/api/sites/listVisitors.json?num_items=xx),到这儿似乎看到点希望了。

于是我新建了一个数据表wp_commentuser用来记录在站点评论的所有用户,表中有两个字段url(用户网址),(avatar_url)用户头像头像地址。

我们知道多说会定期将评论同步会本地,那么我们就可以通过wp_comments拿到所有在网站浏览过的用户和其网址(作为标示),我们从wp_comments表中取得所有不重复的用户的个数,这个个数就是我们在请求http://***.duoshuo.com/api/sites/listVisitors.json?num_items=xx需要传入的items的值,接下来的工作就简单了,就是从接口拿到的访客的信息,以url为标示将其插入或者更新到wp_commentuser中,然后就是在需要调用用户头像的地方查询wp_commentuser这个表拿avatar_url就好了。

最后我们把以上步骤下载一个方法里面,然后将其挂载到wp_ajax_duoshuo_sync_log(多说评论同步会本地的钩子函数)这个钩子上,这样左右一个好处就是如果是用户在网站评论了多说评论同步会本地的时候存在wordpress本地的用户头像也会同时更新。
以下是我写的一个比较粗陋的代码:

//同步多说头像
function sync_duoshuo_commentUser(){
global $wpdb;
$sql = "select distinct comment_author_url from $wpdb->comments";
$res = $wpdb->get_results($sql);
$count = count($res);
if($count){
$url = "http://deanhan.duoshuo.com/api/sites/listVisitors.json?num_items=".$count;
$json = json_decode(file_get_contents($url));
foreach($json->response as $user){
$url = $user->url;
if($url=="") continue;
$sql = "select id from wp_commentuser where url='".$url."'";
$res = $wpdb->get_row($sql);
if($res<=0){ $wpdb->insert('wp_commentuser',array('url'=>$url,'avatar_url'=>$user->avatar_url));
}
}
}
}
add_action('wp_ajax_duoshuo_sync_log', 'sync_duoshuo_commentUser');
add_action('duoshuo_sync_log_cron', 'sync_duoshuo_commentUser');

虽然上述做法基本满足了需求,但是其中还是有一些问题的,比如说我们从那个接口获取的数据能够作为标示和本地wordpress数据表能建立上联系的似乎只有url字段,如果url为空,那么就没有办法来标示了,对于这部分用户的头像只能够显示默认头像。

  • 支付宝二维码 支付宝
  • 微信二维码 微信
相关文章