如何在WordPress的functions.php中通过do_shortcode读取用户套餐文件?
解决WordPress中在functions.php用短代码拼接文件路径的问题
问题根源
你之前的写法错误地在PHP字符串中嵌套了<?php ?>标签——这是模板文件里混合HTML和PHP的写法,在纯PHP文件(比如functions.php)里直接调用函数即可,不需要额外的PHP标签包裹。
正确实现步骤
- 先调用
do_shortcode()获取当前用户的套餐名称,存入变量 - 添加安全校验(用户是否登录、短代码是否返回有效内容、文件是否存在),避免报错
- 用变量拼接路径,再执行文件读取操作
完整代码示例
// 先检查用户是否登录,避免未登录时短代码返回无效内容 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
相关产品推荐
相关产品推荐

