无法获取外部文件数组值,请求排查问题(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
相关产品推荐
相关产品推荐

