WP Favorite Posts如何显示其他用户的收藏文章【WP开发笔记】

2018/07/19
WP Favorite Posts如何显示其他用户的收藏文章【WP开发笔记】

最近笔者为一位用户做了一个WordPress主题的二次开发。这个WorPress主题是boombox杂志风格的CMS主题。这个主题的功能这里就不表。单就用户需要的一个功能,就是在文章底部有个收藏功能,如下:

这个功能笔者使用WP Favorite Posts这个插件实现的,当然这么漂亮的样式是自定义CSS的。为了方便定义位置,对于插件的设置使用手动设置。具体开插件说明即可,这里不展开。

话说用户需要把收藏功能整合到用户中心,在每个用户中心可以显示用户收藏的文章。

最开始笔者使用了wpfp_list_favorite_posts这个函数实现。每个登录用户可以清楚的看到自己收藏的文章。

然后用户为了增加网站的互动性,可以让用户彼此查看收藏的文章,通过评论里面的用户链接,可以直达每个用户中心,然后查看这个用户收藏的文章。

在模拟此操作时,发现每个用户的收藏文章都是一样的。这不难理解,因为WP Favorite Posts插件的wpfp_list_favorite_posts函数显示的是登录用户的收藏文章。

而显示要显示的被查看用户的收藏文章

通过对WP Favorite Posts源码的分析,没有找到对应的函数。

为此对wpfp_list_favorite_posts函数进行分析,发现收藏文章获取文章是通过变量$favorite_post_ids来实现的。

也就是说如果实现$favorite_post_ids值来自被查看用户的文章id即可。

通过数据库分析,发现wp_usermeta表中有个meta_key字段是wpfp_favorites,而其值正好就是收藏文章的ID。显然至此,找到了突破口。

于是在查询循环前加入以下代码即可:

$user_id = bp_displayed_user_id();
$key = ‘wpfp_favorites’;
$single = true;
$favorite_post_ids = get_user_meta( $user_id, $key, $single );

解释一下:

get_user_meta( int $user_id, string $key = ”, bool $single = false )

这个WP函数是获取一个用户的元字段。

参数说明:

$user_id
(int) (必须的) 用户ID。

$key
(string) (可选) 元键。 默认返回所有键。

默认值: ”

$single
(bool) (可选) 是否返回单值。

默认值: false

另外:需要对 wpfp_remove_favorite_link(get_the_ID());和 echo ‘<p>’.wpfp_clear_list_link().'</p>’;进行判断,做一个登录用户id和被查看用户ID对比即可。这样就可防治被查看用户的收藏被清除。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注