如何修改ACF Pro Extend的上传目录?代码实现遇阻求助
为ACF Pro Extend修改自定义上传路径的解决方案
我正尝试为ACF Pro Extend插件修改并添加新的上传路径,查阅了ACF Extended官方文档和WordPress官方的upload_dir钩子文档,但觉得文档内容不够完整,尝试了以下示例代码却无法正常运行:
add_filter('upload_dir', 'property_directory'); function property_directory( $param ){ $mydir = '/'.$property_name; $param['path'] = $param['path'] . $mydir; $param['url'] = $param['url'] . $mydir; return $param; }
问题分析
原代码的核心问题是$property_name变量未定义,同时没有限制仅针对ACF上传场景生效(可能导致全局修改所有上传路径),还缺少目录自动创建的逻辑。
修正后的代码方案
add_filter('upload_dir', 'custom_property_upload_directory'); function custom_property_upload_directory($param) { // 仅在ACF字段上传时生效,避免影响全局上传 if (!isset($_POST['action']) || $_POST['action'] !== 'upload_file') { return $param; } // 从当前编辑的文章中获取属性名称(根据实际业务调整获取逻辑) global $post; if ($post) { // 转义名称作为目录名,避免特殊字符引发路径错误 $property_name = sanitize_title(get_field('property_name', $post->ID)); if (empty($property_name)) { // 兜底:如果属性名称为空,用文章ID作为目录名 $property_name = 'property-' . $post->ID; } $mydir = '/' . $property_name; $param['path'] .= $mydir; $param['url'] .= $mydir; $param['subdir'] .= $mydir; // 自动创建目录,确保权限正确 if (!file_exists($param['path'])) { wp_mkdir_p($param['path']); } } return $param; }
关键说明
- 场景限制:通过判断
$_POST['action']确保仅在ACF上传字段触发时修改路径,不影响媒体库等其他上传场景 - 变量获取:示例中从当前文章的ACF字段
property_name获取目录名,可根据实际需求替换为其他数据源(如分类、用户ID等) - 目录安全:用
sanitize_title()处理目录名,避免特殊字符导致路径失效;用wp_mkdir_p()自动创建目录并处理权限 - 兜底逻辑:添加空值判断,防止因属性名称为空导致路径错误
内容的提问来源于stack exchange,提问作者iMarkDesigns
相关产品推荐
相关产品推荐

