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

如何修改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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 19:55:17