WordPress无法正确指向目录,如何获取文件夹内文件名?
问题根源:URL vs 本地文件路径
我一眼就看出问题所在啦——你混淆了URL路径和服务器本地文件路径的区别!你用的get_template_directory_uri()返回的是主题目录的Web访问URL(比如https://your-site.com/wp-content/themes/your-theme/),而scandir()函数需要的是服务器上的本地文件系统路径(比如/var/www/html/wp-content/themes/your-theme/)。用URL去调用scandir()当然读不到文件啦!
修复方案
把获取路径的函数换成get_template_directory(),它会返回主题目录的绝对本地路径。下面是修正后的完整代码:
// 获取主题目录的本地绝对路径 $location = get_template_directory(); // 拼接目标文件夹路径 $dir = $location . '/slider/images/'; // 先检查目录是否存在,避免报错 if (is_dir($dir)) { // 读取目录文件(按逆序排列) $files2 = scandir($dir, 1); // 过滤掉.和..这两个默认条目 $files2 = array_diff($files2, array('.', '..')); print_r($files2); } else { echo "目标目录不存在,请检查路径是否正确!"; }
额外注意事项
- 如果你用的是子主题,请把
get_template_directory()换成get_stylesheet_directory(),因为前者指向父主题路径,后者才是子主题的本地路径。 - 确保服务器的PHP进程有该目录的读取权限,如果权限不足,
scandir()也会返回错误。 - 如果你需要在前端展示这些图片的URL,可以在拿到文件名后,用
get_template_directory_uri()拼接成可访问的URL:foreach ($files2 as $file) { $image_url = get_template_directory_uri() . '/slider/images/' . $file; echo "<img src='$image_url' alt='' />"; }
内容的提问来源于stack exchange,提问作者user9419091
相关产品推荐
相关产品推荐

