You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在WordPress的functions.php中通过do_shortcode读取用户套餐文件?

解决WordPress中在functions.php用短代码拼接文件路径的问题

问题根源

你之前的写法错误地在PHP字符串中嵌套了<?php ?>标签——这是模板文件里混合HTML和PHP的写法,在纯PHP文件(比如functions.php)里直接调用函数即可,不需要额外的PHP标签包裹。

正确实现步骤

  1. 先调用do_shortcode()获取当前用户的套餐名称,存入变量
  2. 添加安全校验(用户是否登录、短代码是否返回有效内容、文件是否存在),避免报错
  3. 用变量拼接路径,再执行文件读取操作

完整代码示例

// 先检查用户是否登录,避免未登录时短代码返回无效内容
if (is_user_logged_in()) {
    // 获取当前用户的套餐名称
    $plan_name = do_shortcode('[pms-subscription-info key="plan_name"]');
    
    // 过滤套餐名称,移除不安全字符(防止路径遍历攻击)
    $safe_plan_name = sanitize_file_name($plan_name);
    
    // 用WordPress内置常量简化路径,迁移网站时无需修改
    $base_path = get_stylesheet_directory() . '/offer/';
    $file_path = $base_path . $safe_plan_name . '.txt';
    
    // 检查文件存在后再读取,避免报错
    if (file_exists($file_path)) {
        $SIZE_LIMIT = file_get_contents($file_path);
    } else {
        // 文件不存在时的兜底逻辑
        $SIZE_LIMIT = '默认限制值';
        error_log("套餐配置文件不存在:{$file_path}");
    }
} else {
    // 用户未登录时的处理逻辑
    $SIZE_LIMIT = '请登录后查看';
}

关键说明

  • 路径简化:get_stylesheet_directory()会返回当前主题的绝对路径,比硬编码路径更稳定
  • 安全过滤:sanitize_file_name()自动过滤文件名中的危险字符(如../、特殊符号),避免恶意路径遍历
  • 错误防护:添加用户登录判断和文件存在检查,避免出现空值或文件不存在的报错

内容的提问来源于stack exchange,提问作者l0gin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 10:20:22