WP User Frontend插件是一个流行的前端用户中心插件,我们使用这个插件实现一个文章投稿功能,根据需要我们可以针对文章投稿功能收费,用户购买一个资源包后,可以发布若干篇文章到我们的网站。
那么,是否可以扩展一下,实现用户购买资源包后,可以阅读网站上的多少篇文章呢?一番测试之后,发现并没有太大难度。
实现文章订阅功能的思路和代码
要想和默认的付费文章发布功能一样,实现付费文章阅读功能,我们首先要能判断当前用户是否购买了有效的资源包,并且这个资源包没有过期。翻一下 WP User Fronted 插件的代码很容易找到。具体代码如下。
$current_user = wpuf_get_user();
$user_subscription = new WPUF_User_Subscription($current_user);
$user_sub = $user_subscription->current_pack();
$sub_id = $current_user->subscription()->current_pack_id();
有了上面的代码,我们就可以使用 the_content
Filter 来修改文章内容,对于需要付费阅读的文章,如果用户没有登录,或者没有有效的订阅包,给出相应的提示;如果用户有可用的订阅包,直接显示文章全文,完整代码如下。
add_filter('the_content', function ($content)
{
$current_user = wpuf_get_user();
$user_subscription = new WPUF_User_Subscription($current_user);
$user_sub = $user_subscription->current_pack();
$sub_id = $current_user->subscription()->current_pack_id();
$is_paid_post = get_post_meta(get_the_ID(), '_wpuf_is_paid_user', true) === 'on';
// 非付费文章不做处理,直接返回
if ( ! $is_paid_post) {
return $content;
}
if ($sub_id) {
// 有订阅包,并且已过期时,$subs_expired 为 true
$subs_expired = $user_subscription->expired();
} else {
$subs_expired = false;
}
if ( ! is_user_logged_in()) {
$filtered_content = '此文章需要登录后才能查看,请登录。';
} else {
if ($subs_expired) {
$filtered_content = '此文章需要订阅才能查看,请订阅。';
} else {
$filtered_content = $content;
}
}
return $filtered_content;
});
上面的代码中,并没有实现判断剩余付费文章数量和按文章付费的功能,根据 WP User Frontend 已有的功能,实现这两个功能估计也不会太难,有兴趣的朋友可以尝试一下。