如何以编程方式更改 Wordpress 上传文件夹?

Posted

技术标签:

【中文标题】如何以编程方式更改 Wordpress 上传文件夹?【英文标题】:How to Change Wordpress Upload Folder Programmatically? 【发布时间】:2012-03-29 13:55:17 【问题描述】:

我有一个自定义主题,我创建了一个上传按钮,当按下这些按钮时我会调用 Wordpress Uploader。像这样的:

jQuery('#ahng_blog_upload_button').click(function()  
    formfield = jQuery('#ahng_blog_upload_image').attr('name');
    tb_show('Upload or Select Photo and Click on "Insert into Post"', 'media-upload.php?type=audio&TB_iframe=true');
    return false;
);

现在,在我的 functions.php 文件夹中,我已经设置了要上传文件的位置 (http://website.com/wp-content/uploads),但我想根据按下的按钮更改上传位置。

例如,当按下'上传图片'按钮时,将上传文件夹更改为imageshttp://website.com/wp-content/uploads/images),当按下“上传 MP3” 按钮,将上传文件夹更改为 audio (http://website.com/wp-content/uploads/audio)。

我知道我可以将所有内容上传到我之前提到的默认文件夹中,但是如果我需要使用 ftp 查找特定文件,以后更容易进行排序。

有没有办法使用 jquery 和 ajax 并调用一个不会真正返回任何内容但在 wordpress 中更改上传目录的 php 文件?还是其他方式?

【问题讨论】:

我也有同样的问题。有人吗?! 【参考方案1】:

我使用的方法是基于纯 WordPress 钩子,不涉及 jQuery 或 Ajax。

而且我真的不知道您指的是什么按钮...自从唯一的按钮是“上传媒体”以来已经有一段时间了。除非您使用的是定制的。

此WordPress StackExchange answer 具有其他过滤可能性。下面是调整为按媒体类型过滤上传的代码。

add_filter('wp_handle_upload_prefilter', 'wpse_25894_handle_upload_prefilter');
add_filter('wp_handle_upload', 'wpse_25894_handle_upload');

function wpse_25894_handle_upload_prefilter( $file )

    add_filter('upload_dir', 'wpse_25894_custom_upload_dir');
    return $file;


function wpse_25894_handle_upload( $fileinfo )

    remove_filter('upload_dir', 'wpse_25894_custom_upload_dir');
    return $fileinfo;


function wpse_25894_custom_upload_dir($path)
   
    // Determines if uploading from inside a post/page/cpt
    // If not, default Upload folder is used
    $use_default_dir = (
            isset($_REQUEST['post_id'] ) 
            && $_REQUEST['post_id'] == 0 
            ) 
            ? true : false; 

    if( !empty( $path['error'] ) || $use_default_dir )
        return $path; //error or uploading not from a post/page/cpt 

     // Save uploads in FILETYPE based folders. When using this method, 
     // you may want to change the check for $use_default_dir
     $extension = substr( strrchr( $_POST['name'], '.' ), 1 );

     switch( $extension )
     
        case 'jpg':
        case 'png':
        case 'gif':
            $customdir = '/images';
            break;

        case 'mp4':
        case 'm4v':
            $customdir = '/videos';
            break;

        case 'txt':
        case 'doc':
        case 'pdf':
            $customdir = '/documents';
            break;

        default:
            $customdir = '/others';
            break;
     

    //remove default subdir (year/month)
    $path['path']    = str_replace($path['subdir'], '', $path['path']); 
    $path['url']     = str_replace($path['subdir'], '', $path['url']);  

    $path['subdir']  = $customdir;
    $path['path']   .= $customdir; 
    $path['url']    .= $customdir;  

    return $path;

【讨论】:

以上是关于如何以编程方式更改 Wordpress 上传文件夹?的主要内容,如果未能解决你的问题,请参考以下文章

Wordpress:在管理员选项页面中上传图片

如何以编程方式上传 torrent 文件

如何允许单个 Wordpress 站点接受我的 .ttf 文件上传?

如何以编程方式将文件上传到 Windows Server 2003 远程桌面

如何以编程方式在 WordPress 中创建帖子 [关闭]

如何以编程方式在主题中使用 Wordpress Gutenberg 块?