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

无法获取外部文件数组值,请求排查问题(WordPress Sage框架)

问题分析与解决办法

这是典型的PHP变量作用域问题,咱们一步步拆解原因和解决方案:

为什么$skills_icon返回NULL?

你通过array_map的匿名函数引入icons/icons.php文件时,文件里定义的$skills_icon变量是存在于匿名函数的局部作用域里的。匿名函数执行完毕后,这个作用域内的变量会被销毁,外部(包括你的Blade视图)根本无法访问到它——这就是你在home.blade.php里输出NULL的核心原因。

可行的解决方案

方案1:使用全局变量(快速解决,适合临时测试)

修改App/icons/icons.php,把变量声明为全局:

<?php 
global $skills_icon;
$skills_icon = array( 'one', 'two', 'three' ); 

然后在home.blade.php里使用前也要声明全局:

@php global $skills_icon; @endphp
{{ var_dump($skills_icon) }}

⚠️ 注意:全局变量虽然简单,但不利于代码维护,不推荐在正式项目中大量使用。

方案2:用Sage的模板数据过滤器(推荐,符合Sage开发规范)

这是Sage主题官方推荐的做法,通过过滤器把变量注入到所有视图的可用数据中:
在functions.php或者helpers.php里添加以下代码:

add_filter('sage/template/data', function($data) {
    // 引入图标定义文件
    require_once get_template_directory() . '/app/icons/icons.php';
    // 将变量添加到模板数据数组
    $data['skills_icon'] = $skills_icon;
    return $data;
});

之后你可以直接在home.blade.php里使用变量,无需额外操作:

{{ var_dump($skills_icon) }}

方案3:在视图中直接引入文件(适合仅单个视图需要的场景)

如果只有home.blade.php需要这个变量,可以直接在视图开头引入文件:

@php require_once get_template_directory() . '/app/icons/icons.php'; @endphp
{{ var_dump($skills_icon) }}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 19:58:16