
使用 WP User Frontend 用户心插件实现文章订阅功能
WP User Frontend插件是一个流行的前端用户中心插件,我们使用这个插件实现一个文章投稿功能,根据需要我们可以针对文章投稿功能收费,用户购买一个资源包后,可以发布若干篇文章到我们的网站。
那么,是否可以扩展一下,实现用户购买资源包后,可以阅读网站上的多少篇文章呢?一番测试之后,发现并没有太大难度。
实现文章订阅功能的思路和代码
要想和默认的付费文章发布功能一样,实现付费文章阅读功能,我们首先要能判断当前用户是否购买了有效的资源包,并且这个资源包没有过期。翻一下 WP User Fronted 插件的代码很容易找到。具体代码如下。
1 2 3 4 | $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 来修改文章内容,对于需要付费阅读的文章,如果用户没有登录,或者没有有效的订阅包,给出相应的提示;如果用户有可用的订阅包,直接显示文章全文,完整代码如下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | 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 已有的功能,实现这两个功能估计也不会太难,有兴趣的朋友可以尝试一下。