WordPress 会员付费套餐方案:ACF自定义实现
如果你的会员体系 不复杂,也 不需要自动扣费、续费、订单管理、权限等级体系,那 完全可以用 ACF + 自定义 CPT + 自定义权限字段 来实现一个轻量、快速、完全可控的会员系统。
需求概要
- 用户注册 / 登录(前端 UI + 自定义字段)
- 订阅不同的付费套餐(含支付)
- 不同套餐可访问不同资源(文章 / CPT / 文件下载限制)
轻量会员系统最终架构(无插件版)
核心思想:
- 用户表 User Meta 存套餐字段(membership_level)
- 资源通过 ACF 字段(resource_level) 设置需要套餐等级
- 用 PHP 判断
用户套餐 >= 资源所需套餐 - 支付通过 PayPal 或 微信截图上传(人工审核)
- 后台审核后更新用户套餐字段即可
这是最轻量也最易维护的方案。
整体结构
User
└── membership_level(用户当前套餐 0/1/2/3)
Resources (CPT)
├── resource_level(资源所需套餐)
├── files(下载资源)
└── preview / description
WeChat Payment Order (CPT)
├── user_id
├── target_level
├── payment_screenshot
├── status (pending / approved)
└── date
1. 用户套餐字段(User Meta)
你在 ACF → User 里面创建字段:
字段名称:membership_level
类型:Select(0=免费用户,1=基础套餐,2=高级套餐,3=尊享…)
你可以无限扩展。
2. 资源权限字段(ACF)
在你的资源 CPT(如 digital_model / php_source)里创建字段:
字段名称:resource_level
类型:Select(同样 0/1/2/3)
→ 表示资源最低需要哪个套餐才能下载或查看。
3. 权限判断逻辑(非常简单)
在 single 模板里加入:
$user_level = get_field('membership_level', 'user_' . get_current_user_id());
$resource_level = get_field('resource_level');
if ( $user_level >= $resource_level ) {
// 有权限
get_template_part('template/resource-detail');
} else {
echo '<div class="need-pay-box">
<h3>当前资源需要套餐等级:' . $resource_level . '</h3>
<a href="/pricing" class="btn">升级套餐</a>
</div>';
}
✔ 你的 allowed_membership_levels 需求直接替换成数字判断了。
✔ 更轻、更快、更可控。
4. 下载权限(保护资源文件)
为了防止盗链,下载链接不要直接输出真实 URL。
给你一个安全的下载接口:/download?rid=xxx
实现代码:
function secured_download() {
$rid = intval($_GET['rid']);
$file = get_field('resource_file', $rid);
$user_level = get_field('membership_level', 'user_' . get_current_user_id());
$resource_level = get_field('resource_level', $rid);
if (!is_user_logged_in()) {
wp_redirect('/login');
exit;
}
if ($user_level < $resource_level) {
wp_die('你没有权限下载该资源');
}
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=" . basename($file));
readfile($file);
exit;
}
add_action('init', function () {
if (isset($_GET['rid'])) secured_download();
});
下载必须满足:
- 已登录
- 用户套餐 >= 资源套餐
- 才能输出文件
5. 微信支付(凭证上传)
你需要一个简单的支付页面 /pay/wechat?level=2
流程:
- 用户选择要购买的套餐
- 显示你的微信收款二维码
- 用户上传支付截图
- 创建 CPT:
wechat_payment_order
字段:
user_idtarget_levelpayment_imagestatus = pending
后台审核页面中:
✔ 点击 “通过” → 更新用户的 membership_level
✔ 点击 “拒绝” → 更新为 rejected
用户升级套餐代码(后台审核时执行)
当管理员点击“审批通过”时执行:
update_field('membership_level', $target_level, 'user_' . $user_id);
即可升级用户套餐。
6、PayPal(个人版)支付流程
你可以使用:
✔ PayPal 表单跳转(最简单)
✔ 使用 PayPal 的“商品付款链接”
✔ 用户支付成功 → 显示上传截图按钮(证明付款)
✔ 最终依旧人工审核并升级会员
因为你是 个人版 PayPal,无法用 API 回调,但没关系,你的系统本来就是轻量、人工审核即可。
7. 套餐页面 pricing 结构
你可以创建一个页面:
- 套餐 0:免费
- 套餐 1:基础
- 套餐 2:高级
- 套餐 3:尊享
每个套餐按钮:
PayPal 支付
<a href="https://paypal.me/你的paypal链接?amount=金额">PayPal 付款</a>
微信支付
<a href="/pay/wechat?level=2">微信支付</a>
最终结果
✔ 无需任何会员插件
✔ 用户套餐你完全控制(ACF user meta)
✔ 资源权限你完全控制(resource_level)
✔ 微信支付你完全控制(上传截图 + 审核)
✔ PayPal 个人版也能用
✔ 下载权限安全、不可盗链
✔ 更适合你现有项目(CPT + ACF + 自定义 PHP)
完全是工程级的、可直接投产的轻量会员系统。