博客 / WordPress 教程

WordPress 会员付费套餐方案:ACF自定义实现

如果你的会员体系 不复杂,也 不需要自动扣费、续费、订单管理、权限等级体系,那 完全可以用 ACF + 自定义 CPT + 自定义权限字段 来实现一个轻量、快速、完全可控的会员系统。

需求概要

  1. 用户注册 / 登录(前端 UI + 自定义字段)
  2. 订阅不同的付费套餐(含支付)
  3. 不同套餐可访问不同资源(文章 / 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

流程:

  1. 用户选择要购买的套餐
  2. 显示你的微信收款二维码
  3. 用户上传支付截图
  4. 创建 CPT:wechat_payment_order

字段:

  • user_id
  • target_level
  • payment_image
  • status = 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)

完全是工程级的、可直接投产的轻量会员系统。

评论留言

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